summaryrefslogtreecommitdiff
path: root/www/wiki
diff options
context:
space:
mode:
authorYaco <franco@reevo.org>2019-08-22 21:22:00 -0300
committerYaco <franco@reevo.org>2019-08-22 21:22:00 -0300
commit34956fa757491949dc68396d090580d500249546 (patch)
treebfa500efa885912165bda62e7b40bd6cb1dff953 /www/wiki
parent92d1eb656bbc80dcc33e0c17eefaff80537f7d02 (diff)
agrega ModernTimeline y actualiza otras extensiones
Diffstat (limited to 'www/wiki')
-rw-r--r--www/wiki/LocalSettings.Reevo.php5
-rw-r--r--www/wiki/composer.local.json3
-rw-r--r--www/wiki/composer.lock278
-rw-r--r--www/wiki/extensions/Maps/.travis.install.sh1
-rw-r--r--www/wiki/extensions/Maps/.travis.yml3
-rw-r--r--www/wiki/extensions/Maps/DefaultSettings.php9
-rw-r--r--www/wiki/extensions/Maps/INSTALL.md2
-rw-r--r--www/wiki/extensions/Maps/Maps.resources.php92
-rw-r--r--www/wiki/extensions/Maps/RELEASE-NOTES.md13
-rw-r--r--www/wiki/extensions/Maps/composer.json2
-rw-r--r--www/wiki/extensions/Maps/extension.json232
-rw-r--r--www/wiki/extensions/Maps/i18n/ar.json2
-rw-r--r--www/wiki/extensions/Maps/i18n/en.json2
-rw-r--r--www/wiki/extensions/Maps/i18n/fr.json2
-rw-r--r--www/wiki/extensions/Maps/i18n/pl.json2
-rw-r--r--www/wiki/extensions/Maps/i18n/pt-br.json2
-rw-r--r--www/wiki/extensions/Maps/i18n/ru.json12
-rw-r--r--www/wiki/extensions/Maps/i18n/uk.json2
-rw-r--r--www/wiki/extensions/Maps/resources/leaflet/ext.maps.leaflet.js5
-rw-r--r--www/wiki/extensions/Maps/resources/maps.common.js (renamed from www/wiki/extensions/Maps/resources/ext.maps.common.js)0
-rw-r--r--www/wiki/extensions/Maps/resources/maps.services.js (renamed from www/wiki/extensions/Maps/resources/ext.maps.services.js)0
-rw-r--r--www/wiki/extensions/Maps/resources/sm.common.js (renamed from www/wiki/extensions/Maps/resources/ext.sm.common.js)0
-rw-r--r--www/wiki/extensions/Maps/src/MapsSetup.php256
-rw-r--r--www/wiki/extensions/Maps/src/MediaWiki/ParserHooks/DisplayMapRenderer.php31
-rw-r--r--www/wiki/extensions/Maps/src/Presentation/MapHtmlBuilder.php37
-rw-r--r--www/wiki/extensions/Maps/src/SemanticMW/ResultPrinters/MapPrinter.php36
-rw-r--r--www/wiki/extensions/Maps/src/SemanticMW/ValueDescriptions/AreaDescription.php20
-rw-r--r--www/wiki/extensions/Maps/src/SemanticMW/ValueDescriptions/CoordinateDescription.php16
-rw-r--r--www/wiki/extensions/Maps/tests/Integration/Parser/DisplayMapTest.php28
-rw-r--r--www/wiki/extensions/Mermaid/.gitignore11
-rw-r--r--www/wiki/extensions/Mermaid/.scrutinizer.yml28
-rw-r--r--www/wiki/extensions/Mermaid/.travis.yml33
-rw-r--r--www/wiki/extensions/Mermaid/COPYING103
-rw-r--r--www/wiki/extensions/Mermaid/DefaultSettings.php20
-rw-r--r--www/wiki/extensions/Mermaid/Mermaid.php194
-rw-r--r--www/wiki/extensions/Mermaid/README.md52
-rw-r--r--www/wiki/extensions/Mermaid/composer.json43
-rw-r--r--www/wiki/extensions/Mermaid/docs/INSTALL.md71
-rw-r--r--www/wiki/extensions/Mermaid/docs/ISSUE_TEMPLATE.md15
-rw-r--r--www/wiki/extensions/Mermaid/docs/PULL_REQUEST_TEMPLATE.md12
-rw-r--r--www/wiki/extensions/Mermaid/docs/RELEASE-NOTES.md42
-rw-r--r--www/wiki/extensions/Mermaid/docs/USAGE.md27
-rw-r--r--www/wiki/extensions/Mermaid/extension.json25
-rw-r--r--www/wiki/extensions/Mermaid/i18n/Mermaid.magic.php13
-rw-r--r--www/wiki/extensions/Mermaid/i18n/ar.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/ast.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/be-tarask.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/de.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/en.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/es.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/eu.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/fr.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/gl.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/ia.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/ko.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/li.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/mk.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/nb.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/pl.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/pt-br.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/pt.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/qqq.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/roa-tara.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/ru.json9
-rw-r--r--www/wiki/extensions/Mermaid/i18n/sv.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/tr.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/uk.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/zh-hans.json8
-rw-r--r--www/wiki/extensions/Mermaid/i18n/zh-hant.json8
-rw-r--r--www/wiki/extensions/Mermaid/phpunit.xml.dist28
-rw-r--r--www/wiki/extensions/Mermaid/res/d3/d3.min.js8
-rw-r--r--www/wiki/extensions/Mermaid/res/d3/dagre-d3.min.js8113
-rw-r--r--www/wiki/extensions/Mermaid/res/ext.mermaid.css12
-rw-r--r--www/wiki/extensions/Mermaid/res/ext.mermaid.js38
-rw-r--r--www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.dark.min.css1
-rw-r--r--www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.forest.min.css1
-rw-r--r--www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.min.css1
-rw-r--r--www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.min.js28
-rw-r--r--www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.neutral.min.css1
-rw-r--r--www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaidAPI.min.js1
-rw-r--r--www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.dark.min.css1
-rw-r--r--www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.forest.min.css1
-rw-r--r--www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.min.css1
-rw-r--r--www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.min.js9
-rw-r--r--www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.neutral.min.css1
-rw-r--r--www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaidAPI.min.js1
-rw-r--r--www/wiki/extensions/Mermaid/src/HookRegistry.php116
-rw-r--r--www/wiki/extensions/Mermaid/src/MermaidParserFunction.php139
-rw-r--r--www/wiki/extensions/Mermaid/tests/bootstrap.php31
-rw-r--r--www/wiki/extensions/Mermaid/tests/phpunit/Integration/I18nJsonFileIntegrityTest.php77
-rw-r--r--www/wiki/extensions/Mermaid/tests/phpunit/Unit/HookRegistryTest.php119
-rw-r--r--www/wiki/extensions/Mermaid/tests/phpunit/Unit/MermaidParserFunctionTest.php109
-rw-r--r--www/wiki/extensions/Mermaid/tests/travis/install-mediawiki.sh43
-rw-r--r--www/wiki/extensions/Mermaid/tests/travis/install-mermaid.sh72
-rw-r--r--www/wiki/extensions/Mermaid/tests/travis/run-tests.sh14
-rw-r--r--www/wiki/extensions/Mermaid/tests/travis/upload-coverage-report.sh10
-rw-r--r--www/wiki/extensions/ModernTimeline/.scrutinizer.yml16
-rw-r--r--www/wiki/extensions/ModernTimeline/.travis.install.sh46
-rw-r--r--www/wiki/extensions/ModernTimeline/.travis.yml32
-rw-r--r--www/wiki/extensions/ModernTimeline/COPYING347
-rw-r--r--www/wiki/extensions/ModernTimeline/README.md150
-rw-r--r--www/wiki/extensions/ModernTimeline/RELEASE-NOTES.md11
-rw-r--r--www/wiki/extensions/ModernTimeline/composer.json44
-rw-r--r--www/wiki/extensions/ModernTimeline/docs/ISSUE_TEMPLATE.md30
-rw-r--r--www/wiki/extensions/ModernTimeline/extension.json106
-rw-r--r--www/wiki/extensions/ModernTimeline/i18n/ar.json21
-rw-r--r--www/wiki/extensions/ModernTimeline/i18n/de.json22
-rw-r--r--www/wiki/extensions/ModernTimeline/i18n/en.json25
-rw-r--r--www/wiki/extensions/ModernTimeline/i18n/qqq.json23
-rw-r--r--www/wiki/extensions/ModernTimeline/phpunit.xml.dist29
-rw-r--r--www/wiki/extensions/ModernTimeline/resources/modernTimeline.css4
-rw-r--r--www/wiki/extensions/ModernTimeline/resources/modernTimeline.js26
-rw-r--r--www/wiki/extensions/ModernTimeline/resources/vendor/font.default.css9
-rw-r--r--www/wiki/extensions/ModernTimeline/resources/vendor/timeline.css27
-rw-r--r--www/wiki/extensions/ModernTimeline/resources/vendor/timeline.js14042
-rw-r--r--www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.eotbin0 -> 14644 bytes
-rw-r--r--www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.svg63
-rw-r--r--www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.ttfbin0 -> 14472 bytes
-rw-r--r--www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.woffbin0 -> 14548 bytes
-rw-r--r--www/wiki/extensions/ModernTimeline/src/Event.php34
-rw-r--r--www/wiki/extensions/ModernTimeline/src/JsonBuilder.php122
-rw-r--r--www/wiki/extensions/ModernTimeline/src/ModernTimelinePrinter.php59
-rw-r--r--www/wiki/extensions/ModernTimeline/src/ModernTimelineSetup.php30
-rw-r--r--www/wiki/extensions/ModernTimeline/src/ResultFacade/PropertyValueCollection.php35
-rw-r--r--www/wiki/extensions/ModernTimeline/src/ResultFacade/ResultSimplifier.php57
-rw-r--r--www/wiki/extensions/ModernTimeline/src/ResultFacade/Subject.php39
-rw-r--r--www/wiki/extensions/ModernTimeline/src/ResultFacade/SubjectCollection.php23
-rw-r--r--www/wiki/extensions/ModernTimeline/src/SlidePresenter/SimpleSlidePresenter.php40
-rw-r--r--www/wiki/extensions/ModernTimeline/src/SlidePresenter/SlidePresenter.php13
-rw-r--r--www/wiki/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php60
-rw-r--r--www/wiki/extensions/ModernTimeline/src/TimelineOptions.php143
-rw-r--r--www/wiki/extensions/ModernTimeline/src/TimelinePresenter.php105
-rw-r--r--www/wiki/extensions/ModernTimeline/tests/Integration/OptionsTest.php150
-rw-r--r--www/wiki/extensions/ModernTimeline/tests/System/JsonScript/escaping.json51
-rw-r--r--www/wiki/extensions/ModernTimeline/tests/System/JsonScript/parameters.json35
-rw-r--r--www/wiki/extensions/ModernTimeline/tests/System/JsonScript/query.json93
-rw-r--r--www/wiki/extensions/ModernTimeline/tests/System/JsonScript/smwdoc.json37
-rw-r--r--www/wiki/extensions/ModernTimeline/tests/System/JsonScript/template.json54
-rw-r--r--www/wiki/extensions/ModernTimeline/tests/System/JsonScriptTest.php15
-rw-r--r--www/wiki/extensions/ModernTimeline/tests/Unit/JsonBuilderTest.php162
-rw-r--r--www/wiki/extensions/ModernTimeline/tests/Unit/SlidePresenter/TemplateSlidePresenterTest.php81
-rw-r--r--www/wiki/extensions/ModernTimeline/tests/bootstrap.php18
-rw-r--r--www/wiki/extensions/SemanticResultFormats/.travis.yml23
-rw-r--r--www/wiki/extensions/SemanticResultFormats/DefaultSettings.php11
-rw-r--r--www/wiki/extensions/SemanticResultFormats/README.md5
-rw-r--r--www/wiki/extensions/SemanticResultFormats/RELEASE-NOTES.md24
-rw-r--r--www/wiki/extensions/SemanticResultFormats/Resources.php14
-rw-r--r--www/wiki/extensions/SemanticResultFormats/SemanticResultFormats.hooks.php20
-rw-r--r--www/wiki/extensions/SemanticResultFormats/SemanticResultFormats.php15
-rw-r--r--www/wiki/extensions/SemanticResultFormats/build/travis/install-semantic-result-formats.sh11
-rw-r--r--www/wiki/extensions/SemanticResultFormats/composer.json9
-rw-r--r--www/wiki/extensions/SemanticResultFormats/docs/COMPATIBILITY.md111
-rw-r--r--www/wiki/extensions/SemanticResultFormats/docs/INSTALL.md187
-rw-r--r--www/wiki/extensions/SemanticResultFormats/docs/README.md7
-rw-r--r--www/wiki/extensions/SemanticResultFormats/extension.json13
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/Gantt/GanttPrinter.php284
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/Gantt/resources/ext.gantt.js81
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/Gantt/src/Gantt.php203
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/Gantt/src/GanttSection.php66
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/Gantt/src/GanttTask.php99
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/bibtex/SRF_BibTeX.php444
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/calendar/resources/ext.srf.formats.eventcalendar.js7
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/dygraphs/SRF_Dygraphs.php28
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/excel/SRF_Excel.php364
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/filtered/src/ResultItem.php2
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/CalendarView.php2
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/MapView.php18
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/TableView.php12
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/gallery/Gallery.php7
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/media/MediaPlayer.php37
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php257
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/slideshow/SRF_SlideShow.php6
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/slideshow/SRF_SlideShowApi.php17
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/spreadsheet/SpreadsheetPrinter.php461
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/tagcloud/TagCloud.php17
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/timeline/SRF_Timeline.php2
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/timeseries/resources/ext.srf.timeseries.flot.js5
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/tree/TreeResultPrinter.php11
-rw-r--r--www/wiki/extensions/SemanticResultFormats/formats/valuerank/SRF_ValueRank.php4
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/ar.json33
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/ast.json6
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/br.json4
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/ca.json3
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/cs.json271
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/da.json99
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/de.json35
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/dsb.json1
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/el.json3
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/en.json38
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/es.json14
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/eu.json12
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/fa.json3
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/fi.json17
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/fr.json31
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/gl.json7
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/he.json12
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/hsb.json4
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/hu.json1
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/ia.json1
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/it.json10
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/ja.json2
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/ko.json18
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/lb.json4
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/lt.json3
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/mk.json28
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/nb.json7
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/nl.json9
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/oc.json4
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/pl.json3
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/pms.json1
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/pt-br.json34
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/pt.json30
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/qqq.json26
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/roa-tara.json14
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/ru.json48
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/si.json1
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/sv.json12
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/tl.json1
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/uk.json22
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/zh-hans.json22
-rw-r--r--www/wiki/extensions/SemanticResultFormats/i18n/zh-hant.json26
-rw-r--r--www/wiki/extensions/SemanticResultFormats/resources/ext.srf.css47
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/BibTex/BibTexFileExportPrinter.php190
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/BibTex/Item.php185
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/BibTex/README.md (renamed from www/wiki/extensions/SemanticResultFormats/formats/bibtex/README)85
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/Graph/GraphPrinter.php (renamed from www/wiki/extensions/SemanticResultFormats/formats/graphviz/SRF_Graph.php)38
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/Outline/ListTreeBuilder.php162
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/Outline/OutlineItem.php62
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/Outline/OutlineResultPrinter.php139
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/Outline/OutlineTree.php90
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/Outline/README.md53
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/Outline/TemplateBuilder.php156
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/iCalendar/iCalendarFileExportPrinter.php14
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/vCard/Address.php21
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/vCard/vCard.php14
-rw-r--r--www/wiki/extensions/SemanticResultFormats/src/vCard/vCardFileExportPrinter.php543
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/bootstrap.php4
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-0.bib2
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-1.bib10
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-2.bib8
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-3.bib16
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/JsonTestCaseScriptRunnerTest.php35
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/bibtex-01.json159
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/filtered-01.json8
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/filtered-02.json4
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/gantt-01.json167
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/outline-01.json101
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/outline-02.json105
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-01.json112
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-02.json18
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-06.json36
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-07.json10
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/ResourcesTest.php12
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/ResultPrinterReflector.php55
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/BibTex/BibTexFileExportPrinterTest.php149
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/BibTex/ItemTest.php111
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/ExcelTest.php45
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/GanttTest.php30
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/GraphTest.php2
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/SpreadsheetTest.php51
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/ListTreeBuilderTest.php41
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/OutlineItemTest.php36
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/OutlineResultPrinterTest.php96
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/OutlineTreeTest.php49
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/TemplateBuilderTest.php43
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/AddressTest.php12
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/vCardFileExportPrinterTest.php133
-rw-r--r--www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/vCardTest.php5
-rw-r--r--www/wiki/skins/bo/reevo.less12
-rw-r--r--www/wiki/vendor/composer/autoload_classmap.php51
-rw-r--r--www/wiki/vendor/composer/autoload_files.php1
-rw-r--r--www/wiki/vendor/composer/autoload_psr4.php3
-rw-r--r--www/wiki/vendor/composer/autoload_static.php67
-rw-r--r--www/wiki/vendor/composer/installed.json178
-rw-r--r--www/wiki/vendor/composer/installers/composer.json2
-rw-r--r--www/wiki/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php10
-rw-r--r--www/wiki/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php20
-rw-r--r--www/wiki/vendor/composer/installers/src/Composer/Installers/Installer.php4
-rw-r--r--www/wiki/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php11
-rw-r--r--www/wiki/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php100
-rw-r--r--www/wiki/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php1
-rw-r--r--www/wiki/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php10
-rw-r--r--www/wiki/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php12
-rw-r--r--www/wiki/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php13
-rw-r--r--www/wiki/vendor/param-processor/param-processor/.travis.yml4
-rw-r--r--www/wiki/vendor/param-processor/param-processor/IdeHelper.php10
-rw-r--r--www/wiki/vendor/param-processor/param-processor/README.md80
-rw-r--r--www/wiki/vendor/param-processor/param-processor/composer.json14
-rw-r--r--www/wiki/vendor/param-processor/param-processor/phpcs.xml12
-rw-r--r--www/wiki/vendor/param-processor/param-processor/phpmd.xml16
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/Definition/DimensionParam.php65
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/Definition/StringParam.php4
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/IParam.php4
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/IParamDefinition.php37
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/Options.php6
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/PackagePrivate/DimensionParser.php44
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/PackagePrivate/Param.php418
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/PackagePrivate/ParamType.php58
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/Param.php516
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/ParamDefinition.php360
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/ParamDefinitionFactory.php171
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/ParameterTypes.php71
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/ProcessingError.php12
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/ProcessingErrorHandler.php28
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/ProcessingResult.php13
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/Processor.php92
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/Settings.php2
-rw-r--r--www/wiki/vendor/param-processor/param-processor/src/TopologicalSort.php15
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/BoolParamTest.php (renamed from www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/BoolParamTest.php)2
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/FloatParamTest.php (renamed from www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/FloatParamTest.php)2
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/IntParamTest.php (renamed from www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/IntParamTest.php)2
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/NumericParamTest.php (renamed from www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/NumericParamTest.php)2
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/ParamDefinitionTest.php (renamed from www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/ParamDefinitionTest.php)15
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/StringParamTest.php (renamed from www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/StringParamTest.php)13
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Integration/DimensionTypeTest.php208
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Integration/ProcessorTest.php (renamed from www/wiki/vendor/param-processor/param-processor/tests/phpunit/ProcessorTest.php)33
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Unit/OptionsTest.php (renamed from www/wiki/vendor/param-processor/param-processor/tests/phpunit/OptionsTest.php)12
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Unit/PackagePrivate/DimensionParserTest.php51
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Unit/ParamAliasTest.php21
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Unit/ParamDefinitionFactoryTest.php140
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Unit/ParamTest.php (renamed from www/wiki/vendor/param-processor/param-processor/tests/phpunit/ParamTest.php)6
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Unit/ParameterTypesTest.php75
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Unit/ProcessingResultTest.php (renamed from www/wiki/vendor/param-processor/param-processor/tests/phpunit/ProcessingResultTest.php)36
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/Unit/SettingsTest.php (renamed from www/wiki/vendor/param-processor/param-processor/tests/phpunit/SettingsTest.php)2
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/DimensionParamTest.php106
-rw-r--r--www/wiki/vendor/param-processor/param-processor/tests/phpunit/ParamDefinitionFactoryTest.php23
326 files changed, 34061 insertions, 3991 deletions
diff --git a/www/wiki/LocalSettings.Reevo.php b/www/wiki/LocalSettings.Reevo.php
index c080b226..1028b1e3 100644
--- a/www/wiki/LocalSettings.Reevo.php
+++ b/www/wiki/LocalSettings.Reevo.php
@@ -163,6 +163,9 @@ enableSemantics( $REEVO_URL );
wfLoadExtension( 'SemanticResultFormats' );
wfLoadExtension( 'SemanticFormsSelect' );
+## ModernTimeline
+wfLoadExtension( 'ModernTimeline' );
+
## PageForms
wfLoadExtension( 'PageForms' );
@@ -289,7 +292,7 @@ wfLoadExtension( 'MsUpload' );
$wgMSU_useDragDrop = true; // Should the drag & drop area be shown? (Not set by default)
$wgMSU_showAutoCat = true; // Files uploaded while editing a category page will be added to that category
$wgMSU_checkAutoCat = true; // Whether the checkbox for adding a category to a page is checked by default
-$wgMSU_useMsLinks = false; // Insert links in Extension:MsLinks style?
+$wgMSU_useMsLinks = true; // Insert links in Extension:MsLinks style?
$wgMSU_confirmReplace = true; // Show the "Replace file?" checkbox
$wgMSU_imgParams = 'thumb|none'; // Any image parameter separated by a semicolon. Examples are: {width}px, left, right, center, none, border, frameless, frame, thumb etc etc
diff --git a/www/wiki/composer.local.json b/www/wiki/composer.local.json
index 21e919d5..c16110f3 100644
--- a/www/wiki/composer.local.json
+++ b/www/wiki/composer.local.json
@@ -4,6 +4,7 @@
"mediawiki/semantic-result-formats": "~3.0",
"mediawiki/semantic-forms-select": "~3.0",
"mediawiki/maps": "^7",
- "mediawiki/chameleon-skin": "1.7.1"
+ "mediawiki/chameleon-skin": "1.7.1",
+ "professional-wiki/modern-timeline": "~1.0"
}
}
diff --git a/www/wiki/composer.lock b/www/wiki/composer.lock
index 22eabd3d..a1a6f305 100644
--- a/www/wiki/composer.lock
+++ b/www/wiki/composer.lock
@@ -8,16 +8,16 @@
"packages": [
{
"name": "composer/installers",
- "version": "v1.6.0",
+ "version": "v1.7.0",
"source": {
"type": "git",
"url": "https://github.com/composer/installers.git",
- "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b"
+ "reference": "141b272484481432cda342727a427dc1e206bfa0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/installers/zipball/cfcca6b1b60bc4974324efb5783c13dca6932b5b",
- "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b",
+ "url": "https://api.github.com/repos/composer/installers/zipball/141b272484481432cda342727a427dc1e206bfa0",
+ "reference": "141b272484481432cda342727a427dc1e206bfa0",
"shasum": ""
},
"require": {
@@ -73,6 +73,7 @@
"RadPHP",
"SMF",
"Thelia",
+ "Whmcs",
"WolfCMS",
"agl",
"aimeos",
@@ -95,6 +96,7 @@
"installer",
"itop",
"joomla",
+ "known",
"kohana",
"laravel",
"lavalite",
@@ -124,7 +126,7 @@
"zend",
"zikula"
],
- "time": "2018-08-27T06:10:37+00:00"
+ "time": "2019-08-12T15:00:31+00:00"
},
{
"name": "composer/semver",
@@ -1104,16 +1106,16 @@
},
{
"name": "mediawiki/maps",
- "version": "7.3.2",
+ "version": "7.4.0",
"source": {
"type": "git",
"url": "https://github.com/JeroenDeDauw/Maps.git",
- "reference": "57e5b822dacb7ed4eacb4a2d996ce8e6be4ae13a"
+ "reference": "d4d195d5f3e57d5361882b94284286b7599e23dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/JeroenDeDauw/Maps/zipball/57e5b822dacb7ed4eacb4a2d996ce8e6be4ae13a",
- "reference": "57e5b822dacb7ed4eacb4a2d996ce8e6be4ae13a",
+ "url": "https://api.github.com/repos/JeroenDeDauw/Maps/zipball/d4d195d5f3e57d5361882b94284286b7599e23dc",
+ "reference": "d4d195d5f3e57d5361882b94284286b7599e23dc",
"shasum": ""
},
"require": {
@@ -1125,7 +1127,7 @@
"jeroen/simple-geocoder": "~1.2",
"mediawiki/parser-hooks": "~1.5",
"mediawiki/validator": "~2.2",
- "param-processor/param-processor": "~1.4.2",
+ "param-processor/param-processor": "^1.4.2",
"php": ">=7.1"
},
"replace": {
@@ -1179,7 +1181,58 @@
"mediawiki",
"osm"
],
- "time": "2019-07-25T04:17:46+00:00"
+ "time": "2019-08-09T18:15:24+00:00"
+ },
+ {
+ "name": "mediawiki/mermaid",
+ "version": "2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/SemanticMediaWiki/Mermaid.git",
+ "reference": "9fe1279a9aed7afdecbbed4c183a81302ce63dce"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/SemanticMediaWiki/Mermaid/zipball/9fe1279a9aed7afdecbbed4c183a81302ce63dce",
+ "reference": "9fe1279a9aed7afdecbbed4c183a81302ce63dce",
+ "shasum": ""
+ },
+ "require": {
+ "composer/installers": "1.*,>=1.0.1",
+ "php": ">=5.6.0"
+ },
+ "type": "mediawiki-extension",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "Mermaid.php"
+ ],
+ "psr-4": {
+ "Mermaid\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "James Hong Kong",
+ "role": "Developer"
+ }
+ ],
+ "description": "Provides a parser function to generate diagrams and flowcharts with the help of the mermaid script language",
+ "homepage": "https://github.com/SemanticMediaWiki/Mermaid",
+ "keywords": [
+ "mediawiki",
+ "mermaid",
+ "parser function"
+ ],
+ "time": "2019-05-20T10:17:44+00:00"
},
{
"name": "mediawiki/page-forms",
@@ -1465,34 +1518,36 @@
},
{
"name": "mediawiki/semantic-result-formats",
- "version": "3.0.1",
+ "version": "3.1.0",
"source": {
"type": "git",
"url": "https://github.com/SemanticMediaWiki/SemanticResultFormats.git",
- "reference": "e1956df8796b8df9a156083801e7dcc0ab2b9a25"
+ "reference": "aa0649f28e536fd9da363dcdff9405dc402ff275"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/SemanticMediaWiki/SemanticResultFormats/zipball/e1956df8796b8df9a156083801e7dcc0ab2b9a25",
- "reference": "e1956df8796b8df9a156083801e7dcc0ab2b9a25",
+ "url": "https://api.github.com/repos/SemanticMediaWiki/SemanticResultFormats/zipball/aa0649f28e536fd9da363dcdff9405dc402ff275",
+ "reference": "aa0649f28e536fd9da363dcdff9405dc402ff275",
"shasum": ""
},
"require": {
"composer/installers": "1.*,>=1.0.1",
"data-values/geo": "~4.0|~3.0|~2.0",
+ "mediawiki/mermaid": "~2.1",
"mediawiki/semantic-media-wiki": "~3.0",
"nicmart/tree": "^0.2.7",
- "php": ">=5.6.0",
+ "php": ">=7.0",
"symfony/css-selector": "^3.3"
},
"suggest": {
"mediawiki/graph-viz": "Required for 'format=graph' and 'format=process'",
- "phpoffice/phpexcel": "Required for 'format=excel'"
+ "phpoffice/phpexcel": "Required for 'format=excel'",
+ "phpoffice/phpspreadsheet": "Required for 'format=spreadsheet'"
},
"type": "mediawiki-extension",
"extra": {
"branch-alias": {
- "dev-master": "3.0.x-dev"
+ "dev-master": "3.1.x-dev"
}
},
"autoload": {
@@ -1547,7 +1602,7 @@
"mediawiki",
"wiki"
],
- "time": "2019-03-27T22:43:56+00:00"
+ "time": "2019-08-18T17:55:25+00:00"
},
{
"name": "mediawiki/validator",
@@ -2104,16 +2159,16 @@
},
{
"name": "param-processor/param-processor",
- "version": "1.4.2",
+ "version": "1.10.0",
"source": {
"type": "git",
"url": "https://github.com/JeroenDeDauw/ParamProcessor.git",
- "reference": "40cd2140aa339f59c5500760a9f6f1fa6c0ef0a6"
+ "reference": "5dec3e41bdc684640faf334db650e9bd32092e23"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/JeroenDeDauw/ParamProcessor/zipball/40cd2140aa339f59c5500760a9f6f1fa6c0ef0a6",
- "reference": "40cd2140aa339f59c5500760a9f6f1fa6c0ef0a6",
+ "url": "https://api.github.com/repos/JeroenDeDauw/ParamProcessor/zipball/5dec3e41bdc684640faf334db650e9bd32092e23",
+ "reference": "5dec3e41bdc684640faf334db650e9bd32092e23",
"shasum": ""
},
"require": {
@@ -2132,17 +2187,13 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.4.x-dev"
+ "dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"ParamProcessor\\": "src"
},
- "classmap": [
- "tests/phpunit/Definitions/ParamDefinitionTest.php",
- "tests/phpunit/Definitions/NumericParamTest.php"
- ],
"files": [
"DefaultConfig.php"
]
@@ -2168,7 +2219,7 @@
"mediawiki",
"validator"
],
- "time": "2018-11-26T05:02:09+00:00"
+ "time": "2019-08-03T15:18:54+00:00"
},
{
"name": "pear/console_getopt",
@@ -2534,6 +2585,63 @@
"time": "2015-02-10T20:07:52+00:00"
},
{
+ "name": "professional-wiki/modern-timeline",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ProfessionalWiki/ModernTimeline.git",
+ "reference": "458b66e8c1e4d05ba3819a0f73b655b97203144c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ProfessionalWiki/ModernTimeline/zipball/458b66e8c1e4d05ba3819a0f73b655b97203144c",
+ "reference": "458b66e8c1e4d05ba3819a0f73b655b97203144c",
+ "shasum": ""
+ },
+ "require": {
+ "composer/installers": "^1.0.1",
+ "param-processor/param-processor": "~1.10",
+ "php": ">=7.1"
+ },
+ "type": "mediawiki-extension",
+ "autoload": {
+ "psr-4": {
+ "ModernTimeline\\": "src/",
+ "ModernTimeline\\Tests\\": "tests/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Professional.Wiki",
+ "role": "Creator",
+ "email": "info@professional.wiki",
+ "homepage": "https://professional.wiki"
+ },
+ {
+ "name": "Jeroen De Dauw",
+ "role": "Creator and lead developer",
+ "email": "jeroendedauw@gmail.com",
+ "homepage": "https://www.entropywins.wtf"
+ }
+ ],
+ "description": "Adds a modern timeline visualization as Semantic MediaWiki result format",
+ "homepage": "https://github.com/ProfessionalWiki/ModernTimeline",
+ "keywords": [
+ "Result format",
+ "Semantic MediaWiki",
+ "mediawiki",
+ "timeline",
+ "timelineJS3",
+ "visualization",
+ "wiki"
+ ],
+ "time": "2019-08-16T00:14:56+00:00"
+ },
+ {
"name": "psr/log",
"version": "1.0.2",
"source": {
@@ -4405,16 +4513,16 @@
},
{
"name": "myclabs/deep-copy",
- "version": "1.9.1",
+ "version": "1.9.3",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72"
+ "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72",
- "reference": "e6828efaba2c9b79f4499dae1d66ef8bfa7b2b72",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea",
+ "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea",
"shasum": ""
},
"require": {
@@ -4449,7 +4557,7 @@
"object",
"object graph"
],
- "time": "2019-04-07T13:18:21+00:00"
+ "time": "2019-08-09T12:45:53+00:00"
},
{
"name": "nikic/php-parser",
@@ -4580,18 +4688,18 @@
"authors": [
{
"name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
+ "role": "Developer",
+ "email": "arne@blankerts.de"
},
{
"name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
+ "role": "Developer",
+ "email": "sebastian@phpeople.de"
},
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
+ "role": "Developer",
+ "email": "sebastian@phpunit.de"
}
],
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
@@ -4627,18 +4735,18 @@
"authors": [
{
"name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
+ "role": "Developer",
+ "email": "arne@blankerts.de"
},
{
"name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
+ "role": "Developer",
+ "email": "sebastian@phpeople.de"
},
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
+ "role": "Developer",
+ "email": "sebastian@phpunit.de"
}
],
"description": "Library for handling version information and constraints",
@@ -4957,8 +5065,8 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
+ "role": "lead",
+ "email": "sb@sebastian-bergmann.de"
}
],
"description": "FilterIterator implementation that filters files based on a list of suffixes.",
@@ -4999,8 +5107,8 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "role": "lead",
+ "email": "sebastian@phpunit.de"
}
],
"description": "Simple template engine.",
@@ -5048,8 +5156,8 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
+ "role": "lead",
+ "email": "sb@sebastian-bergmann.de"
}
],
"description": "Utility class for timing",
@@ -5538,16 +5646,16 @@
},
{
"name": "sebastian/exporter",
- "version": "3.1.0",
+ "version": "3.1.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "234199f4528de6d12aaa58b612e98f7d36adb937"
+ "reference": "06a9a5947f47b3029d76118eb5c22802e5869687"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937",
- "reference": "234199f4528de6d12aaa58b612e98f7d36adb937",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/06a9a5947f47b3029d76118eb5c22802e5869687",
+ "reference": "06a9a5947f47b3029d76118eb5c22802e5869687",
"shasum": ""
},
"require": {
@@ -5575,6 +5683,10 @@
],
"authors": [
{
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
},
@@ -5583,16 +5695,12 @@
"email": "github@wallbash.com"
},
{
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
"name": "Adam Harvey",
"email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
}
],
"description": "Provides the functionality to export PHP variables for visualization",
@@ -5601,7 +5709,7 @@
"export",
"exporter"
],
- "time": "2017-04-03T13:19:02+00:00"
+ "time": "2019-08-11T12:43:14+00:00"
},
{
"name": "sebastian/global-state",
@@ -5876,8 +5984,8 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "role": "lead",
+ "email": "sebastian@phpunit.de"
}
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
@@ -6065,16 +6173,16 @@
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.11.0",
+ "version": "v1.12.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "82ebae02209c21113908c229e9883c419720738a"
+ "reference": "550ebaac289296ce228a706d0867afc34687e3f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a",
- "reference": "82ebae02209c21113908c229e9883c419720738a",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4",
+ "reference": "550ebaac289296ce228a706d0867afc34687e3f4",
"shasum": ""
},
"require": {
@@ -6086,7 +6194,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.11-dev"
+ "dev-master": "1.12-dev"
}
},
"autoload": {
@@ -6103,12 +6211,12 @@
],
"authors": [
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- },
- {
"name": "Gert de Pagter",
"email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for ctype functions",
@@ -6119,20 +6227,20 @@
"polyfill",
"portable"
],
- "time": "2019-02-06T07:57:58+00:00"
+ "time": "2019-08-06T08:03:45+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.11.0",
+ "version": "v1.12.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "fe5e94c604826c35a32fa832f35bd036b6799609"
+ "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609",
- "reference": "fe5e94c604826c35a32fa832f35bd036b6799609",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b42a2f66e8f1b15ccf25652c3424265923eb4f17",
+ "reference": "b42a2f66e8f1b15ccf25652c3424265923eb4f17",
"shasum": ""
},
"require": {
@@ -6144,7 +6252,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.11-dev"
+ "dev-master": "1.12-dev"
}
},
"autoload": {
@@ -6178,7 +6286,7 @@
"portable",
"shim"
],
- "time": "2019-02-06T07:57:58+00:00"
+ "time": "2019-08-06T08:03:45+00:00"
},
{
"name": "symfony/var-dumper",
@@ -6282,8 +6390,8 @@
"authors": [
{
"name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
+ "role": "Developer",
+ "email": "arne@blankerts.de"
}
],
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
diff --git a/www/wiki/extensions/Maps/.travis.install.sh b/www/wiki/extensions/Maps/.travis.install.sh
index 0e60bf2d..8d155391 100644
--- a/www/wiki/extensions/Maps/.travis.install.sh
+++ b/www/wiki/extensions/Maps/.travis.install.sh
@@ -60,6 +60,7 @@ fi
echo 'error_reporting(E_ALL| E_STRICT);' >> LocalSettings.php
echo 'ini_set("display_errors", 1);' >> LocalSettings.php
echo '$wgShowExceptionDetails = true;' >> LocalSettings.php
+echo '$wgShowDBErrorBacktrace = true;' >> LocalSettings.php
echo '$wgDevelopmentWarnings = true;' >> LocalSettings.php
echo "putenv( 'MW_INSTALL_PATH=$(pwd)' );" >> LocalSettings.php
diff --git a/www/wiki/extensions/Maps/.travis.yml b/www/wiki/extensions/Maps/.travis.yml
index 226ea1d5..49373ca8 100644
--- a/www/wiki/extensions/Maps/.travis.yml
+++ b/www/wiki/extensions/Maps/.travis.yml
@@ -1,5 +1,8 @@
language: php
+services:
+ - mysql
+
sudo: false
matrix:
diff --git a/www/wiki/extensions/Maps/DefaultSettings.php b/www/wiki/extensions/Maps/DefaultSettings.php
index 45053c1b..a3834788 100644
--- a/www/wiki/extensions/Maps/DefaultSettings.php
+++ b/www/wiki/extensions/Maps/DefaultSettings.php
@@ -38,15 +38,6 @@ return [
'egMapsMapWidth' => 'auto',
'egMapsMapHeight' => 350,
- // Array. The minimum and maximum width and height for all maps. First min and
- // max for absolute values, then min and max for percentage values. When the
- // height or width exceed their limits, they will be changed to the closest
- // allowed value.
- 'egMapsSizeRestrictions' => [
- 'width' => [ 50, 1020, 1, 100 ],
- 'height' => [ 50, 1000, 1, 100 ],
- ],
-
// Strings. The default content for all pop-ups. This value will only be used
// when the user does not provide one.
'egMapsDefaultTitle' => '',
diff --git a/www/wiki/extensions/Maps/INSTALL.md b/www/wiki/extensions/Maps/INSTALL.md
index ad84a414..20a4b3ad 100644
--- a/www/wiki/extensions/Maps/INSTALL.md
+++ b/www/wiki/extensions/Maps/INSTALL.md
@@ -29,7 +29,7 @@ minimum requirements are indicated in bold. For a detailed list of changes, see
<td>7.1 - 7.4+</td>
<td>1.31 - 1.33+</td>
<td>3.0+</td>
- <td>Planned Q2 2019</td>
+ <td>Planned Q3 2019</td>
</tr>
<tr>
<th>7.3.x</th>
diff --git a/www/wiki/extensions/Maps/Maps.resources.php b/www/wiki/extensions/Maps/Maps.resources.php
deleted file mode 100644
index 9c61887b..00000000
--- a/www/wiki/extensions/Maps/Maps.resources.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-/**
- * Definition of Maps resource loader modules.
- *
- * @since 3.0
- *
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- * @author Daniel Werner < daniel.a.r.werner@gmail.com >
- *
- * @codeCoverageIgnoreStart
- */
-return call_user_func( function() {
- $moduleTemplate = [
- 'position' => 'top',
- 'group' => 'ext.maps',
- 'localBasePath' => __DIR__,
- 'remoteExtPath' => 'Maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ]
- ];
-
- return [
- 'ext.maps.common' => $moduleTemplate + [
- 'messages' => [
- 'maps-load-failed',
- ] ,
- 'scripts' => [
- 'resources/ext.maps.common.js',
- ],
- ],
-
- 'ext.maps.resizable' => $moduleTemplate + [
- 'dependencies' => 'jquery.ui.resizable',
- ],
-
- 'mapeditor' => $moduleTemplate + [
- 'scripts' => [
- 'resources/editor/js/jquery.miniColors.js',
- 'resources/editor/js/mapeditor.iefixes.js',
- 'resources/editor/js/mapeditor.js',
- ],
- 'styles' => [
- 'resources/editor/css/jquery.miniColors.css',
- 'resources/editor/css/mapeditor.css',
- ],
- 'messages' => [
- 'mapeditor-parser-error',
- 'mapeditor-none-text',
- 'mapeditor-done-button',
- 'mapeditor-remove-button',
- 'mapeditor-import-button',
- 'mapeditor-export-button',
- 'mapeditor-import-button2',
- 'mapeditor-select-button',
- 'mapeditor-mapparam-button',
- 'mapeditor-clear-button',
- 'mapeditor-imageoverlay-button',
- ],
- 'dependencies' => [
- 'ext.maps.common',
- 'jquery.ui.autocomplete',
- 'jquery.ui.slider',
- 'jquery.ui.dialog',
- ],
- ],
-
- 'ext.maps.services' => $moduleTemplate + [
- 'scripts' => [
- 'resources/ext.maps.services.js',
- ],
- 'dependencies' => [
- 'ext.maps.common',
- ]
- ],
-
- 'ext.sm.common' => $moduleTemplate + [
- 'scripts' => [
- 'resources/ext.sm.common.js'
- ],
- 'dependencies' => [
- 'ext.maps.common',
- 'ext.maps.services'
- ]
- ],
- ];
-
-} );
-// @codeCoverageIgnoreEnd
diff --git a/www/wiki/extensions/Maps/RELEASE-NOTES.md b/www/wiki/extensions/Maps/RELEASE-NOTES.md
index 5655f36b..118272e2 100644
--- a/www/wiki/extensions/Maps/RELEASE-NOTES.md
+++ b/www/wiki/extensions/Maps/RELEASE-NOTES.md
@@ -3,6 +3,19 @@ different releases and which versions of PHP and MediaWiki they support, see the
[platform compatibility tables](INSTALL.md#platform-compatibility-and-release-status).
+## Maps 7.4.0
+
+Released on August 9th, 2019.
+
+* Fixed default map height bug occurring with recent versions of an used library
+* Removed `egMapsSizeRestrictions` setting, unused since Maps 3.0.0
+
+## Maps 7.3.3
+
+Released on August 2nd, 2019.
+
+* Fixed error in height parameter description
+
## Maps 7.3.2
Released on July 25th, 2019.
diff --git a/www/wiki/extensions/Maps/composer.json b/www/wiki/extensions/Maps/composer.json
index 0ff12364..ae9b63ed 100644
--- a/www/wiki/extensions/Maps/composer.json
+++ b/www/wiki/extensions/Maps/composer.json
@@ -35,7 +35,7 @@
"composer/installers": "^1.0.1",
"mediawiki/validator": "~2.2",
"mediawiki/parser-hooks": "~1.5",
- "param-processor/param-processor": "~1.4.2",
+ "param-processor/param-processor": "^1.4.2",
"data-values/geo": "~4.0|~3.0",
"jeroen/file-fetcher": "~6.0|~5.0",
"jeroen/file-fetcher-cache": "~1.0",
diff --git a/www/wiki/extensions/Maps/extension.json b/www/wiki/extensions/Maps/extension.json
index a631e18d..f0bcddc8 100644
--- a/www/wiki/extensions/Maps/extension.json
+++ b/www/wiki/extensions/Maps/extension.json
@@ -1,9 +1,9 @@
{
"name": "Maps",
- "version": "7.3.2",
+ "version": "7.4.0",
"author": [
- "[https://www.mediawiki.org/wiki/User:Jeroen_De_Dauw Jeroen De Dauw]",
+ "[https://www.entropywins.wtf/mediawiki Jeroen De Dauw]",
"..."
],
"url": "https://github.com/JeroenDeDauw/Maps/blob/master/README.md#maps",
@@ -47,6 +47,234 @@
"defaultcontentmodel": "wikitext"
}
],
+
+ "ResourceFileModulePaths": {
+ "localBasePath": "resources",
+ "remoteExtPath": "Maps/resources"
+ },
+
+ "ResourceModules": {
+ "ext.maps.common": {
+ "scripts": [
+ "maps.common.js"
+ ],
+ "messages": [
+ "maps-load-failed"
+ ]
+ },
+
+ "ext.maps.services": {
+ "dependencies": [
+ "ext.maps.common"
+ ],
+ "scripts": [
+ "maps.services.js"
+ ]
+ },
+
+ "ext.sm.common": {
+ "dependencies": [
+ "ext.maps.common",
+ "ext.maps.services"
+ ],
+ "scripts": [
+ "sm.common.js"
+ ]
+ },
+
+ "mapeditor": {
+ "dependencies": [
+ "ext.maps.common",
+ "jquery.ui.autocomplete",
+ "jquery.ui.slider",
+ "jquery.ui.dialog"
+ ],
+ "scripts": [
+ "editor/js/jquery.miniColors.js",
+ "editor/js/mapeditor.iefixes.js",
+ "editor/js/mapeditor.js"
+ ],
+ "styles": [
+ "editor/css/jquery.miniColors.css",
+ "editor/css/mapeditor.css"
+ ],
+ "messages": [
+ "mapeditor-parser-error",
+ "mapeditor-none-text",
+ "mapeditor-done-button",
+ "mapeditor-remove-button",
+ "mapeditor-import-button",
+ "mapeditor-export-button",
+ "mapeditor-import-button2",
+ "mapeditor-select-button",
+ "mapeditor-mapparam-button",
+ "mapeditor-clear-button",
+ "mapeditor-imageoverlay-button"
+ ]
+ },
+
+ "ext.maps.resizable": {
+ "dependencies": [
+ "jquery.ui.resizable"
+ ]
+ },
+
+ "ext.maps.leaflet.base": {
+ "scripts": [
+ "leaflet/leaflet/leaflet.js"
+ ],
+ "styles": [
+ "leaflet/leaflet/leaflet.css"
+ ]
+ },
+
+ "ext.maps.leaflet": {
+ "dependencies": [
+ "ext.maps.common",
+ "ext.maps.services",
+ "ext.maps.leaflet.base"
+ ],
+ "scripts": [
+ "leaflet/jquery.leaflet.js",
+ "leaflet/ext.maps.leaflet.js"
+ ],
+ "messages": [
+ "maps-markers",
+ "maps-copycoords-prompt",
+ "maps-searchmarkers-text"
+ ]
+ },
+
+ "ext.maps.leaflet.fullscreen": {
+ "dependencies": [
+ "ext.maps.leaflet.base"
+ ],
+ "scripts": [
+ "leaflet/leaflet.fullscreen/Control.FullScreen.js"
+ ],
+ "styles": [
+ "leaflet/leaflet.fullscreen/Control.FullScreen.css"
+ ]
+ },
+
+ "ext.maps.leaflet.markercluster": {
+ "dependencies": [
+ "ext.maps.leaflet.base"
+ ],
+ "scripts": [
+ "leaflet/leaflet.markercluster/leaflet.markercluster.js"
+ ],
+ "styles": [
+ "leaflet/leaflet.markercluster/MarkerCluster.css"
+ ]
+ },
+
+ "ext.maps.leaflet.providers": {
+ "dependencies": [
+ "ext.maps.leaflet.base"
+ ],
+ "scripts": [
+ "leaflet/leaflet-providers/leaflet-providers.js"
+ ]
+ },
+
+ "ext.maps.leaflet.editable": {
+ "dependencies": [
+ "ext.maps.leaflet.base"
+ ],
+ "scripts": [
+ "leaflet/leaflet.editable/Leaflet.Editable.js"
+ ]
+ },
+
+ "ext.maps.leaflet.editor": {
+ "dependencies": [
+ "ext.maps.leaflet"
+ ],
+ "scripts": [
+ "leaflet/leaflet.editor.js"
+ ]
+ },
+
+ "ext.maps.leaflet.leafletajax": {
+ "dependencies": [
+ "ext.maps.leaflet",
+ "ext.sm.common"
+ ],
+ "scripts": [
+ "leaflet/ext.sm.leafletajax.js"
+ ]
+ },
+
+ "ext.maps.googlemaps3": {
+ "dependencies": [
+ "ext.maps.common"
+ ],
+ "scripts": [
+ "GoogleMaps/jquery.googlemap.js",
+ "GoogleMaps/ext.maps.googlemaps3.js"
+ ],
+ "messages": [
+ "maps-googlemaps3-incompatbrowser",
+ "maps-copycoords-prompt",
+ "maps-searchmarkers-text",
+ "maps-fullscreen-button",
+ "maps-fullscreen-button-tooltip"
+ ]
+ },
+
+ "ext.maps.gm3.markercluster": {
+ "dependencies": [
+ "ext.maps.googlemaps3"
+ ],
+ "scripts": [
+ "GoogleMaps/gm3-util-library/markerclusterer.js"
+ ]
+ },
+
+ "ext.maps.gm3.markerwithlabel": {
+ "dependencies": [
+ "ext.maps.googlemaps3"
+ ],
+ "scripts": [
+ "GoogleMaps/gm3-util-library/markerwithlabel.js"
+ ],
+ "styles": [
+ "GoogleMaps/gm3-util-library/markerwithlabel.css"
+ ]
+ },
+
+ "ext.maps.gm3.geoxml": {
+ "dependencies": [
+ "ext.maps.googlemaps3"
+ ],
+ "scripts": [
+ "GoogleMaps/geoxml3/geoxml3.js",
+ "GoogleMaps/geoxml3/ZipFile.complete.js",
+ "GoogleMaps/geoxml3/ProjectedOverlay.js"
+ ]
+ },
+
+ "ext.maps.gm3.earth": {
+ "dependencies": [
+ "ext.maps.googlemaps3"
+ ],
+ "scripts": [
+ "GoogleMaps/gm3-util-library/googleearth-compiled.js"
+ ]
+ },
+
+ "ext.sm.googlemaps3ajax": {
+ "dependencies": [
+ "ext.maps.googlemaps3",
+ "ext.sm.common"
+ ],
+ "scripts": [
+ "GoogleMaps/ext.sm.googlemaps3ajax.js"
+ ]
+ }
+ },
+
"load_composer_autoloader": true,
"manifest_version": 2
}
diff --git a/www/wiki/extensions/Maps/i18n/ar.json b/www/wiki/extensions/Maps/i18n/ar.json
index c6d9c13a..3dcd2223 100644
--- a/www/wiki/extensions/Maps/i18n/ar.json
+++ b/www/wiki/extensions/Maps/i18n/ar.json
@@ -126,7 +126,7 @@
"maps-par-searchmarkers": "يسمح بالبحث عن علامات محددة عبر حقل مضمن في الخريطة.",
"maps-par-zoom": "مستوى التكبير للخريطة، بالنسبة للخرائط التي تحتوي على علامات، سيؤدي هذا إلى الوضع الافتراضي إلى أقصى مستوى من التكبير الذي لا يزال يظهر جميع العلامات.",
"maps-par-width": "يسمح بتعيين عرض الخريطة، سيتم افتراض وحدات البكسل الافتراضية على أنها وحدة، ولكن يمكنك تحديد إحدى هذه الوحدات بشكل صريح: px، ex، em.",
- "maps-par-height": "يسمح بتعيين ارتفاع الخريطة، سيتم افتراض وحدات البكسل الافتراضية على أنها وحدة، ولكن يمكنك تحديد إحدى هذه الوحدات بشكل صريح: px، ex، em.",
+ "maps-par-height": "يسمح بتعيين ارتفاع الخريطة، سيتم افتراض وحدات البكسل الافتراضية على أنها وحدة، ولكن يمكنك تحديد إحدى هذه الوحدات بشكل صريح: px، ex، emK %.",
"maps-par-centre": "الموقع الذي يجب أن تركز عليه الخريطة",
"maps-par-enable-fullscreen": "تمكين زر ملء الشاشة",
"maps-par-kml": "ملفات KML لتحميلها على الخريطة.",
diff --git a/www/wiki/extensions/Maps/i18n/en.json b/www/wiki/extensions/Maps/i18n/en.json
index c26f7bdb..1b5fa3b2 100644
--- a/www/wiki/extensions/Maps/i18n/en.json
+++ b/www/wiki/extensions/Maps/i18n/en.json
@@ -124,7 +124,7 @@
"maps-par-searchmarkers": "Allows to search for specific markers via a field embedded into the map.",
"maps-par-zoom": "The zoom level for the map. For maps with markers this will default to the most zoomed in level that still shows all markers.",
"maps-par-width": "Allows setting the width of the map. By default pixels will be assumed as unit, but you can explicitly specify one of these units: px, ex, em, %.",
- "maps-par-height": "Allows setting the height of the map. By default pixels will be assumed as unit, but you can explicitly specify one of these units: px, ex, em, %.",
+ "maps-par-height": "Allows setting the height of the map. By default pixels will be assumed as unit, but you can explicitly specify one of these units: px, ex, em.",
"maps-par-centre": "The location on which the map should be centered",
"maps-par-enable-fullscreen": "Enable fullscreen button",
"maps-par-kml": "KML files to load onto the map.",
diff --git a/www/wiki/extensions/Maps/i18n/fr.json b/www/wiki/extensions/Maps/i18n/fr.json
index 56e5e2bc..b1984cc9 100644
--- a/www/wiki/extensions/Maps/i18n/fr.json
+++ b/www/wiki/extensions/Maps/i18n/fr.json
@@ -143,7 +143,7 @@
"maps-par-searchmarkers": "Permet de rechercher des marqueurs spécifiques via un champ inclus dans la carte.",
"maps-par-zoom": "Le niveau de zoom de la carte. Pour les cartes avec des marqueurs, ceci positionne la valeur par défaut du plus grand zoom qui montre encore tous les marqueurs.",
"maps-par-width": "Permet de définir la largeur de la carte. Par défaut les pixels seront considérés comme unité, mais vous pouvez spécifier explicitement une de ces unités : px, ex, em, %.",
- "maps-par-height": "Permet de définir la hauteur de la carte. Par défaut les pixels seront considérés comme unité, mais vous pouvez spécifier explicitement une de ces unités : px, ex, em, %.",
+ "maps-par-height": "Permet de définir la hauteur de la carte. Par défaut les pixels seront considérés comme unité, mais vous pouvez spécifier explicitement une de ces unités : px, ex, em.",
"maps-par-centre": "Le lieu sur lequel la carte devra être centrée",
"maps-par-enable-fullscreen": "Activer le bouton plein écran",
"maps-par-kml": "Fichiers KML à charger sur la carte.",
diff --git a/www/wiki/extensions/Maps/i18n/pl.json b/www/wiki/extensions/Maps/i18n/pl.json
index 54a813bf..bb71af4d 100644
--- a/www/wiki/extensions/Maps/i18n/pl.json
+++ b/www/wiki/extensions/Maps/i18n/pl.json
@@ -14,7 +14,9 @@
},
"maps-desc": "Umożliwia zamieszczanie na stronach wiki map dynamicznych, geokodowanych adresów i innych danych geograficznych",
"right-geocode": "Geokodowanie",
+ "action-geocode": "geokodowania na tej wiki",
"maps_map": "Mapa",
+ "maps-tracking-category": "Strony z mapami renderowanymi przy użyciu rozszerzenia map",
"maps-loading-map": "Wczytywanie mapy…",
"maps-load-failed": "Nie można załadować mapy!",
"maps-markers": "Zaznaczenia",
diff --git a/www/wiki/extensions/Maps/i18n/pt-br.json b/www/wiki/extensions/Maps/i18n/pt-br.json
index 75526cd6..e1b7df59 100644
--- a/www/wiki/extensions/Maps/i18n/pt-br.json
+++ b/www/wiki/extensions/Maps/i18n/pt-br.json
@@ -131,7 +131,7 @@
"maps-par-searchmarkers": "Permite pesquisar marcadores específicos usando um campo incorporado no mapa.",
"maps-par-zoom": "O nível de zoom do mapa. Nos mapas com marcadores será usado o maior zoom que, mesmo assim, mostre todos os marcadores.",
"maps-par-width": "Permite definir a largura do mapa. A unidade por omissão é o píxel, mas pode defini-la explicitamente como: px, ex, em, %.",
- "maps-par-height": "Permite definir a altura do mapa. A unidade por omissão é o píxel, mas pode defini-la explicitamente como: px, ex, em, %.",
+ "maps-par-height": "Permite definir a altura do mapa. A unidade por omissão é o píxel, mas pode defini-la explicitamente como: px, ex, em.",
"maps-par-centre": "A localização na qual o mapa deve estar centrado",
"maps-par-enable-fullscreen": "Ativar o botão de tela cheia",
"maps-par-kml": "Arquivos KML que serão carregados no mapa.",
diff --git a/www/wiki/extensions/Maps/i18n/ru.json b/www/wiki/extensions/Maps/i18n/ru.json
index 08a7acf6..ac387d8e 100644
--- a/www/wiki/extensions/Maps/i18n/ru.json
+++ b/www/wiki/extensions/Maps/i18n/ru.json
@@ -42,7 +42,7 @@
"maps-load-failed": "Невозможно загрузить карту!",
"maps-markers": "Маркеры",
"maps-copycoords-prompt": "CTRL+C, ENTER",
- "maps-searchmarkers-text": "Маркеры фильтра",
+ "maps-searchmarkers-text": "Фильтр маркеров",
"maps-others": "другие",
"maps-kml-parsing-failed": "Не удалось выполнить разбор одного или нескольких KML-файлов, обычно вследствие отказа в получении или некорректного XML.",
"maps-ns-layer": "Слой",
@@ -143,7 +143,7 @@
"maps-leaflet-par-layers": "Слои, которые будут доступны при выборе. Первый слой будет отображаться при загрузке карты.",
"maps-leaflet-par-overlaylayers": "Слои подложки, которые будут показаны при загрузке карты.",
"maps-leaflet-par-maxclusterradius": "Максимальный радиус, который кластер будет покрывать от центрального маркера (в пикселях).",
- "maps-leaflet-par-clusterspiderfy": "Когда вы нажимаете кластер в нижнем уровне масштабирования, мы spiderfy его, чтобы вы могли видеть все его маркеры.",
+ "maps-leaflet-par-clusterspiderfy": "Когда вы нажимаете на кластер на нижнем уровне масштаба, то он разворачивается таким образом, чтобы вы могли увидеть все его маркеры.",
"maps_click_to_activate": "Нажмите для активации карты",
"maps_centred_on": "Центр карты — $1, $2.",
"maps-par-mappingservice": "Позволяет выбрать сервис карт, который будет использоваться.",
@@ -170,10 +170,10 @@
"maps-googlemaps3-par-poi": "Показать достопримечательности.",
"maps-googlemaps3-par-clustergridsize": "Размер сетки кластера в пикселях.",
"maps-par-clustermaxzoom": "Максимальный уровень увеличения, при котором может существовать кластер.",
- "maps-par-clusterzoomonclick": "Является ли поведение по умолчанию нажатием на кластер, чтобы увеличить его.",
+ "maps-par-clusterzoomonclick": "Является ли увеличение кластера поведением по умолчанию при нажатии.",
"maps-par-maxclusterradius": "Максимальный радиус, охватываемый кластером.",
- "maps-googlemaps3-par-clusteraveragecenter": "Должен ли центр каждого кластера быть средним по всем маркерам в кластере.",
- "maps-googlemaps3-par-clusterminsize": "Минимальное количество маркеров, которые должны быть в кластере до того, как маркеры будут скрыты, и будет показано количество.",
+ "maps-googlemaps3-par-clusteraveragecenter": "Должен ли центр каждого кластера быть средним по всем маркерам в нём.",
+ "maps-googlemaps3-par-clusterminsize": "Минимальное число маркеров в кластере, начиная с которого маркеры будут скрыты, а вместо них будет показано количество маркеров.",
"mapeditor": "Редактор карт",
"specialpages-group-maps": "Карты",
"mapeditor-parser-error": "Произошла ошибка обработки метаданных. Введённые данные проигнорированы.",
@@ -225,7 +225,7 @@
"semanticmaps-par-geocodecontrol": "Показать панель управления геокодированием.",
"semanticmaps-par-activeicon": "Значок, который будет отображаться вместо стандартного маркера в случаях, когда активная страница совпадает с результатом запроса",
"semanticmaps-par-pagelabel": "Если задано значение «yes» («да»), все маркеры будут иметь «inlineLabel» со ссылкой на страницу, содержащую координаты для маркера",
- "semanticmaps-par-ajaxcoordproperty": "Имя свойства координат, которое используется для построения запроса ajax.",
+ "semanticmaps-par-ajaxcoordproperty": "Имя свойства координат, которое используется для построения ajax-запроса.",
"semanticmaps-par-ajaxquery": "Второй запрос, который отправляется через ajax для извлечения дополнительных координат.",
"semanticmaps-par-userparam": "Значение, которое передается за каждый вызов шаблона, если шаблон используется",
"semanticmaps-kml-text": "Текст, связанный с каждой страницы. Переопределяется дополнительными запрашиваемыми свойствами, если таковые имеются.",
diff --git a/www/wiki/extensions/Maps/i18n/uk.json b/www/wiki/extensions/Maps/i18n/uk.json
index 24dffd97..8cadcaec 100644
--- a/www/wiki/extensions/Maps/i18n/uk.json
+++ b/www/wiki/extensions/Maps/i18n/uk.json
@@ -132,7 +132,7 @@
"maps-par-searchmarkers": "Дозволяє шукати специфічні маркери через поле, вбудоване в карту.",
"maps-par-zoom": "Рівень масштабування карти. Для карт з маркерами він типово буде найменшим рівнем, який показує всі маркери.",
"maps-par-width": "Дозволяє задати ширину карти. За замовчуванням пікселі прийняті як одиниці, але ви можете вибрати одну з цих одиниць: px, ex, em, %.",
- "maps-par-height": "Дозволяє задати висоту карти. За замовчуванням пікселі прийняті як одиниці, але ви можете вибрати одну з цих одиниць: px, ex, em, %.",
+ "maps-par-height": "Дозволяє задати висоту карти. За замовчуванням пікселі прийняті як одиниці, але ви можете вибрати одну з цих одиниць: px, ex, em.",
"maps-par-centre": "Місцевість відносно якої карта має центруватися",
"maps-par-enable-fullscreen": "Увімкнути кнопку повноекранного режиму",
"maps-par-kml": "Файли KML для завантаження на карту.",
diff --git a/www/wiki/extensions/Maps/resources/leaflet/ext.maps.leaflet.js b/www/wiki/extensions/Maps/resources/leaflet/ext.maps.leaflet.js
index ce3e757f..087d4acf 100644
--- a/www/wiki/extensions/Maps/resources/leaflet/ext.maps.leaflet.js
+++ b/www/wiki/extensions/Maps/resources/leaflet/ext.maps.leaflet.js
@@ -1,3 +1,4 @@
-window.jQuery( document ).ready( function() {
- ( new maps.services( window.jQuery( document ) ) ).leaflet();
+
+mediaWiki.loader.using( [ 'ext.maps.leaflet' ] ).done( function () {
+ ( new maps.services( jQuery( document ) ) ).leaflet();
} ); \ No newline at end of file
diff --git a/www/wiki/extensions/Maps/resources/ext.maps.common.js b/www/wiki/extensions/Maps/resources/maps.common.js
index 8e0180b4..8e0180b4 100644
--- a/www/wiki/extensions/Maps/resources/ext.maps.common.js
+++ b/www/wiki/extensions/Maps/resources/maps.common.js
diff --git a/www/wiki/extensions/Maps/resources/ext.maps.services.js b/www/wiki/extensions/Maps/resources/maps.services.js
index a23ff0c8..a23ff0c8 100644
--- a/www/wiki/extensions/Maps/resources/ext.maps.services.js
+++ b/www/wiki/extensions/Maps/resources/maps.services.js
diff --git a/www/wiki/extensions/Maps/resources/ext.sm.common.js b/www/wiki/extensions/Maps/resources/sm.common.js
index 373c1dd9..373c1dd9 100644
--- a/www/wiki/extensions/Maps/resources/ext.sm.common.js
+++ b/www/wiki/extensions/Maps/resources/sm.common.js
diff --git a/www/wiki/extensions/Maps/src/MapsSetup.php b/www/wiki/extensions/Maps/src/MapsSetup.php
index d397e632..245d3915 100644
--- a/www/wiki/extensions/Maps/src/MapsSetup.php
+++ b/www/wiki/extensions/Maps/src/MapsSetup.php
@@ -48,9 +48,7 @@ class MapsSetup {
}
private function registerAllTheThings() {
- $this->registerWebResources();
$this->registerParserHooks();
- $this->registerMappingServices();
$this->registerPermissions();
$this->registerParameterTypes();
$this->registerHooks();
@@ -76,13 +74,6 @@ class MapsSetup {
}
}
- private function registerWebResources() {
- $this->mwGlobals['wgResourceModules'] = array_merge(
- $this->mwGlobals['wgResourceModules'],
- include __DIR__ . '/../Maps.resources.php'
- );
- }
-
private function registerParserHooks() {
if ( $this->mwGlobals['egMapsEnableCoordinateFunction'] ) {
$this->mwGlobals['wgHooks']['ParserFirstCallInit'][] = function ( Parser &$parser ) {
@@ -154,253 +145,6 @@ class MapsSetup {
};
}
- private function registerMappingServices() {
- $localBasePath = __DIR__ . '/../resources';
- $remoteExtPath = 'Maps/resources';
-
- $this->registerGoogleMapsModules( $localBasePath, $remoteExtPath );
-
- $this->registerLeafletModules( $localBasePath, $remoteExtPath );
- }
-
- private function registerGoogleMapsModules( string $localBasePath, string $remoteExtPath ) {
- global $wgResourceModules;
-
- $localBasePath = $localBasePath . '/GoogleMaps';
- $remoteExtPath = $remoteExtPath . '/GoogleMaps';
-
- $wgResourceModules['ext.maps.googlemaps3'] = [
- 'dependencies' => [ 'ext.maps.common' ],
- 'localBasePath' => $localBasePath,
- 'remoteExtPath' => $remoteExtPath,
- 'group' => 'ext.maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ],
- 'scripts' => [
- 'jquery.googlemap.js',
- 'ext.maps.googlemaps3.js'
- ],
- 'messages' => [
- 'maps-googlemaps3-incompatbrowser',
- 'maps-copycoords-prompt',
- 'maps-searchmarkers-text',
- 'maps-fullscreen-button',
- 'maps-fullscreen-button-tooltip',
- ]
- ];
-
- $wgResourceModules['ext.maps.gm3.markercluster'] = [
- 'localBasePath' => $localBasePath . '/gm3-util-library',
- 'remoteExtPath' => $remoteExtPath . '/gm3-util-library',
- 'group' => 'ext.maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ],
- 'scripts' => [
- 'markerclusterer.js',
- ],
- ];
-
- $wgResourceModules['ext.maps.gm3.markerwithlabel'] = [
- 'localBasePath' => $localBasePath . '/gm3-util-library',
- 'remoteExtPath' => $remoteExtPath . '/gm3-util-library',
- 'group' => 'ext.maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ],
- 'scripts' => [
- 'markerwithlabel.js',
- ],
- 'styles' => [
- 'markerwithlabel.css',
- ],
- ];
-
- $wgResourceModules['ext.maps.gm3.geoxml'] = [
- 'localBasePath' => $localBasePath . '/geoxml3',
- 'remoteExtPath' => $remoteExtPath . '/geoxml3',
- 'group' => 'ext.maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ],
- 'scripts' => [
- 'geoxml3.js',
- 'ZipFile.complete.js', //kmz handling
- 'ProjectedOverlay.js', //Overlay handling
- ],
- ];
-
- $wgResourceModules['ext.maps.gm3.earth'] = [
- 'localBasePath' => $localBasePath . '/gm3-util-library',
- 'remoteExtPath' => $remoteExtPath . '/gm3-util-library',
- 'group' => 'ext.maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ],
- 'scripts' => [
- 'googleearth-compiled.js',
- ],
- ];
-
- $wgResourceModules['ext.sm.googlemaps3ajax'] = [
- 'localBasePath' => $localBasePath,
- 'remoteExtPath' => $remoteExtPath,
- 'group' => 'ext.maps',
- 'dependencies' => [
- 'ext.maps.googlemaps3',
- 'ext.sm.common'
- ],
- 'scripts' => [
- 'ext.sm.googlemaps3ajax.js'
- ]
- ];
- }
-
- private function registerLeafletModules( string $localBasePath, string $remoteExtPath ) {
- global $wgResourceModules;
-
- $localBasePath = $localBasePath . '/leaflet';
- $remoteExtPath = $remoteExtPath . '/leaflet';
-
- $wgResourceModules['ext.maps.leaflet.base'] = [
- 'localBasePath' => $localBasePath . '/leaflet',
- 'remoteExtPath' => $remoteExtPath . '/leaflet',
- 'group' => 'ext.maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ],
- 'scripts' => [
- 'leaflet.js',
- ],
- 'styles' => [
- 'leaflet.css',
- ],
- ];
-
- $wgResourceModules['ext.maps.leaflet'] = [
- 'dependencies' => [
- 'ext.maps.common',
- 'ext.maps.services',
- 'ext.maps.leaflet.base'
- ],
- 'localBasePath' => $localBasePath,
- 'remoteExtPath' => $remoteExtPath,
- 'group' => 'ext.maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ],
- 'scripts' => [
- 'jquery.leaflet.js',
- 'ext.maps.leaflet.js',
- ],
- 'messages' => [
- 'maps-markers',
- 'maps-copycoords-prompt',
- 'maps-searchmarkers-text',
- ],
- ];
-
- $wgResourceModules['ext.maps.leaflet.fullscreen'] = [
- 'dependencies' => [ 'ext.maps.leaflet' ],
- 'localBasePath' => $localBasePath . '/leaflet.fullscreen',
- 'remoteExtPath' => $remoteExtPath . '/leaflet.fullscreen',
- 'group' => 'ext.maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ],
- 'scripts' => [
- 'Control.FullScreen.js',
- ],
- 'styles' => [
- 'Control.FullScreen.css',
- ],
- ];
-
- $wgResourceModules['ext.maps.leaflet.markercluster'] = [
- 'dependencies' => [ 'ext.maps.leaflet' ],
- 'localBasePath' => $localBasePath . '/leaflet.markercluster',
- 'remoteExtPath' => $remoteExtPath . '/leaflet.markercluster',
- 'group' => 'ext.maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ],
- 'scripts' => [
- 'leaflet.markercluster.js',
- ],
- 'styles' => [
- 'MarkerCluster.css',
- ],
- ];
-
- $wgResourceModules['ext.maps.leaflet.providers'] = [
- 'dependencies' => [ 'ext.maps.leaflet' ],
- 'localBasePath' => $localBasePath . '/leaflet-providers',
- 'remoteExtPath' => $remoteExtPath . '/leaflet-providers',
- 'group' => 'ext.maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ],
- 'scripts' => [
- 'leaflet-providers.js',
- ],
- ];
-
- $wgResourceModules['ext.maps.leaflet.editable'] = [
- 'dependencies' => [ 'ext.maps.leaflet.base' ],
- 'localBasePath' => $localBasePath . '/leaflet.editable',
- 'remoteExtPath' => $remoteExtPath . '/leaflet.editable',
- 'group' => 'ext.maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ],
- 'scripts' => [
- 'Leaflet.Editable.js',
- ],
- ];
-
- $wgResourceModules['ext.maps.leaflet.editor'] = [
- 'dependencies' => [
- 'ext.maps.leaflet.base',
- //'ext.maps.leaflet.editable'
- ],
- 'localBasePath' => $localBasePath,
- 'remoteExtPath' => $remoteExtPath,
- 'group' => 'ext.maps',
- 'targets' => [
- 'mobile',
- 'desktop'
- ],
- 'scripts' => [
- 'leaflet.editor.js',
- ],
- ];
-
- $wgResourceModules['ext.sm.leafletajax'] = [
- 'localBasePath' => $localBasePath,
- 'remoteExtPath' => $remoteExtPath,
- 'group' => 'ext.maps',
- 'dependencies' => [
- 'ext.maps.leaflet',
- 'ext.sm.common'
- ],
- 'scripts' => [
- 'ext.sm.leafletajax.js'
- ]
- ];
- }
-
private function registerPermissions() {
$this->mwGlobals['wgAvailableRights'][] = 'geocode';
diff --git a/www/wiki/extensions/Maps/src/MediaWiki/ParserHooks/DisplayMapRenderer.php b/www/wiki/extensions/Maps/src/MediaWiki/ParserHooks/DisplayMapRenderer.php
index 25a80683..8c757acd 100644
--- a/www/wiki/extensions/Maps/src/MediaWiki/ParserHooks/DisplayMapRenderer.php
+++ b/www/wiki/extensions/Maps/src/MediaWiki/ParserHooks/DisplayMapRenderer.php
@@ -8,6 +8,7 @@ use Maps\DataAccess\MediaWikiFileUrlFinder;
use Maps\Elements\Location;
use Maps\MappingService;
use Maps\Presentation\ElementJsonSerializer;
+use Maps\Presentation\MapHtmlBuilder;
use Maps\Presentation\WikitextParser;
use Maps\Presentation\WikitextParsers\LocationParser;
use Parser;
@@ -66,9 +67,10 @@ class DisplayMapRenderer {
$this->handleMarkerData( $params );
- $output = $this->getMapHTML(
+ $output = ( new MapHtmlBuilder() )->getMapHTML(
$params,
- $this->service->newMapId()
+ $this->service->newMapId(),
+ $this->service->getName()
);
$dependencies = $this->service->getDependencyHtml( $params );
@@ -177,29 +179,4 @@ class DisplayMapRenderer {
}
}
- /**
- * Returns the HTML to display the map.
- *
- * @param array $params
- * @param string $mapName
- *
- * @return string
- */
- protected function getMapHTML( array $params, $mapName ) {
- return Html::rawElement(
- 'div',
- [
- 'id' => $mapName,
- 'style' => "width: {$params['width']}; height: {$params['height']}; background-color: #cccccc; overflow: hidden;",
- 'class' => 'maps-map maps-' . $this->service->getName()
- ],
- wfMessage( 'maps-loading-map' )->inContentLanguage()->escaped() .
- Html::element(
- 'div',
- [ 'style' => 'display:none', 'class' => 'mapdata' ],
- FormatJson::encode( $params )
- )
- );
- }
-
}
diff --git a/www/wiki/extensions/Maps/src/Presentation/MapHtmlBuilder.php b/www/wiki/extensions/Maps/src/Presentation/MapHtmlBuilder.php
new file mode 100644
index 00000000..aa47e558
--- /dev/null
+++ b/www/wiki/extensions/Maps/src/Presentation/MapHtmlBuilder.php
@@ -0,0 +1,37 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace Maps\Presentation;
+
+use FormatJson;
+use Html;
+
+class MapHtmlBuilder {
+
+ public function getMapHTML( array $params, string $mapName, string $serviceName ): string {
+ if ( is_int( $params['height'] ) ) {
+ $params['height'] = (string)$params['height'] . 'px';
+ }
+
+ if ( is_int( $params['width'] ) ) {
+ $params['width'] = (string)$params['width'] . 'px';
+ }
+
+ return Html::rawElement(
+ 'div',
+ [
+ 'id' => $mapName,
+ 'style' => "width: {$params['width']}; height: {$params['height']}; background-color: #cccccc; overflow: hidden;",
+ 'class' => 'maps-map maps-' . $serviceName
+ ],
+ wfMessage( 'maps-loading-map' )->inContentLanguage()->escaped() .
+ Html::element(
+ 'div',
+ [ 'style' => 'display:none', 'class' => 'mapdata' ],
+ FormatJson::encode( $params )
+ )
+ );
+ }
+
+}
diff --git a/www/wiki/extensions/Maps/src/SemanticMW/ResultPrinters/MapPrinter.php b/www/wiki/extensions/Maps/src/SemanticMW/ResultPrinters/MapPrinter.php
index d3b17adb..6ab945f6 100644
--- a/www/wiki/extensions/Maps/src/SemanticMW/ResultPrinters/MapPrinter.php
+++ b/www/wiki/extensions/Maps/src/SemanticMW/ResultPrinters/MapPrinter.php
@@ -11,6 +11,7 @@ use Maps\FileUrlFinder;
use Maps\MappingService;
use Maps\MapsFunctions;
use Maps\Presentation\ElementJsonSerializer;
+use Maps\Presentation\MapHtmlBuilder;
use Maps\Presentation\WikitextParser;
use Maps\Presentation\WikitextParsers\LocationParser;
use ParamProcessor\ParamDefinition;
@@ -151,10 +152,10 @@ class MapPrinter extends ResultPrinter {
$params['zoom'] = false;
}
- $mapName = $this->service->newMapId();
+ $mapId = $this->service->newMapId();
SMWOutputs::requireHeadItem(
- $mapName,
+ $mapId,
$this->service->getDependencyHtml( $params )
);
@@ -166,7 +167,11 @@ class MapPrinter extends ResultPrinter {
unset( $params['source'] );
}
- return $this->getMapHTML( $params, $mapName );
+ return ( new MapHtmlBuilder() )->getMapHTML(
+ $params,
+ $mapId,
+ $this->service->getName()
+ );
}
private function elementsToJson( array $elements ) {
@@ -296,31 +301,6 @@ class MapPrinter extends ResultPrinter {
}
/**
- * Returns the HTML to display the map.
- *
- * @param array $params
- * @param string $mapName
- *
- * @return string
- */
- private function getMapHTML( array $params, string $mapName ): string {
- return Html::rawElement(
- 'div',
- [
- 'id' => $mapName,
- 'style' => "width: {$params['width']}; height: {$params['height']}; background-color: #cccccc; overflow: hidden;",
- 'class' => 'maps-map maps-' . $this->service->getName()
- ],
- wfMessage( 'maps-loading-map' )->inContentLanguage()->escaped() .
- Html::element(
- 'div',
- [ 'style' => 'display:none', 'class' => 'mapdata' ],
- FormatJson::encode( $params )
- )
- );
- }
-
- /**
* Returns the internationalized name of the mapping service.
*
* @return string
diff --git a/www/wiki/extensions/Maps/src/SemanticMW/ValueDescriptions/AreaDescription.php b/www/wiki/extensions/Maps/src/SemanticMW/ValueDescriptions/AreaDescription.php
index e0f62d3b..ac885095 100644
--- a/www/wiki/extensions/Maps/src/SemanticMW/ValueDescriptions/AreaDescription.php
+++ b/www/wiki/extensions/Maps/src/SemanticMW/ValueDescriptions/AreaDescription.php
@@ -2,7 +2,6 @@
namespace Maps\SemanticMW\ValueDescriptions;
-use DatabaseBase;
use DataValues\Geo\Values\LatLongValue;
use InvalidArgumentException;
use Maps\GeoFunctions;
@@ -13,6 +12,7 @@ use SMW\Query\Language\ValueDescription;
use SMWDataItem;
use SMWDIGeoCoord;
use SMWThingDescription;
+use Wikimedia\Rdbms\IDatabase;
/**
* Description of a geographical area defined by a coordinates set and a distance to the bounds.
@@ -73,17 +73,17 @@ class AreaDescription extends ValueDescription {
}
/**
- * @see Description::getSQLCondition
+ * @see SomePropertyInterpreter::mapValueDescription
*
* FIXME: store specific code should be in the store component
*
* @param string $tableName
- * @param array $fieldNames
- * @param DatabaseBase $dbs
+ * @param string[] $fieldNames
+ * @param IDatabase $db
*
* @return string|false
*/
- public function getSQLCondition( $tableName, array $fieldNames, DatabaseBase $dbs ) {
+ public function getSQLCondition( $tableName, array $fieldNames, IDatabase $db ) {
if ( $this->center->getDIType() != SMWDataItem::TYPE_GEO ) {
throw new \LogicException( 'Constructor should have prevented this' );
}
@@ -94,10 +94,10 @@ class AreaDescription extends ValueDescription {
$bounds = $this->getBoundingBox();
- $north = $dbs->addQuotes( $bounds['north'] );
- $east = $dbs->addQuotes( $bounds['east'] );
- $south = $dbs->addQuotes( $bounds['south'] );
- $west = $dbs->addQuotes( $bounds['west'] );
+ $north = $db->addQuotes( $bounds['north'] );
+ $east = $db->addQuotes( $bounds['east'] );
+ $south = $db->addQuotes( $bounds['south'] );
+ $west = $db->addQuotes( $bounds['west'] );
$isEq = $this->getComparator() == SMW_CMP_EQ;
@@ -143,4 +143,4 @@ class AreaDescription extends ValueDescription {
];
}
-} \ No newline at end of file
+}
diff --git a/www/wiki/extensions/Maps/src/SemanticMW/ValueDescriptions/CoordinateDescription.php b/www/wiki/extensions/Maps/src/SemanticMW/ValueDescriptions/CoordinateDescription.php
index 815a540f..a63ea9a0 100644
--- a/www/wiki/extensions/Maps/src/SemanticMW/ValueDescriptions/CoordinateDescription.php
+++ b/www/wiki/extensions/Maps/src/SemanticMW/ValueDescriptions/CoordinateDescription.php
@@ -2,10 +2,10 @@
namespace Maps\SemanticMW\ValueDescriptions;
-use DatabaseBase;
use SMW\DataValueFactory;
use SMW\Query\Language\ValueDescription;
use SMWDIGeoCoord;
+use Wikimedia\Rdbms\IDatabase;
/**
* Description of one data value of type Geographical Coordinates.
@@ -24,17 +24,17 @@ class CoordinateDescription extends ValueDescription {
}
/**
- * @see SMWDescription::getSQLCondition
+ * @see SomePropertyInterpreter::mapValueDescription
*
* FIXME: store specific code should be in the store component
*
* @param string $tableName
- * @param array $fieldNames
- * @param DatabaseBase $dbs
+ * @param string[] $fieldNames
+ * @param IDatabase $db
*
* @return string|false
*/
- public function getSQLCondition( $tableName, array $fieldNames, DatabaseBase $dbs ) {
+ public function getSQLCondition( $tableName, array $fieldNames, IDatabase $db ) {
$dataItem = $this->getDataItem();
// Only execute the query when the description's type is geographical coordinates,
@@ -57,8 +57,8 @@ class CoordinateDescription extends ValueDescription {
return false;
}
- $lat = $dbs->addQuotes( $dataItem->getLatitude() );
- $lon = $dbs->addQuotes( $dataItem->getLongitude() );
+ $lat = $db->addQuotes( $dataItem->getLatitude() );
+ $lon = $db->addQuotes( $dataItem->getLongitude() );
$conditions = [];
@@ -71,4 +71,4 @@ class CoordinateDescription extends ValueDescription {
return false;
}
-} \ No newline at end of file
+}
diff --git a/www/wiki/extensions/Maps/tests/Integration/Parser/DisplayMapTest.php b/www/wiki/extensions/Maps/tests/Integration/Parser/DisplayMapTest.php
index ef841f13..9bd64bcf 100644
--- a/www/wiki/extensions/Maps/tests/Integration/Parser/DisplayMapTest.php
+++ b/www/wiki/extensions/Maps/tests/Integration/Parser/DisplayMapTest.php
@@ -10,6 +10,19 @@ use PHPUnit\Framework\TestCase;
*/
class DisplayMapTest extends TestCase {
+ private $originalHeight;
+ private $originalWidth;
+
+ public function setUp() {
+ $this->originalHeight = $GLOBALS['egMapsMapHeight'];
+ $this->originalWidth = $GLOBALS['egMapsMapWidth'];
+ }
+
+ public function tearDown() {
+ $GLOBALS['egMapsMapHeight'] = $this->originalHeight;
+ $GLOBALS['egMapsMapWidth'] = $this->originalWidth;
+ }
+
public function testMapIdIsSet() {
$this->assertContains(
'id="map_leaflet_',
@@ -144,6 +157,21 @@ class DisplayMapTest extends TestCase {
);
}
+ public function testDimensionDefaultsAsInteger() {
+ $GLOBALS['egMapsMapHeight'] = 420;
+ $GLOBALS['egMapsMapWidth'] = 230;
+
+ $this->assertContains(
+ 'height: 420px;',
+ $this->parse( '{{#display_map:1,1}}' )
+ );
+
+ $this->assertContains(
+ 'width: 230px;',
+ $this->parse( '{{#display_map:1,1}}' )
+ );
+ }
+
// TODO: need DI to test
// public function testWhenLocationHasVisitedIconModifier_itIsUsed() {
// $this->assertContains(
diff --git a/www/wiki/extensions/Mermaid/.gitignore b/www/wiki/extensions/Mermaid/.gitignore
new file mode 100644
index 00000000..0745b001
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/.gitignore
@@ -0,0 +1,11 @@
+*~
+*.kate-swp
+
+vendor/
+extensions/
+
+composer.phar
+composer.lock
+
+!.*
+.idea/ \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/.scrutinizer.yml b/www/wiki/extensions/Mermaid/.scrutinizer.yml
new file mode 100644
index 00000000..6f59b5cb
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/.scrutinizer.yml
@@ -0,0 +1,28 @@
+filter:
+ excluded_paths:
+ - 'vendor/*'
+
+tools:
+ php_mess_detector:
+ config:
+ controversial_rules: { superglobals: false }
+ php_cpd: true
+ php_pdepend: true
+ php_code_coverage: false
+ php_code_sniffer: true
+ php_cs_fixer: true
+ php_loc: true
+ php_analyzer: true
+ sensiolabs_security_checker: true
+ external_code_coverage:
+ timeout: '900'
+
+checks:
+ php:
+ psr2_class_declaration: false
+ psr2_switch_declaration: false
+ sql_injection_vulnerabilities: true
+ security_vulnerabilities: true
+ no_eval: true
+ code_rating: true
+ duplication: true
diff --git a/www/wiki/extensions/Mermaid/.travis.yml b/www/wiki/extensions/Mermaid/.travis.yml
new file mode 100644
index 00000000..72d3574a
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/.travis.yml
@@ -0,0 +1,33 @@
+# http://docs.travis-ci.com/user/workers/container-based-infrastructure/
+sudo: false
+
+language: php
+
+matrix:
+ fast_finish: true
+ include:
+ - env: DB=mysql; MW=REL1_31; TYPE=coverage; PHPUNIT=4.8.*
+ php: 5.6
+ - env: DB=sqlite; MW=REL1_32; PHPUNIT=5.7.*
+ php: 7.1
+ - env: DB=mysql; MW=master; PHPUNIT=6.5.*
+ php: 7.2
+
+install:
+ - bash ./tests/travis/install-mediawiki.sh
+ - bash ./tests/travis/install-mermaid.sh
+
+script:
+ - bash ./tests/travis/run-tests.sh
+
+after_success:
+ - bash ./tests/travis/upload-coverage-report.sh
+
+notifications:
+ email:
+ on_success: change
+ on_failure: always
+
+cache:
+ directories:
+ - $HOME/.composer/cache
diff --git a/www/wiki/extensions/Mermaid/COPYING b/www/wiki/extensions/Mermaid/COPYING
new file mode 100644
index 00000000..68606fba
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/COPYING
@@ -0,0 +1,103 @@
+'''[https://github.com/SemanticMediaWiki/Mermaid Mermaid]''' is a free, open-source MediaWiki extension that adds a parser function to help generate diagrams and flowcharts using the mermaid script language.
+
+Copyright (C) 2017
+
+
+The license text below "====" applies to all files within this distribution, other than those that are in a directory which contains files named "LICENSE" or "COPYING", or a subdirectory thereof. For those files, the license text contained in said file overrides any license information contained in directories of smaller depth. Alternative licenses are typically used for software that is provided by external parties, and merely packaged with this extension for convenience.
+----
+----
+
+== GNU GENERAL PUBLIC LICENSE ==
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.,<br />
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Everyone is permitted to copy and distribute verbatim copies<br />
+of this license document, but changing it is not allowed.
+
+=== Preamble ===
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software - to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+=== TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION ===
+
+'''0.''' This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+'''1.''' You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+'''2.''' You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+: '''a)''' You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+: '''b)''' You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+: '''c)''' If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+'''3.''' You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+: '''a)''' Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+: '''b)''' Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+: '''c)''' Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+'''4.''' You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+'''5.''' You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+'''6.''' Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+'''7.''' If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+'''8.''' If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+'''9.''' The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+'''10.''' If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+'''<big>NO WARRANTY</big>'''
+
+'''11.''' BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+'''12.''' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+'''<big>END OF TERMS AND CONDITIONS</big>'''
diff --git a/www/wiki/extensions/Mermaid/DefaultSettings.php b/www/wiki/extensions/Mermaid/DefaultSettings.php
new file mode 100644
index 00000000..9349bf4b
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/DefaultSettings.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * DO NOT EDIT!
+ *
+ * The following default settings are to be used by the extension itself,
+ * please modify settings in the LocalSettings file.
+ *
+ * @codeCoverageIgnore
+ */
+if ( !defined( 'MEDIAWIKI' ) ) {
+ die( 'This file is part of the Mermaid extension, it is not a valid entry point.' );
+}
+
+/**
+ * Default theme
+ */
+return [
+ 'mermaidgDefaultTheme' => 'forest'
+];
diff --git a/www/wiki/extensions/Mermaid/Mermaid.php b/www/wiki/extensions/Mermaid/Mermaid.php
new file mode 100644
index 00000000..8e631ff3
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/Mermaid.php
@@ -0,0 +1,194 @@
+<?php
+
+use Mermaid\HookRegistry;
+
+/**
+ * @see https://github.com/SemanticMediaWiki/Mermaid/
+ *
+ * @defgroup mermaid Mermaid
+ */
+if ( !defined( 'MEDIAWIKI' ) ) {
+ die( 'This file is part of the Mermaid extension, it is not a valid entry point.' );
+}
+
+/**
+ * @codeCoverageIgnore
+ */
+class Mermaid {
+
+ /**
+ * @since 1.0
+ */
+ public static function initExtension( $credits = [] ) {
+
+ // If the function is called more than once then this will fail on
+ // purpose
+ foreach ( include __DIR__ . '/DefaultSettings.php' as $key => $value ) {
+ if ( !isset( $GLOBALS[$key] ) ) {
+ $GLOBALS[$key] = $value;
+ }
+ }
+
+ define( 'MERMAID_VERSION', $credits['version'] );
+
+ // Register message files
+ $GLOBALS['wgMessagesDirs']['Mermaid'] = __DIR__ . '/i18n';
+ $GLOBALS['wgExtensionMessagesFiles']['MermaidMagic'] = __DIR__ . '/i18n/Mermaid.magic.php';
+
+ $GLOBALS['wgResourceModules']['ext.mermaid.styles'] = [
+ 'localBasePath' => __DIR__ ,
+ 'remoteExtPath' => 'Mermaid',
+ 'position' => 'top',
+ 'styles' => [
+ 'res/ext.mermaid.css'
+ ],
+ 'messages' => [],
+ 'targets' => [
+ 'mobile',
+ 'desktop'
+ ]
+ ];
+
+ $GLOBALS['wgResourceModules']['ext.mermaid'] = [
+ 'localBasePath' => __DIR__ ,
+ 'remoteExtPath' => 'Mermaid',
+ 'position' => 'top',
+ 'scripts' => [
+ 'res/ext.mermaid.js'
+ ],
+ 'dependencies' => [
+ 'mediawiki.api',
+ 'ext.mermaid.styles',
+ 'ext.mermaid.theme.default',
+ 'ext.mermaid.core'
+ ],
+ 'targets' => [
+ 'mobile',
+ 'desktop'
+ ]
+ ];
+
+ $GLOBALS['wgResourceModules']['ext.mermaid.theme.default'] = [
+ 'localBasePath' => __DIR__ ,
+ 'remoteExtPath' => 'Mermaid',
+ 'position' => 'top',
+ 'styles' => [
+ 'res/mermaid/8.0.0/mermaid.min.css'
+ ],
+ 'messages' => [],
+ 'targets' => [
+ 'mobile',
+ 'desktop'
+ ]
+ ];
+
+ $GLOBALS['wgResourceModules']['ext.mermaid.theme.forest'] = [
+ 'localBasePath' => __DIR__ ,
+ 'remoteExtPath' => 'Mermaid',
+ 'position' => 'top',
+ 'styles' => [
+ 'res/mermaid/8.0.0/mermaid.forest.min.css'
+ ],
+ 'messages' => [],
+ 'targets' => [
+ 'mobile',
+ 'desktop'
+ ]
+ ];
+
+ $GLOBALS['wgResourceModules']['ext.mermaid.theme.dark'] = [
+ 'localBasePath' => __DIR__ ,
+ 'remoteExtPath' => 'Mermaid',
+ 'position' => 'top',
+ 'styles' => [
+ 'res/mermaid/8.0.0/mermaid.dark.min.css'
+ ],
+ 'messages' => [],
+ 'targets' => [
+ 'mobile',
+ 'desktop'
+ ]
+ ];
+
+ $GLOBALS['wgResourceModules']['ext.mermaid.theme.neutral'] = [
+ 'localBasePath' => __DIR__ ,
+ 'remoteExtPath' => 'Mermaid',
+ 'position' => 'top',
+ 'styles' => [
+ 'res/mermaid/8.0.0/mermaid.neutral.min.css'
+ ],
+ 'messages' => [],
+ 'targets' => [
+ 'mobile',
+ 'desktop'
+ ]
+ ];
+
+ $GLOBALS['wgResourceModules']['ext.mermaid.d3'] = [
+ 'localBasePath' => __DIR__ ,
+ 'remoteExtPath' => 'Mermaid',
+ 'position' => 'top',
+ 'scripts' => [
+ 'res/d3/d3.min.js',
+ 'res/d3/dagre-d3.min.js'
+ ],
+ 'messages' => [],
+ 'targets' => [
+ 'mobile',
+ 'desktop'
+ ]
+ ];
+
+ $GLOBALS['wgResourceModules']['ext.mermaid.core'] = [
+ 'localBasePath' => __DIR__ ,
+ 'remoteExtPath' => 'Mermaid',
+ 'position' => 'top',
+ 'scripts' => [
+ 'res/mermaid/8.0.0/mermaid.min.js'
+ ],
+ 'dependencies' => [
+ 'ext.mermaid.d3'
+ ],
+ 'messages' => [],
+ 'targets' => [
+ 'mobile',
+ 'desktop'
+ ]
+ ];
+
+ $GLOBALS['wgResourceModules']['ext.mermaid.api'] = [
+ 'localBasePath' => __DIR__ ,
+ 'remoteExtPath' => 'Mermaid',
+ 'position' => 'top',
+ 'scripts' => [
+ 'res/mermaid/8.0.0/mermaidAPI.min.js'
+ ],
+ 'dependencies' => [
+ 'ext.mermaid.d3'
+ ],
+ 'messages' => [],
+ 'targets' => [
+ 'mobile',
+ 'desktop'
+ ]
+ ];
+ }
+
+ /**
+ * @since 1.0
+ */
+ public static function onExtensionFunction() {
+ $hookRegistry = new HookRegistry();
+ $hookRegistry->register();
+ }
+
+ /**
+ * @since 1.0
+ *
+ * @return string|null
+ */
+ public static function getVersion() {
+ return MERMAID_VERSION;
+ }
+
+}
diff --git a/www/wiki/extensions/Mermaid/README.md b/www/wiki/extensions/Mermaid/README.md
new file mode 100644
index 00000000..1031f5b5
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/README.md
@@ -0,0 +1,52 @@
+# Mermaid
+
+[![Build Status](https://secure.travis-ci.org/SemanticMediaWiki/Mermaid.svg?branch=master)](http://travis-ci.org/SemanticMediaWiki/Mermaid)
+[![Latest Stable Version](https://poser.pugx.org/mediawiki/mermaid/version.png)](https://packagist.org/packages/mediawiki/mermaid)
+[![Packagist download count](https://poser.pugx.org/mediawiki/mermaid/d/total.png)](https://packagist.org/packages/mediawiki/mermaid)
+
+This extension provides the `#mermaid` parser function to support the generation of diagrams and flowcharts with the help of the [mermaid][mermaid] script language. Supported diagram forms include:
+
+- Flowchart
+- Sequence diagram
+- Gantt diagram
+
+## Requirements
+
+- PHP 5.6 or later
+- MediaWiki 1.31 or later
+
+## Installation and configuration
+
+See the information on [installing and configuring] this extension.
+
+## Usage
+
+See the information on [using] this extension.
+
+## Contribution and support
+
+If you want to contribute work to the project please subscribe to the developers mailing list and
+have a look at the contribution guideline.
+
+* [File an issue](https://github.com/SemanticMediaWiki/Mermaid/issues)
+* [Submit a pull request](https://github.com/SemanticMediaWiki/Mermaid/pulls)
+* Ask a question on [the mailing list](https://www.semantic-mediawiki.org/wiki/Mailing_list)
+* Ask a question on the #semantic-mediawiki IRC channel on Freenode.
+
+## Tests
+
+This extension provides unit and integration tests that are run by a [continues integration platform][travis]
+but can also be executed using `composer phpunit` from the extension base directory.
+
+## License
+
+[GNU General Public License, version 2 or later][gpl-licence].
+
+[gpl-licence]: https://www.gnu.org/copyleft/gpl.html
+[travis]: https://travis-ci.org/SemanticMediaWiki/Mermaid
+[smw]: https://github.com/SemanticMediaWiki/SemanticMediaWiki
+[composer]: https://getcomposer.org/
+[mermaid]: https://github.com/knsv/mermaid
+[installing and configuring]: https://github.com/SemanticMediaWiki/Mermaid/blob/master/docs/INSTALL.md
+[using]: https://github.com/SemanticMediaWiki/Mermaid/blob/master/docs/USAGE.md
+
diff --git a/www/wiki/extensions/Mermaid/composer.json b/www/wiki/extensions/Mermaid/composer.json
new file mode 100644
index 00000000..b4f3972f
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/composer.json
@@ -0,0 +1,43 @@
+{
+ "name": "mediawiki/mermaid",
+ "type": "mediawiki-extension",
+ "description": "Provides a parser function to generate diagrams and flowcharts with the help of the mermaid script language",
+ "keywords": [
+ "mediawiki",
+ "mermaid",
+ "parser function"
+ ],
+ "homepage": "https://github.com/SemanticMediaWiki/Mermaid",
+ "license": "GPL-2.0-or-later",
+ "authors": [
+ {
+ "name": "James Hong Kong",
+ "role": "Developer"
+ }
+ ],
+ "require": {
+ "php": ">=5.6.0",
+ "composer/installers": "1.*,>=1.0.1"
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files" : [
+ "Mermaid.php"
+ ],
+ "psr-4": {
+ "Mermaid\\": "src/"
+ }
+ },
+ "config": {
+ "process-timeout": 0
+ },
+ "scripts":{
+ "phpunit": "php ../../tests/phpunit/phpunit.php -c phpunit.xml.dist",
+ "phpdbg": "phpdbg -qrr ../../tests/phpunit/phpunit.php -c phpunit.xml.dist",
+ "test": "php ../../tests/phpunit/phpunit.php -c phpunit.xml.dist"
+ }
+}
diff --git a/www/wiki/extensions/Mermaid/docs/INSTALL.md b/www/wiki/extensions/Mermaid/docs/INSTALL.md
new file mode 100644
index 00000000..9d65af40
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/docs/INSTALL.md
@@ -0,0 +1,71 @@
+This file contains the *installation and configuration instructions* for the **Mermaid** extension. See also the
+[readme], the [release notes] and [usage examples].
+
+## Installation
+
+The recommended way to install this extension is using [Composer](http://getcomposer.org) with
+[MediaWiki's built-in support for Composer](https://www.mediawiki.org/wiki/Composer).
+
+### Step 1
+
+Change to the base directory of your MediaWiki installation. This is where the "LocalSettings.php"
+file is located. If you have not yet installed Composer do it now by running the following command
+in your shell:
+
+ wget https://getcomposer.org/composer.phar
+
+### Step 2
+
+If you do not have a "composer.local.json" file yet, create one and add the following content to it:
+
+```
+{
+ "require": {
+ "mediawiki/mermaid": "~2.1"
+ }
+}
+```
+
+If you already have a "composer.local.json" file add the following line to the end of the "require"
+section in your file:
+
+ "mediawiki/mermaid": "~2.1"
+
+Remember to add a comma to the end of the preceding line in this section.
+
+### Step 3
+
+Run the following command in your shell:
+
+ php composer.phar update --no-dev
+
+Note if you have Git installed on your system add the `--prefer-source` flag to the above command. Also
+note that it may be necessary to run this command twice. If unsure do it twice right away.
+
+### Step 4
+
+Add the following line to the end of your "LocalSettings.php" file:
+
+ wfLoadExtension( 'Mermaid' );
+
+### Verify installation success
+
+As final step, you can verify Mermaid got installed by looking at the "Special:Version" page on your wiki and
+check that it is listed.
+
+### Configuration
+
+One configuration parameter is provided allowing to choose the basic theme for rendereing the graphs, diagrams
+and charts. By default the rendering is set to use the `forest` theme:
+
+ $mermaidgDefaultTheme = 'forest';
+
+If one would like to use one of the other themes provided (`default`, `neutral` or `dark`) the configuration
+parameter can be set to it after invoking the extension, e.g.:
+
+ wfLoadExtension( 'Mermaid' );
+ $mermaidgDefaultTheme = 'neutral';
+
+[readme]: https://github.com/SemanticMediaWiki/Mermaid/blob/master/README.md
+[release notes]: https://github.com/SemanticMediaWiki/Mermaid/blob/master/docs/RELEASE-NOTES.md
+[usage examples]: https://github.com/SemanticMediaWiki/Mermaid/blob/master/docs/USAGE.md
diff --git a/www/wiki/extensions/Mermaid/docs/ISSUE_TEMPLATE.md b/www/wiki/extensions/Mermaid/docs/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000..2ef2a952
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/docs/ISSUE_TEMPLATE.md
@@ -0,0 +1,15 @@
+### Setup and configuration
+
+- Mermaid version:
+- MediaWiki version:
+- PHP version:
+- Database system (MySQL, PostgresQL, etc.) and version:
+
+### Issue
+
+Produces a [stack trace](https://www.semantic-mediawiki.org/wiki/Help:Identifying_bugs) and outputs:
+
+```
+```
+
+Steps to reproduce the observation (recommendation is to use the [sandbox](http://www.sandbox.semantic-mediawiki.org)):
diff --git a/www/wiki/extensions/Mermaid/docs/PULL_REQUEST_TEMPLATE.md b/www/wiki/extensions/Mermaid/docs/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 00000000..baa76247
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/docs/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,12 @@
+This PR is made in reference to: #
+
+This PR addresses or contains:
+- ...
+- ...
+- ...
+
+This PR includes:
+- [ ] Tests (unit/integration)
+- [ ] CI build passed
+
+Fixes #
diff --git a/www/wiki/extensions/Mermaid/docs/RELEASE-NOTES.md b/www/wiki/extensions/Mermaid/docs/RELEASE-NOTES.md
new file mode 100644
index 00000000..3b9e81d1
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/docs/RELEASE-NOTES.md
@@ -0,0 +1,42 @@
+This file contains the *release notes* of the **Mermaid** extension. See also the
+[readme], the [installation and configuration information] and [usage examples].
+
+
+### 2.1.1
+
+Released on May 20, 2019.
+
+* Fixes loading of configuration settings
+
+### 2.1.0
+
+Released on March 5, 2019.
+
+* Drops support for MediaWiki 1.30 and earlier
+* Removes deprecated `mediawiki.api.parse` alias
+
+### 2.0.0
+
+Released on February 18, 2019.
+
+* Updates to using version 8.0.0 of the mermaid script language.
+* Translation updates from https://translatewiki.net
+
+### 1.0.1
+
+Released on February 13, 2018.
+
+* Improves ID entropy for generated diagrams and charts
+* Translation updates from https://translatewiki.net
+
+### 1.0.0
+
+Released on January 16, 2018.
+
+* Initial release using version 7.0.5 of the mermaid script language.
+* Added an `MERMAID` parser to easily generate diagrams and flowcharts with the help of the mermaid script language
+* Localizations from https://translatewiki.net
+
+[readme]: https://github.com/SemanticMediaWiki/Mermaid/blob/master/README.md
+[installation and configuration information]: https://github.com/SemanticMediaWiki/Mermaid/blob/master/docs/INSTALL.md
+[usage examples]: https://github.com/SemanticMediaWiki/Mermaid/blob/master/docs/USAGE.md
diff --git a/www/wiki/extensions/Mermaid/docs/USAGE.md b/www/wiki/extensions/Mermaid/docs/USAGE.md
new file mode 100644
index 00000000..b84ed126
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/docs/USAGE.md
@@ -0,0 +1,27 @@
+This file contains basic *usage information* for the **Mermaid** extension. See also the [readme].
+
+The `#mermaid` parser function allows to add [mermaid][mermaid] typed content to a wiki article. Copying,
+[example syntax][examplemjs] is as easy as:
+
+```
+{{#mermaid:sequenceDiagram
+participant Alice
+participant Bob
+ Alice->John: Hello John, how are you?
+ loop Healthcheck
+ John->John: Fight against hypochondria
+ end
+ Note right of John: Rational thoughts <br/>prevail...
+ John-->Alice: Great!
+ John->Bob: How about you?
+ Bob-->John: Jolly good!
+}}
+```
+![image](https://user-images.githubusercontent.com/1245473/34535703-14a32100-f106-11e7-9201-ea90a6286c58.png)
+
+Further [examples][examplesmw] have been created on wiki.
+
+[readme]: https://github.com/SemanticMediaWiki/Mermaid/blob/master/README.md
+[mermaid]: https://github.com/knsv/mermaid
+[examplemjs]: https://mermaidjs.github.io/
+[examplesmw]: https://sandbox.semantic-mediawiki.org/wiki/Mermaid
diff --git a/www/wiki/extensions/Mermaid/extension.json b/www/wiki/extensions/Mermaid/extension.json
new file mode 100644
index 00000000..9a0a3909
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/extension.json
@@ -0,0 +1,25 @@
+{
+ "name": "Mermaid",
+ "version": "2.1.1",
+ "author": [
+ "James Hong Kong"
+ ],
+ "url": "https://github.com/SemanticMediaWiki/Mermaid/",
+ "descriptionmsg": "mermaid-desc",
+ "license-name": "GPL-2.0-or-later",
+ "type": "parserhook",
+ "requires": {
+ "MediaWiki": ">= 1.31"
+ },
+ "MessagesDirs": {
+ "Mermaid": [
+ "i18n"
+ ]
+ },
+ "callback": "Mermaid::initExtension",
+ "ExtensionFunctions": [
+ "Mermaid::onExtensionFunction"
+ ],
+ "load_composer_autoloader": true,
+ "manifest_version": 2
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/Mermaid.magic.php b/www/wiki/extensions/Mermaid/i18n/Mermaid.magic.php
new file mode 100644
index 00000000..31e79252
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/Mermaid.magic.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * Magic words
+ */
+$magicWords = array();
+
+/**
+ * English (English)
+ */
+$magicWords['en'] = array(
+ 'mermaid' => array( 0, 'mermaid' )
+);
diff --git a/www/wiki/extensions/Mermaid/i18n/ar.json b/www/wiki/extensions/Mermaid/i18n/ar.json
new file mode 100644
index 00000000..d722f805
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/ar.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "ديفيد"
+ ]
+ },
+ "mermaid-desc": "توفر وظيفة محلل للمساعدة في توليد الرسوم البيانية ومخططات الانسيابية باستخدام لغة البرنامج النصي [https://mermaidjs.github.io/ الحورية]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/ast.json b/www/wiki/extensions/Mermaid/i18n/ast.json
new file mode 100644
index 00000000..3c018525
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/ast.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Xuacu"
+ ]
+ },
+ "mermaid-desc": "Ufre una función del analizador sintácticu p'ayudar a xenerar diagrames y organigrames usando'l llinguaxe de script [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/be-tarask.json b/www/wiki/extensions/Mermaid/i18n/be-tarask.json
new file mode 100644
index 00000000..d0d12e3a
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/be-tarask.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Red Winged Duck"
+ ]
+ },
+ "mermaid-desc": "Забясьпечвае функцыю парсэру для дапамогі ў стварэньні дыяграмаў і блёк-схемаў з выкарыстаньнем скрыптавай мовы [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/de.json b/www/wiki/extensions/Mermaid/i18n/de.json
new file mode 100644
index 00000000..60223223
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/de.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kghbln"
+ ]
+ },
+ "mermaid-desc": "Stellt eine Parserfunktion zur Erstellung von (Fluss-)Diagrammen mithilfe der Skriptsprache „[https://mermaidjs.github.io/ mermaid]“ bereit"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/en.json b/www/wiki/extensions/Mermaid/i18n/en.json
new file mode 100644
index 00000000..96d8a14e
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/en.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "mwjames"
+ ]
+ },
+ "mermaid-desc": "Provides a parser function to help generate diagrams and flowcharts using the [https://mermaidjs.github.io/ mermaid] script language"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/es.json b/www/wiki/extensions/Mermaid/i18n/es.json
new file mode 100644
index 00000000..8e6c350c
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/es.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Fitoschido"
+ ]
+ },
+ "mermaid-desc": "Proporciona una función del analizador sintáctico para ayudar a generar diagramas y organigramas mediante el lenguaje de programación [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/eu.json b/www/wiki/extensions/Mermaid/i18n/eu.json
new file mode 100644
index 00000000..eab5fd26
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/eu.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Amaia"
+ ]
+ },
+ "mermaid-desc": "Eman funtzio aztertzaile sintaktiko bat, diagramak eta organigramak sortzen laguntzeko, [https://mermaidjs.github.io/ mermaid] programazio hizkuntza erabiliz"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/fr.json b/www/wiki/extensions/Mermaid/i18n/fr.json
new file mode 100644
index 00000000..37402ce1
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/fr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Wladek92"
+ ]
+ },
+ "mermaid-desc": "Fournit une fonction d'analyse pour aider à la génération des diagrammes et des organigrammes en utilisant le langage de script [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/gl.json b/www/wiki/extensions/Mermaid/i18n/gl.json
new file mode 100644
index 00000000..0af41c0a
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/gl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Elisardojm"
+ ]
+ },
+ "mermaid-desc": "Proporciona unha función do analizador sintáctico para axudar a xerar diagramas e organigramas mediante a linguaxe de comandos [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/ia.json b/www/wiki/extensions/Mermaid/i18n/ia.json
new file mode 100644
index 00000000..eff3c94e
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/ia.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "McDutchie"
+ ]
+ },
+ "mermaid-desc": "Forni un function analysator pro adjutar a generar diagrammas e fluxogrammas usante le linguage de script [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/ko.json b/www/wiki/extensions/Mermaid/i18n/ko.json
new file mode 100644
index 00000000..3a99ee87
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/ko.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jay94ks"
+ ]
+ },
+ "mermaid-desc": "[https://mermaidjs.github.io/mermaid] 스크립트 언어를 사용하여 다이어그램 및 흐름도를 생성하기 위해 사용할 구문 분석기 함수를 제공하세요."
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/li.json b/www/wiki/extensions/Mermaid/i18n/li.json
new file mode 100644
index 00000000..b0d98925
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/li.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Ooswesthoesbes"
+ ]
+ },
+ "mermaid-desc": "Bèdj 'n parserfunctie veur diagramme en vleujkaarte te make mit gebroek van 't [https://mermaidjs.github.io/ mermaid-sjrif]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/mk.json b/www/wiki/extensions/Mermaid/i18n/mk.json
new file mode 100644
index 00000000..8ae60a08
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/mk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Bjankuloski06"
+ ]
+ },
+ "mermaid-desc": "Дава расчленувачка функција за создавање на дијаграми и блок-шеми користејќи го скриптниот јазик [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/nb.json b/www/wiki/extensions/Mermaid/i18n/nb.json
new file mode 100644
index 00000000..53acff28
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/nb.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jon Harald Søby"
+ ]
+ },
+ "mermaid-desc": "Gir en parserfunksjon for å generere diagrammer og flytkart med skriptspråket [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/pl.json b/www/wiki/extensions/Mermaid/i18n/pl.json
new file mode 100644
index 00000000..afc5541f
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/pl.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Railfail536"
+ ]
+ },
+ "mermaid-desc": "Dostarcza funkcję parsera pomagającą w generowaniu diagramów i schematów blokowych przy wykorzystaniu języka skryptowego [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/pt-br.json b/www/wiki/extensions/Mermaid/i18n/pt-br.json
new file mode 100644
index 00000000..7eea36f7
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/pt-br.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Eduardo Addad de Oliveira"
+ ]
+ },
+ "mermaid-desc": "Fornece uma função do analisador sintático para ajudar a gerar diagramas e fluxogramas, utilizando a linguagem de comandos [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/pt.json b/www/wiki/extensions/Mermaid/i18n/pt.json
new file mode 100644
index 00000000..e4a6b2a6
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/pt.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hamilton Abreu"
+ ]
+ },
+ "mermaid-desc": "Fornece uma função do analisador sintático para ajudar a gerar diagramas e fluxogramas, utilizando a linguagem de comandos [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/qqq.json b/www/wiki/extensions/Mermaid/i18n/qqq.json
new file mode 100644
index 00000000..b90ab4f4
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/qqq.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kghbln"
+ ]
+ },
+ "mermaid-desc": "{{desc|name=Mermaid|url=https://www.mediawiki.org/wiki/Extension:Mermaid}}"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/roa-tara.json b/www/wiki/extensions/Mermaid/i18n/roa-tara.json
new file mode 100644
index 00000000..a1a1f91e
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/roa-tara.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Joetaras"
+ ]
+ },
+ "mermaid-desc": "Dèje 'na funzione ca analizze pe aijutà a generà le diagramme e le flusse ausanne 'u lenguagge de script [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/ru.json b/www/wiki/extensions/Mermaid/i18n/ru.json
new file mode 100644
index 00000000..552759b4
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/ru.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Staspotanin2",
+ "Kaganer"
+ ]
+ },
+ "mermaid-desc": "Предоставляет функции парсера, для помощи в генерации диаграмм и блок-схем, с использованием скриптового языка [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/sv.json b/www/wiki/extensions/Mermaid/i18n/sv.json
new file mode 100644
index 00000000..4049c386
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/sv.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Psl85"
+ ]
+ },
+ "mermaid-desc": "Begär en parserfunksjon för att generera diagram och flödekort med skriptspråket [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/tr.json b/www/wiki/extensions/Mermaid/i18n/tr.json
new file mode 100644
index 00000000..b313390c
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/tr.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Hedda"
+ ]
+ },
+ "mermaid-desc": "[https://mermaidjs.github.io/ Deniz kızı] script dilini kullanarak diyagram ve akış şemaları oluşturmaya yardımcı olacak ayrıştırıcı bir işlev sağlar."
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/uk.json b/www/wiki/extensions/Mermaid/i18n/uk.json
new file mode 100644
index 00000000..7f24f5d3
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/uk.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Vlad5250"
+ ]
+ },
+ "mermaid-desc": "Надає функції парсера для допомоги у генерації діаграм і блок-схем, з використанням скриптової мови [https://mermaidjs.github.io/ mermaid]"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/zh-hans.json b/www/wiki/extensions/Mermaid/i18n/zh-hans.json
new file mode 100644
index 00000000..7a98ffca
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/zh-hans.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Liuxinyu970226"
+ ]
+ },
+ "mermaid-desc": "提供解析器函数以帮助生成使用[https://mermaidjs.github.io/ mermaid] 脚本语言的图表和流程图"
+}
diff --git a/www/wiki/extensions/Mermaid/i18n/zh-hant.json b/www/wiki/extensions/Mermaid/i18n/zh-hant.json
new file mode 100644
index 00000000..128cdc94
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/i18n/zh-hant.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Kly"
+ ]
+ },
+ "mermaid-desc": "提供解析函式以協助產生使用 [https://mermaidjs.github.io/ mermaid] 腳本語言的圖表與流程圖"
+}
diff --git a/www/wiki/extensions/Mermaid/phpunit.xml.dist b/www/wiki/extensions/Mermaid/phpunit.xml.dist
new file mode 100644
index 00000000..8a48edb8
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/phpunit.xml.dist
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit backupGlobals="false"
+ backupStaticAttributes="false"
+ bootstrap="tests/bootstrap.php"
+ cacheTokens="false"
+ colors="true"
+ convertErrorsToExceptions="true"
+ convertNoticesToExceptions="true"
+ convertWarningsToExceptions="true"
+ stopOnError="false"
+ stopOnFailure="false"
+ stopOnIncomplete="false"
+ stopOnSkipped="false"
+ verbose="true">
+ <testsuites>
+ <testsuite name="mermaid-unit">
+ <directory>tests/phpunit/Unit</directory>
+ </testsuite>
+ <testsuite name="mermaid-integration">
+ <directory>tests/phpunit/Integration</directory>
+ </testsuite>
+ </testsuites>
+ <filter>
+ <whitelist addUncoveredFilesFromWhitelist="true">
+ <directory suffix=".php">src</directory>
+ </whitelist>
+ </filter>
+</phpunit>
diff --git a/www/wiki/extensions/Mermaid/res/d3/d3.min.js b/www/wiki/extensions/Mermaid/res/d3/d3.min.js
new file mode 100644
index 00000000..4f9d80b7
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/d3/d3.min.js
@@ -0,0 +1,8 @@
+// https://d3js.org Version 4.0.0. Copyright 2016 Mike Bostock.
+!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n(t.d3=t.d3||{})}(this,function(t){"use strict";function n(t,n){return t<n?-1:t>n?1:t>=n?0:NaN}function e(t){return 1===t.length&&(t=r(t)),{left:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r<i;){var o=r+i>>>1;t(n[o],e)<0?r=o+1:i=o}return r},right:function(n,e,r,i){for(null==r&&(r=0),null==i&&(i=n.length);r<i;){var o=r+i>>>1;t(n[o],e)>0?i=o:r=o+1}return r}}}function r(t){return function(e,r){return n(t(e),r)}}function i(t,n){return n<t?-1:n>t?1:n>=t?0:NaN}function o(t){return null===t?NaN:+t}function u(t,n){var e,r,i=t.length,u=0,a=0,c=-1,s=0;if(null==n)for(;++c<i;)isNaN(e=o(t[c]))||(r=e-u,u+=r/++s,a+=r*(e-u));else for(;++c<i;)isNaN(e=o(n(t[c],c,t)))||(r=e-u,u+=r/++s,a+=r*(e-u));if(s>1)return a/(s-1)}function a(t,n){var e=u(t,n);return e?Math.sqrt(e):e}function c(t,n){var e,r,i,o=-1,u=t.length;if(null==n){for(;++o<u;)if(null!=(r=t[o])&&r>=r){e=i=r;break}for(;++o<u;)null!=(r=t[o])&&(e>r&&(e=r),i<r&&(i=r))}else{for(;++o<u;)if(null!=(r=n(t[o],o,t))&&r>=r){e=i=r;break}for(;++o<u;)null!=(r=n(t[o],o,t))&&(e>r&&(e=r),i<r&&(i=r))}return[e,i]}function s(t){return function(){return t}}function f(t){return t}function l(t,n,e){t=+t,n=+n,e=(i=arguments.length)<2?(n=t,t=0,1):i<3?1:+e;for(var r=-1,i=0|Math.max(0,Math.ceil((n-t)/e)),o=new Array(i);++r<i;)o[r]=t+r*e;return o}function h(t,n,e){var r=p(t,n,e);return l(Math.ceil(t/r)*r,Math.floor(n/r)*r+r/2,r)}function p(t,n,e){var r=Math.abs(n-t)/Math.max(0,e),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=wd?i*=10:o>=Md?i*=5:o>=Td&&(i*=2),n<t?-i:i}function d(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1}function v(){function t(t){var i,o,u=t.length,a=new Array(u);for(i=0;i<u;++i)a[i]=n(t[i],i,t);var c=e(a),s=c[0],f=c[1],l=r(a,s,f);Array.isArray(l)||(l=h(s,f,l));for(var p=l.length;l[0]<=s;)l.shift(),--p;for(;l[p-1]>=f;)l.pop(),--p;var d,v=new Array(p+1);for(i=0;i<=p;++i)d=v[i]=[],d.x0=i>0?l[i-1]:s,d.x1=i<p?l[i]:f;for(i=0;i<u;++i)o=a[i],s<=o&&o<=f&&v[yd(l,o,0,p)].push(t[i]);return v}var n=f,e=c,r=d;return t.value=function(e){return arguments.length?(n="function"==typeof e?e:s(e),t):n},t.domain=function(n){return arguments.length?(e="function"==typeof n?n:s([n[0],n[1]]),t):e},t.thresholds=function(n){return arguments.length?(r="function"==typeof n?n:s(Array.isArray(n)?xd.call(n):n),t):r},t}function _(t,n,e){if(null==e&&(e=o),r=t.length){if((n=+n)<=0||r<2)return+e(t[0],0,t);if(n>=1)return+e(t[r-1],r-1,t);var r,i=(r-1)*n,u=Math.floor(i),a=+e(t[u],u,t),c=+e(t[u+1],u+1,t);return a+(c-a)*(i-u)}}function y(t,e,r){return t=bd.call(t,o).sort(n),Math.ceil((r-e)/(2*(_(t,.75)-_(t,.25))*Math.pow(t.length,-1/3)))}function g(t,n,e){return Math.ceil((e-n)/(3.5*a(t)*Math.pow(t.length,-1/3)))}function m(t,n){var e,r,i=-1,o=t.length;if(null==n){for(;++i<o;)if(null!=(r=t[i])&&r>=r){e=r;break}for(;++i<o;)null!=(r=t[i])&&r>e&&(e=r)}else{for(;++i<o;)if(null!=(r=n(t[i],i,t))&&r>=r){e=r;break}for(;++i<o;)null!=(r=n(t[i],i,t))&&r>e&&(e=r)}return e}function x(t,n){var e,r=0,i=t.length,u=-1,a=i;if(null==n)for(;++u<i;)isNaN(e=o(t[u]))?--a:r+=e;else for(;++u<i;)isNaN(e=o(n(t[u],u,t)))?--a:r+=e;if(a)return r/a}function b(t,e){var r,i=[],u=t.length,a=-1;if(null==e)for(;++a<u;)isNaN(r=o(t[a]))||i.push(r);else for(;++a<u;)isNaN(r=o(e(t[a],a,t)))||i.push(r);return _(i.sort(n),.5)}function w(t){for(var n,e,r,i=t.length,o=-1,u=0;++o<i;)u+=t[o].length;for(e=new Array(u);--i>=0;)for(r=t[i],n=r.length;--n>=0;)e[--u]=r[n];return e}function M(t,n){var e,r,i=-1,o=t.length;if(null==n){for(;++i<o;)if(null!=(r=t[i])&&r>=r){e=r;break}for(;++i<o;)null!=(r=t[i])&&e>r&&(e=r)}else{for(;++i<o;)if(null!=(r=n(t[i],i,t))&&r>=r){e=r;break}for(;++i<o;)null!=(r=n(t[i],i,t))&&e>r&&(e=r)}return e}function T(t){for(var n=0,e=t.length-1,r=t[0],i=new Array(e<0?0:e);n<e;)i[n]=[r,r=t[++n]];return i}function k(t,n){for(var e=n.length,r=new Array(e);e--;)r[e]=t[n[e]];return r}function N(t,e){if(r=t.length){var r,i,o=0,u=0,a=t[u];for(e||(e=n);++o<r;)(e(i=t[o],a)<0||0!==e(a,a))&&(a=i,u=o);return 0===e(a,a)?u:void 0}}function S(t,n,e){for(var r,i,o=(null==e?t.length:e)-(n=null==n?0:+n);o;)i=Math.random()*o--|0,r=t[o+n],t[o+n]=t[i+n],t[i+n]=r;return t}function E(t,n){var e,r=0,i=t.length,o=-1;if(null==n)for(;++o<i;)(e=+t[o])&&(r+=e);else for(;++o<i;)(e=+n(t[o],o,t))&&(r+=e);return r}function A(t){if(!(i=t.length))return[];for(var n=-1,e=M(t,C),r=new Array(e);++n<e;)for(var i,o=-1,u=r[n]=new Array(i);++o<i;)u[o]=t[o][n];return r}function C(t){return t.length}function z(){return A(arguments)}function P(){}function L(t,n){var e=new P;if(t instanceof P)t.each(function(t,n){e.set(n,t)});else if(Array.isArray(t)){var r,i=-1,o=t.length;if(null==n)for(;++i<o;)e.set(i,t[i]);else for(;++i<o;)e.set(n(r=t[i],i,t),r)}else if(t)for(var u in t)e.set(u,t[u]);return e}function q(){function t(n,i,u,a){if(i>=o.length)return null!=r?r(n):null!=e?n.sort(e):n;for(var c,s,f,l=-1,h=n.length,p=o[i++],d=L(),v=u();++l<h;)(f=d.get(c=p(s=n[l])+""))?f.push(s):d.set(c,[s]);return d.each(function(n,e){a(v,e,t(n,i,u,a))}),v}function n(t,e){if(++e>o.length)return t;var i,a=u[e-1];return null!=r&&e>=o.length?i=t.entries():(i=[],t.each(function(t,r){i.push({key:r,values:n(t,e)})})),null!=a?i.sort(function(t,n){return a(t.key,n.key)}):i}var e,r,i,o=[],u=[];return i={object:function(n){return t(n,0,U,R)},map:function(n){return t(n,0,D,O)},entries:function(e){return n(t(e,0,D,O),0)},key:function(t){return o.push(t),i},sortKeys:function(t){return u[o.length-1]=t,i},sortValues:function(t){return e=t,i},rollup:function(t){return r=t,i}}}function U(){return{}}function R(t,n,e){t[n]=e}function D(){return L()}function O(t,n,e){t.set(n,e)}function F(){}function I(t,n){var e=new F;if(t instanceof F)t.each(function(t){e.add(t)});else if(t){var r=-1,i=t.length;if(null==n)for(;++r<i;)e.add(t[r]);else for(;++r<i;)e.add(n(t[r],r,t))}return e}function Y(t){var n=[];for(var e in t)n.push(e);return n}function B(t){var n=[];for(var e in t)n.push(t[e]);return n}function j(t){var n=[];for(var e in t)n.push({key:e,value:t[e]});return n}function H(t,n){return t=null==t?0:+t,n=null==n?1:+n,1===arguments.length?(n=t,t=0):n-=t,function(){return Math.random()*n+t}}function X(t,n){var e,r;return t=null==t?0:+t,n=null==n?1:+n,function(){var i;if(null!=e)i=e,e=null;else do e=2*Math.random()-1,i=2*Math.random()-1,r=e*e+i*i;while(!r||r>1);return t+n*i*Math.sqrt(-2*Math.log(r)/r)}}function V(){var t=X.apply(this,arguments);return function(){return Math.exp(t())}}function W(t){return function(){for(var n=0,e=0;e<t;++e)n+=Math.random();return n}}function $(t){var n=W(t);return function(){return n()/t}}function Z(t){return function(){return-Math.log(1-Math.random())/t}}function G(t){return+t}function J(t){return t*t}function Q(t){return t*(2-t)}function K(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}function tt(t){return t*t*t}function nt(t){return--t*t*t+1}function et(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}function rt(t){return 1-Math.cos(t*Pd)}function it(t){return Math.sin(t*Pd)}function ot(t){return(1-Math.cos(zd*t))/2}function ut(t){return Math.pow(2,10*t-10)}function at(t){return 1-Math.pow(2,-10*t)}function ct(t){return((t*=2)<=1?Math.pow(2,10*t-10):2-Math.pow(2,10-10*t))/2}function st(t){return 1-Math.sqrt(1-t*t)}function ft(t){return Math.sqrt(1- --t*t)}function lt(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}function ht(t){return 1-pt(1-t)}function pt(t){return(t=+t)<Ld?Bd*t*t:t<Ud?Bd*(t-=qd)*t+Rd:t<Od?Bd*(t-=Dd)*t+Fd:Bd*(t-=Id)*t+Yd}function dt(t){return((t*=2)<=1?1-pt(1-t):pt(t-1)+1)/2}function vt(t){for(var n,e=-1,r=t.length,i=t[r-1],o=0;++e<r;)n=i,i=t[e],o+=n[1]*i[0]-n[0]*i[1];return o/2}function _t(t){for(var n,e,r=-1,i=t.length,o=0,u=0,a=t[i-1],c=0;++r<i;)n=a,a=t[r],c+=e=n[0]*a[1]-a[0]*n[1],o+=(n[0]+a[0])*e,u+=(n[1]+a[1])*e;return c*=3,[o/c,u/c]}function yt(t,n,e){return(n[0]-t[0])*(e[1]-t[1])-(n[1]-t[1])*(e[0]-t[0])}function gt(t,n){return t[0]-n[0]||t[1]-n[1]}function mt(t){for(var n=t.length,e=[0,1],r=2,i=2;i<n;++i){for(;r>1&&yt(t[e[r-2]],t[e[r-1]],t[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function xt(t){if((e=t.length)<3)return null;var n,e,r=new Array(e),i=new Array(e);for(n=0;n<e;++n)r[n]=[+t[n][0],+t[n][1],n];for(r.sort(gt),n=0;n<e;++n)i[n]=[r[n][0],-r[n][1]];var o=mt(r),u=mt(i),a=u[0]===o[0],c=u[u.length-1]===o[o.length-1],s=[];for(n=o.length-1;n>=0;--n)s.push(t[r[o[n]][2]]);for(n=+a;n<u.length-c;++n)s.push(t[r[u[n]][2]]);return s}function bt(t,n){for(var e,r,i=t.length,o=t[i-1],u=n[0],a=n[1],c=o[0],s=o[1],f=!1,l=0;l<i;++l)o=t[l],e=o[0],r=o[1],r>a!=s>a&&u<(c-e)*(a-r)/(s-r)+e&&(f=!f),c=e,s=r;return f}function wt(t){for(var n,e,r=-1,i=t.length,o=t[i-1],u=o[0],a=o[1],c=0;++r<i;)n=u,e=a,o=t[r],u=o[0],a=o[1],n-=u,e-=a,c+=Math.sqrt(n*n+e*e);return c}function Mt(){this._x0=this._y0=this._x1=this._y1=null,this._=[]}function Tt(){return new Mt}function kt(t){var n=+this._x.call(null,t),e=+this._y.call(null,t);return Nt(this.cover(n,e),n,e,t)}function Nt(t,n,e,r){if(isNaN(n)||isNaN(e))return t;var i,o,u,a,c,s,f,l,h,p=t._root,d={data:r},v=t._x0,_=t._y0,y=t._x1,g=t._y1;if(!p)return t._root=d,t;for(;p.length;)if((s=n>=(o=(v+y)/2))?v=o:y=o,(f=e>=(u=(_+g)/2))?_=u:g=u,i=p,!(p=p[l=f<<1|s]))return i[l]=d,t;if(a=+t._x.call(null,p.data),c=+t._y.call(null,p.data),n===a&&e===c)return d.next=p,i?i[l]=d:t._root=d,t;do i=i?i[l]=new Array(4):t._root=new Array(4),(s=n>=(o=(v+y)/2))?v=o:y=o,(f=e>=(u=(_+g)/2))?_=u:g=u;while((l=f<<1|s)===(h=(c>=u)<<1|a>=o));return i[h]=p,i[l]=d,t}function St(t){var n,e,r,i,o=t.length,u=new Array(o),a=new Array(o),c=1/0,s=1/0,f=-(1/0),l=-(1/0);for(e=0;e<o;++e)isNaN(r=+this._x.call(null,n=t[e]))||isNaN(i=+this._y.call(null,n))||(u[e]=r,a[e]=i,r<c&&(c=r),r>f&&(f=r),i<s&&(s=i),i>l&&(l=i));for(f<c&&(c=this._x0,f=this._x1),l<s&&(s=this._y0,l=this._y1),this.cover(c,s).cover(f,l),e=0;e<o;++e)Nt(this,u[e],a[e],t[e]);return this}function Et(t,n){if(isNaN(t=+t)||isNaN(n=+n))return this;var e=this._x0,r=this._y0,i=this._x1,o=this._y1;if(isNaN(e))i=(e=Math.floor(t))+1,o=(r=Math.floor(n))+1;else{if(!(e>t||t>i||r>n||n>o))return this;var u,a,c=i-e,s=this._root;switch(a=(n<(r+o)/2)<<1|t<(e+i)/2){case 0:do u=new Array(4),u[a]=s,s=u;while(c*=2,i=e+c,o=r+c,t>i||n>o);break;case 1:do u=new Array(4),u[a]=s,s=u;while(c*=2,e=i-c,o=r+c,e>t||n>o);break;case 2:do u=new Array(4),u[a]=s,s=u;while(c*=2,i=e+c,r=o-c,t>i||r>n);break;case 3:do u=new Array(4),u[a]=s,s=u;while(c*=2,e=i-c,r=o-c,e>t||r>n)}this._root&&this._root.length&&(this._root=s)}return this._x0=e,this._y0=r,this._x1=i,this._y1=o,this}function At(){var t=[];return this.visit(function(n){if(!n.length)do t.push(n.data);while(n=n.next)}),t}function Ct(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]}function zt(t,n,e,r,i){this.node=t,this.x0=n,this.y0=e,this.x1=r,this.y1=i}function Pt(t,n,e){var r,i,o,u,a,c,s,f=this._x0,l=this._y0,h=this._x1,p=this._y1,d=[],v=this._root;for(v&&d.push(new zt(v,f,l,h,p)),null==e?e=1/0:(f=t-e,l=n-e,h=t+e,p=n+e,e*=e);c=d.pop();)if(!(!(v=c.node)||(i=c.x0)>h||(o=c.y0)>p||(u=c.x1)<f||(a=c.y1)<l))if(v.length){var _=(i+u)/2,y=(o+a)/2;d.push(new zt(v[3],_,y,u,a),new zt(v[2],i,y,_,a),new zt(v[1],_,o,u,y),new zt(v[0],i,o,_,y)),(s=(n>=y)<<1|t>=_)&&(c=d[d.length-1],d[d.length-1]=d[d.length-1-s],d[d.length-1-s]=c)}else{var g=t-+this._x.call(null,v.data),m=n-+this._y.call(null,v.data),x=g*g+m*m;if(x<e){var b=Math.sqrt(e=x);f=t-b,l=n-b,h=t+b,p=n+b,r=v.data}}return r}function Lt(t){if(isNaN(o=+this._x.call(null,t))||isNaN(u=+this._y.call(null,t)))return this;var n,e,r,i,o,u,a,c,s,f,l,h,p=this._root,d=this._x0,v=this._y0,_=this._x1,y=this._y1;if(!p)return this;if(p.length)for(;;){if((s=o>=(a=(d+_)/2))?d=a:_=a,(f=u>=(c=(v+y)/2))?v=c:y=c,n=p,!(p=p[l=f<<1|s]))return this;if(!p.length)break;(n[l+1&3]||n[l+2&3]||n[l+3&3])&&(e=n,h=l)}for(;p.data!==t;)if(r=p,!(p=p.next))return this;return(i=p.next)&&delete p.next,r?(i?r.next=i:delete r.next,this):n?(i?n[l]=i:delete n[l],(p=n[0]||n[1]||n[2]||n[3])&&p===(n[3]||n[2]||n[1]||n[0])&&!p.length&&(e?e[h]=p:this._root=p),this):(this._root=i,this)}function qt(t){for(var n=0,e=t.length;n<e;++n)this.remove(t[n]);return this}function Ut(){return this._root}function Rt(){var t=0;return this.visit(function(n){if(!n.length)do++t;while(n=n.next)}),t}function Dt(t){var n,e,r,i,o,u,a=[],c=this._root;for(c&&a.push(new zt(c,this._x0,this._y0,this._x1,this._y1));n=a.pop();)if(!t(c=n.node,r=n.x0,i=n.y0,o=n.x1,u=n.y1)&&c.length){var s=(r+o)/2,f=(i+u)/2;(e=c[3])&&a.push(new zt(e,s,f,o,u)),(e=c[2])&&a.push(new zt(e,r,f,s,u)),(e=c[1])&&a.push(new zt(e,s,i,o,f)),(e=c[0])&&a.push(new zt(e,r,i,s,f))}return this}function Ot(t){var n,e=[],r=[];for(this._root&&e.push(new zt(this._root,this._x0,this._y0,this._x1,this._y1));n=e.pop();){var i=n.node;if(i.length){var o,u=n.x0,a=n.y0,c=n.x1,s=n.y1,f=(u+c)/2,l=(a+s)/2;(o=i[0])&&e.push(new zt(o,u,a,f,l)),(o=i[1])&&e.push(new zt(o,f,a,c,l)),(o=i[2])&&e.push(new zt(o,u,l,f,s)),(o=i[3])&&e.push(new zt(o,f,l,c,s))}r.push(n)}for(;n=r.pop();)t(n.node,n.x0,n.y0,n.x1,n.y1);return this}function Ft(t){return t[0]}function It(t){return arguments.length?(this._x=t,this):this._x}function Yt(t){return t[1]}function Bt(t){return arguments.length?(this._y=t,this):this._y}function jt(t,n,e){var r=new Ht(null==n?Ft:n,null==e?Yt:e,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function Ht(t,n,e,r,i,o){this._x=t,this._y=n,this._x0=e,this._y0=r,this._x1=i,this._y1=o,this._root=void 0}function Xt(t){for(var n={data:t.data},e=n;t=t.next;)e=e.next={data:t.data};return n}function Vt(t){if(!(t>=1))throw new Error;this._size=t,this._call=this._error=null,this._tasks=[],this._data=[],this._waiting=this._active=this._ended=this._start=0}function Wt(t){if(!t._start)try{$t(t)}catch(n){t._tasks[t._ended+t._active-1]&&Gt(t,n)}}function $t(t){for(;t._start=t._waiting&&t._active<t._size;){var n=t._ended+t._active,e=t._tasks[n],r=e.length-1,i=e[r];e[r]=Zt(t,n),--t._waiting,++t._active,e=i.apply(null,e),t._tasks[n]&&(t._tasks[n]=e||ov)}}function Zt(t,n){return function(e,r){t._tasks[n]&&(--t._active,++t._ended,t._tasks[n]=null,null==t._error&&(null!=e?Gt(t,e):(t._data[n]=r,t._waiting?Wt(t):Jt(t))))}}function Gt(t,n){var e,r=t._tasks.length;for(t._error=n,t._data=void 0,t._waiting=NaN;--r>=0;)if((e=t._tasks[r])&&(t._tasks[r]=null,e.abort))try{e.abort()}catch(n){}t._active=NaN,Jt(t)}function Jt(t){!t._active&&t._call&&t._call(t._error,t._data)}function Qt(t){return new Vt(arguments.length?+t:1/0)}function Kt(t){return function(){return t}}function tn(t){return t.innerRadius}function nn(t){return t.outerRadius}function en(t){return t.startAngle}function rn(t){return t.endAngle}function on(t){return t&&t.padAngle}function un(t){return t>=1?cv:t<=-1?-cv:Math.asin(t)}function an(t,n,e,r,i,o,u,a){var c=e-t,s=r-n,f=u-i,l=a-o,h=(f*(n-o)-l*(t-i))/(l*c-f*s);return[t+h*c,n+h*s]}function cn(t,n,e,r,i,o,u){var a=t-e,c=n-r,s=(u?o:-o)/Math.sqrt(a*a+c*c),f=s*c,l=-s*a,h=t+f,p=n+l,d=e+f,v=r+l,_=(h+d)/2,y=(p+v)/2,g=d-h,m=v-p,x=g*g+m*m,b=i-o,w=h*v-d*p,M=(m<0?-1:1)*Math.sqrt(Math.max(0,b*b*x-w*w)),T=(w*m-g*M)/x,k=(-w*g-m*M)/x,N=(w*m+g*M)/x,S=(-w*g+m*M)/x,E=T-_,A=k-y,C=N-_,z=S-y;return E*E+A*A>C*C+z*z&&(T=N,k=S),{cx:T,cy:k,x01:-f,y01:-l,x11:T*(i/b-1),y11:k*(i/b-1)}}function sn(){function t(){var t,s,f=+n.apply(this,arguments),l=+e.apply(this,arguments),h=o.apply(this,arguments)-cv,p=u.apply(this,arguments)-cv,d=Math.abs(p-h),v=p>h;if(c||(c=t=Tt()),l<f&&(s=l,l=f,f=s),l>uv)if(d>sv-uv)c.moveTo(l*Math.cos(h),l*Math.sin(h)),c.arc(0,0,l,h,p,!v),f>uv&&(c.moveTo(f*Math.cos(p),f*Math.sin(p)),c.arc(0,0,f,p,h,v));else{var _,y,g=h,m=p,x=h,b=p,w=d,M=d,T=a.apply(this,arguments)/2,k=T>uv&&(i?+i.apply(this,arguments):Math.sqrt(f*f+l*l)),N=Math.min(Math.abs(l-f)/2,+r.apply(this,arguments)),S=N,E=N;if(k>uv){var A=un(k/f*Math.sin(T)),C=un(k/l*Math.sin(T));(w-=2*A)>uv?(A*=v?1:-1,x+=A,b-=A):(w=0,x=b=(h+p)/2),(M-=2*C)>uv?(C*=v?1:-1,g+=C,m-=C):(M=0,g=m=(h+p)/2)}var z=l*Math.cos(g),P=l*Math.sin(g),L=f*Math.cos(b),q=f*Math.sin(b);if(N>uv){var U=l*Math.cos(m),R=l*Math.sin(m),D=f*Math.cos(x),O=f*Math.sin(x);if(d<av){var F=w>uv?an(z,P,D,O,U,R,L,q):[L,q],I=z-F[0],Y=P-F[1],B=U-F[0],j=R-F[1],H=1/Math.sin(Math.acos((I*B+Y*j)/(Math.sqrt(I*I+Y*Y)*Math.sqrt(B*B+j*j)))/2),X=Math.sqrt(F[0]*F[0]+F[1]*F[1]);S=Math.min(N,(f-X)/(H-1)),E=Math.min(N,(l-X)/(H+1))}}M>uv?E>uv?(_=cn(D,O,z,P,l,E,v),y=cn(U,R,L,q,l,E,v),c.moveTo(_.cx+_.x01,_.cy+_.y01),E<N?c.arc(_.cx,_.cy,E,Math.atan2(_.y01,_.x01),Math.atan2(y.y01,y.x01),!v):(c.arc(_.cx,_.cy,E,Math.atan2(_.y01,_.x01),Math.atan2(_.y11,_.x11),!v),c.arc(0,0,l,Math.atan2(_.cy+_.y11,_.cx+_.x11),Math.atan2(y.cy+y.y11,y.cx+y.x11),!v),c.arc(y.cx,y.cy,E,Math.atan2(y.y11,y.x11),Math.atan2(y.y01,y.x01),!v))):(c.moveTo(z,P),c.arc(0,0,l,g,m,!v)):c.moveTo(z,P),f>uv&&w>uv?S>uv?(_=cn(L,q,U,R,f,-S,v),y=cn(z,P,D,O,f,-S,v),c.lineTo(_.cx+_.x01,_.cy+_.y01),S<N?c.arc(_.cx,_.cy,S,Math.atan2(_.y01,_.x01),Math.atan2(y.y01,y.x01),!v):(c.arc(_.cx,_.cy,S,Math.atan2(_.y01,_.x01),Math.atan2(_.y11,_.x11),!v),c.arc(0,0,f,Math.atan2(_.cy+_.y11,_.cx+_.x11),Math.atan2(y.cy+y.y11,y.cx+y.x11),v),c.arc(y.cx,y.cy,S,Math.atan2(y.y11,y.x11),Math.atan2(y.y01,y.x01),!v))):c.arc(0,0,f,b,x,v):c.lineTo(L,q)}else c.moveTo(0,0);if(c.closePath(),t)return c=null,t+""||null}var n=tn,e=nn,r=Kt(0),i=null,o=en,u=rn,a=on,c=null;return t.centroid=function(){var t=(+n.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+o.apply(this,arguments)+ +u.apply(this,arguments))/2-av/2;return[Math.cos(r)*t,Math.sin(r)*t]},t.innerRadius=function(e){return arguments.length?(n="function"==typeof e?e:Kt(+e),t):n},t.outerRadius=function(n){return arguments.length?(e="function"==typeof n?n:Kt(+n),t):e},t.cornerRadius=function(n){return arguments.length?(r="function"==typeof n?n:Kt(+n),t):r},t.padRadius=function(n){return arguments.length?(i=null==n?null:"function"==typeof n?n:Kt(+n),t):i},t.startAngle=function(n){return arguments.length?(o="function"==typeof n?n:Kt(+n),t):o},t.endAngle=function(n){return arguments.length?(u="function"==typeof n?n:Kt(+n),t):u},t.padAngle=function(n){return arguments.length?(a="function"==typeof n?n:Kt(+n),t):a},t.context=function(n){return arguments.length?(c=null==n?null:n,t):c},t}function fn(t){this._context=t}function ln(t){return new fn(t)}function hn(t){return t[0]}function pn(t){return t[1]}function dn(){function t(t){var a,c,s,f=t.length,l=!1;for(null==i&&(u=o(s=Tt())),a=0;a<=f;++a)!(a<f&&r(c=t[a],a,t))===l&&((l=!l)?u.lineStart():u.lineEnd()),l&&u.point(+n(c,a,t),+e(c,a,t));if(s)return u=null,s+""||null}var n=hn,e=pn,r=Kt(!0),i=null,o=ln,u=null;return t.x=function(e){return arguments.length?(n="function"==typeof e?e:Kt(+e),t):n},t.y=function(n){return arguments.length?(e="function"==typeof n?n:Kt(+n),t):e},t.defined=function(n){return arguments.length?(r="function"==typeof n?n:Kt(!!n),t):r},t.curve=function(n){return arguments.length?(o=n,null!=i&&(u=o(i)),t):o},t.context=function(n){return arguments.length?(null==n?i=u=null:u=o(i=n),t):i},t}function vn(){function t(t){var n,f,l,h,p,d=t.length,v=!1,_=new Array(d),y=new Array(d);for(null==a&&(s=c(p=Tt())),n=0;n<=d;++n){if(!(n<d&&u(h=t[n],n,t))===v)if(v=!v)f=n,s.areaStart(),s.lineStart();else{for(s.lineEnd(),s.lineStart(),l=n-1;l>=f;--l)s.point(_[l],y[l]);s.lineEnd(),s.areaEnd()}v&&(_[n]=+e(h,n,t),y[n]=+i(h,n,t),s.point(r?+r(h,n,t):_[n],o?+o(h,n,t):y[n]))}if(p)return s=null,p+""||null}function n(){return dn().defined(u).curve(c).context(a)}var e=hn,r=null,i=Kt(0),o=pn,u=Kt(!0),a=null,c=ln,s=null;return t.x=function(n){return arguments.length?(e="function"==typeof n?n:Kt(+n),r=null,t):e},t.x0=function(n){return arguments.length?(e="function"==typeof n?n:Kt(+n),t):e},t.x1=function(n){return arguments.length?(r=null==n?null:"function"==typeof n?n:Kt(+n),t):r},t.y=function(n){return arguments.length?(i="function"==typeof n?n:Kt(+n),o=null,t):i},t.y0=function(n){return arguments.length?(i="function"==typeof n?n:Kt(+n),t):i},t.y1=function(n){return arguments.length?(o=null==n?null:"function"==typeof n?n:Kt(+n),t):o},t.lineX0=t.lineY0=function(){return n().x(e).y(i)},t.lineY1=function(){return n().x(e).y(o)},t.lineX1=function(){return n().x(r).y(i)},t.defined=function(n){return arguments.length?(u="function"==typeof n?n:Kt(!!n),t):u},t.curve=function(n){return arguments.length?(c=n,null!=a&&(s=c(a)),t):c},t.context=function(n){return arguments.length?(null==n?a=s=null:s=c(a=n),t):a},t}function _n(t,n){return n<t?-1:n>t?1:n>=t?0:NaN}function yn(t){return t}function gn(){function t(t){var a,c,s,f,l,h=t.length,p=0,d=new Array(h),v=new Array(h),_=+i.apply(this,arguments),y=Math.min(sv,Math.max(-sv,o.apply(this,arguments)-_)),g=Math.min(Math.abs(y)/h,u.apply(this,arguments)),m=g*(y<0?-1:1);for(a=0;a<h;++a)(l=v[d[a]=a]=+n(t[a],a,t))>0&&(p+=l);for(null!=e?d.sort(function(t,n){return e(v[t],v[n])}):null!=r&&d.sort(function(n,e){return r(t[n],t[e])}),a=0,s=p?(y-h*m)/p:0;a<h;++a,_=f)c=d[a],l=v[c],f=_+(l>0?l*s:0)+m,v[c]={data:t[c],index:a,value:l,startAngle:_,endAngle:f,padAngle:g};return v}var n=yn,e=_n,r=null,i=Kt(0),o=Kt(sv),u=Kt(0);return t.value=function(e){return arguments.length?(n="function"==typeof e?e:Kt(+e),t):n},t.sortValues=function(n){return arguments.length?(e=n,r=null,t):e},t.sort=function(n){return arguments.length?(r=n,e=null,t):r},t.startAngle=function(n){return arguments.length?(i="function"==typeof n?n:Kt(+n),t):i},t.endAngle=function(n){return arguments.length?(o="function"==typeof n?n:Kt(+n),t):o},t.padAngle=function(n){return arguments.length?(u="function"==typeof n?n:Kt(+n),t):u},t}function mn(t){this._curve=t}function xn(t){function n(n){return new mn(t(n))}return n._curve=t,n}function bn(t){var n=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?n(xn(t)):n()._curve},t}function wn(){return bn(dn().curve(fv))}function Mn(){var t=vn().curve(fv),n=t.curve,e=t.lineX0,r=t.lineX1,i=t.lineY0,o=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 bn(e())},delete t.lineX0,t.lineEndAngle=function(){return bn(r())},delete t.lineX1,t.lineInnerRadius=function(){return bn(i())},delete t.lineY0,t.lineOuterRadius=function(){return bn(o())},delete t.lineY1,t.curve=function(t){return arguments.length?n(xn(t)):n()._curve},t}function Tn(){function t(){var t;if(r||(r=t=Tt()),n.apply(this,arguments).draw(r,+e.apply(this,arguments)),t)return r=null,t+""||null}var n=Kt(lv),e=Kt(64),r=null;return t.type=function(e){return arguments.length?(n="function"==typeof e?e:Kt(e),t):n},t.size=function(n){return arguments.length?(e="function"==typeof n?n:Kt(+n),t):e},t.context=function(n){return arguments.length?(r=null==n?null:n,t):r},t}function kn(){}function Nn(t,n,e){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+n)/6,(t._y0+4*t._y1+e)/6)}function Sn(t){this._context=t}function En(t){return new Sn(t)}function An(t){this._context=t}function Cn(t){return new An(t)}function zn(t){this._context=t}function Pn(t){return new zn(t)}function Ln(t,n){this._basis=new Sn(t),this._beta=n}function qn(t,n,e){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-n),t._y2+t._k*(t._y1-e),t._x2,t._y2)}function Un(t,n){this._context=t,this._k=(1-n)/6}function Rn(t,n){this._context=t,this._k=(1-n)/6}function Dn(t,n){this._context=t,this._k=(1-n)/6}function On(t,n,e){var r=t._x1,i=t._y1,o=t._x2,u=t._y2;if(t._l01_a>uv){var a=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*a-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*a-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>uv){var s=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,f=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*s+t._x1*t._l23_2a-n*t._l12_2a)/f,u=(u*s+t._y1*t._l23_2a-e*t._l12_2a)/f}t._context.bezierCurveTo(r,i,o,u,t._x2,t._y2)}function Fn(t,n){this._context=t,this._alpha=n}function In(t,n){this._context=t,this._alpha=n}function Yn(t,n){this._context=t,this._alpha=n}function Bn(t){this._context=t}function jn(t){return new Bn(t)}function Hn(t){return t<0?-1:1}function Xn(t,n,e){var r=t._x1-t._x0,i=n-t._x1,o=(t._y1-t._y0)/(r||i<0&&-0),u=(e-t._y1)/(i||r<0&&-0),a=(o*i+u*r)/(r+i);return(Hn(o)+Hn(u))*Math.min(Math.abs(o),Math.abs(u),.5*Math.abs(a))||0}function Vn(t,n){var e=t._x1-t._x0;return e?(3*(t._y1-t._y0)/e-n)/2:n}function Wn(t,n,e){var r=t._x0,i=t._y0,o=t._x1,u=t._y1,a=(o-r)/3;t._context.bezierCurveTo(r+a,i+a*n,o-a,u-a*e,o,u)}function $n(t){this._context=t}function Zn(t){this._context=new Gn(t)}function Gn(t){this._context=t}function Jn(t){return new $n(t)}function Qn(t){return new Zn(t)}function Kn(t){this._context=t}function te(t){var n,e,r=t.length-1,i=new Array(r),o=new Array(r),u=new Array(r);for(i[0]=0,o[0]=2,u[0]=t[0]+2*t[1],n=1;n<r-1;++n)i[n]=1,o[n]=4,u[n]=4*t[n]+2*t[n+1];for(i[r-1]=2,o[r-1]=7,u[r-1]=8*t[r-1]+t[r],n=1;n<r;++n)e=i[n]/o[n-1],o[n]-=e,u[n]-=e*u[n-1];for(i[r-1]=u[r-1]/o[r-1],n=r-2;n>=0;--n)i[n]=(u[n]-i[n+1])/o[n];for(o[r-1]=(t[r]+i[r-1])/2,n=0;n<r-1;++n)o[n]=2*t[n+1]-i[n+1];return[i,o]}function ne(t){return new Kn(t)}function ee(t,n){this._context=t,this._t=n}function re(t){return new ee(t,.5)}function ie(t){return new ee(t,0)}function oe(t){return new ee(t,1)}function ue(t,n){if((r=t.length)>1)for(var e,r,i=1,o=t[n[0]],u=o.length;i<r;++i){e=o,o=t[n[i]];for(var a=0;a<u;++a)o[a][1]+=o[a][0]=isNaN(e[a][1])?e[a][0]:e[a][1]}}function ae(t){for(var n=t.length,e=new Array(n);--n>=0;)e[n]=n;return e}function ce(t,n){return t[n]}function se(){function t(t){var o,u,a=n.apply(this,arguments),c=t.length,s=a.length,f=new Array(s);for(o=0;o<s;++o){for(var l,h=a[o],p=f[o]=new Array(c),d=0;d<c;++d)p[d]=l=[0,+i(t[d],h,d,t)],l.data=t[d];p.key=h}for(o=0,u=e(f);o<s;++o)f[u[o]].index=o;return r(f,u),f}var n=Kt([]),e=ae,r=ue,i=ce;return t.keys=function(e){return arguments.length?(n="function"==typeof e?e:Kt(Dv.call(e)),t):n},t.value=function(n){return arguments.length?(i="function"==typeof n?n:Kt(+n),t):i},t.order=function(n){return arguments.length?(e=null==n?ae:"function"==typeof n?n:Kt(Dv.call(n)),t):e},t.offset=function(n){return arguments.length?(r=null==n?ue:n,t):r},t}function fe(t,n){if((r=t.length)>0){for(var e,r,i,o=0,u=t[0].length;o<u;++o){for(i=e=0;e<r;++e)i+=t[e][o][1]||0;if(i)for(e=0;e<r;++e)t[e][o][1]/=i}ue(t,n)}}function le(t,n){if((e=t.length)>0){for(var e,r=0,i=t[n[0]],o=i.length;r<o;++r){for(var u=0,a=0;u<e;++u)a+=t[u][r][1]||0;i[r][1]+=i[r][0]=-a/2}ue(t,n)}}function he(t,n){if((i=t.length)>0&&(r=(e=t[n[0]]).length)>0){for(var e,r,i,o=0,u=1;u<r;++u){for(var a=0,c=0,s=0;a<i;++a){for(var f=t[n[a]],l=f[u][1]||0,h=f[u-1][1]||0,p=(l-h)/2,d=0;d<a;++d){var v=t[n[d]],_=v[u][1]||0,y=v[u-1][1]||0;p+=_-y}c+=l,s+=p*l}e[u-1][1]+=e[u-1][0]=o,c&&(o-=s/c)}e[u-1][1]+=e[u-1][0]=o,ue(t,n)}}function pe(t){var n=t.map(de);return ae(t).sort(function(t,e){return n[t]-n[e]})}function de(t){for(var n,e=0,r=-1,i=t.length;++r<i;)(n=+t[r][1])&&(e+=n);return e}function ve(t){return pe(t).reverse()}function _e(t){var n,e,r=t.length,i=t.map(de),o=ae(t).sort(function(t,n){return i[n]-i[t]}),u=0,a=0,c=[],s=[];for(n=0;n<r;++n)e=o[n],u<a?(u+=i[e],c.push(e)):(a+=i[e],s.push(e));return s.reverse().concat(c)}function ye(t){return ae(t).reverse()}function ge(t,n,e){t.prototype=n.prototype=e,e.constructor=t}function me(t,n){var e=Object.create(t.prototype);for(var r in n)e[r]=n[r];return e}function xe(){}function be(t){var n;return t=(t+"").trim().toLowerCase(),(n=Iv.exec(t))?(n=parseInt(n[1],16),new Ne(n>>8&15|n>>4&240,n>>4&15|240&n,(15&n)<<4|15&n,1)):(n=Yv.exec(t))?we(parseInt(n[1],16)):(n=Bv.exec(t))?new Ne(n[1],n[2],n[3],1):(n=jv.exec(t))?new Ne(255*n[1]/100,255*n[2]/100,255*n[3]/100,1):(n=Hv.exec(t))?Me(n[1],n[2],n[3],n[4]):(n=Xv.exec(t))?Me(255*n[1]/100,255*n[2]/100,255*n[3]/100,n[4]):(n=Vv.exec(t))?Se(n[1],n[2]/100,n[3]/100,1):(n=Wv.exec(t))?Se(n[1],n[2]/100,n[3]/100,n[4]):$v.hasOwnProperty(t)?we($v[t]):"transparent"===t?new Ne(NaN,NaN,NaN,0):null}function we(t){return new Ne(t>>16&255,t>>8&255,255&t,1)}function Me(t,n,e,r){return r<=0&&(t=n=e=NaN),new Ne(t,n,e,r)}function Te(t){return t instanceof xe||(t=be(t)),t?(t=t.rgb(),new Ne(t.r,t.g,t.b,t.opacity)):new Ne}function ke(t,n,e,r){return 1===arguments.length?Te(t):new Ne(t,n,e,null==r?1:r)}function Ne(t,n,e,r){this.r=+t,this.g=+n,this.b=+e,this.opacity=+r}function Se(t,n,e,r){return r<=0?t=n=e=NaN:e<=0||e>=1?t=n=NaN:n<=0&&(t=NaN),new Ce(t,n,e,r)}function Ee(t){if(t instanceof Ce)return new Ce(t.h,t.s,t.l,t.opacity);if(t instanceof xe||(t=be(t)),!t)return new Ce;if(t instanceof Ce)return t;t=t.rgb();var n=t.r/255,e=t.g/255,r=t.b/255,i=Math.min(n,e,r),o=Math.max(n,e,r),u=NaN,a=o-i,c=(o+i)/2;return a?(u=n===o?(e-r)/a+6*(e<r):e===o?(r-n)/a+2:(n-e)/a+4,a/=c<.5?o+i:2-o-i,u*=60):a=c>0&&c<1?0:u,new Ce(u,a,c,t.opacity)}function Ae(t,n,e,r){return 1===arguments.length?Ee(t):new Ce(t,n,e,null==r?1:r)}function Ce(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function ze(t,n,e){return 255*(t<60?n+(e-n)*t/60:t<180?e:t<240?n+(e-n)*(240-t)/60:n)}function Pe(t){if(t instanceof qe)return new qe(t.l,t.a,t.b,t.opacity);if(t instanceof Ye){var n=t.h*Zv;return new qe(t.l,Math.cos(n)*t.c,Math.sin(n)*t.c,t.opacity)}t instanceof Ne||(t=Te(t));var e=Oe(t.r),r=Oe(t.g),i=Oe(t.b),o=Ue((.4124564*e+.3575761*r+.1804375*i)/Qv),u=Ue((.2126729*e+.7151522*r+.072175*i)/Kv),a=Ue((.0193339*e+.119192*r+.9503041*i)/t_);return new qe(116*u-16,500*(o-u),200*(u-a),t.opacity)}function Le(t,n,e,r){return 1===arguments.length?Pe(t):new qe(t,n,e,null==r?1:r)}function qe(t,n,e,r){this.l=+t,this.a=+n,this.b=+e,this.opacity=+r}function Ue(t){return t>i_?Math.pow(t,1/3):t/r_+n_}function Re(t){return t>e_?t*t*t:r_*(t-n_)}function De(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Oe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Fe(t){if(t instanceof Ye)return new Ye(t.h,t.c,t.l,t.opacity);t instanceof qe||(t=Pe(t));var n=Math.atan2(t.b,t.a)*Gv;return new Ye(n<0?n+360:n,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Ie(t,n,e,r){return 1===arguments.length?Fe(t):new Ye(t,n,e,null==r?1:r)}function Ye(t,n,e,r){this.h=+t,this.c=+n,this.l=+e,this.opacity=+r}function Be(t){if(t instanceof He)return new He(t.h,t.s,t.l,t.opacity);t instanceof Ne||(t=Te(t));var n=t.r/255,e=t.g/255,r=t.b/255,i=(h_*r+f_*n-l_*e)/(h_+f_-l_),o=r-i,u=(s_*(e-i)-a_*o)/c_,a=Math.sqrt(u*u+o*o)/(s_*i*(1-i)),c=a?Math.atan2(u,o)*Gv-120:NaN;return new He(c<0?c+360:c,a,i,t.opacity)}function je(t,n,e,r){return 1===arguments.length?Be(t):new He(t,n,e,null==r?1:r)}function He(t,n,e,r){this.h=+t,this.s=+n,this.l=+e,this.opacity=+r}function Xe(t,n,e,r,i){var o=t*t,u=o*t;return((1-3*t+3*o-u)*n+(4-6*o+3*u)*e+(1+3*t+3*o-3*u)*r+u*i)/6}function Ve(t){var n=t.length-1;return function(e){var r=e<=0?e=0:e>=1?(e=1,n-1):Math.floor(e*n),i=t[r],o=t[r+1],u=r>0?t[r-1]:2*i-o,a=r<n-1?t[r+2]:2*o-i;return Xe((e-r/n)*n,u,i,o,a)}}function We(t){var n=t.length;return function(e){var r=Math.floor(((e%=1)<0?++e:e)*n),i=t[(r+n-1)%n],o=t[r%n],u=t[(r+1)%n],a=t[(r+2)%n];return Xe((e-r/n)*n,i,o,u,a)}}function $e(t){return function(){return t}}function Ze(t,n){return function(e){return t+e*n}}function Ge(t,n,e){return t=Math.pow(t,e),n=Math.pow(n,e)-t,e=1/e,function(r){return Math.pow(t+r*n,e)}}function Je(t,n){var e=n-t;return e?Ze(t,e>180||e<-180?e-360*Math.round(e/360):e):$e(isNaN(t)?n:t)}function Qe(t){return 1===(t=+t)?Ke:function(n,e){return e-n?Ge(n,e,t):$e(isNaN(n)?e:n)}}function Ke(t,n){var e=n-t;return e?Ze(t,e):$e(isNaN(t)?n:t)}function tr(t){return function(n){var e,r,i=n.length,o=new Array(i),u=new Array(i),a=new Array(i);for(e=0;e<i;++e)r=ke(n[e]),o[e]=r.r||0,u[e]=r.g||0,a[e]=r.b||0;return o=t(o),u=t(u),a=t(a),r.opacity=1,function(t){return r.r=o(t),r.g=u(t),r.b=a(t),r+""}}}function nr(t,n){var e,r=n?n.length:0,i=t?Math.min(r,t.length):0,o=new Array(r),u=new Array(r);for(e=0;e<i;++e)o[e]=ar(t[e],n[e]);
+for(;e<r;++e)u[e]=n[e];return function(t){for(e=0;e<i;++e)u[e]=o[e](t);return u}}function er(t,n){return t=+t,n-=t,function(e){return t+n*e}}function rr(t,n){var e,r={},i={};null!==t&&"object"==typeof t||(t={}),null!==n&&"object"==typeof n||(n={});for(e in n)e in t?r[e]=ar(t[e],n[e]):i[e]=n[e];return function(t){for(e in r)i[e]=r[e](t);return i}}function ir(t){return function(){return t}}function or(t){return function(n){return t(n)+""}}function ur(t,n){var e,r,i,o=x_.lastIndex=b_.lastIndex=0,u=-1,a=[],c=[];for(t+="",n+="";(e=x_.exec(t))&&(r=b_.exec(n));)(i=r.index)>o&&(i=n.slice(o,i),a[u]?a[u]+=i:a[++u]=i),(e=e[0])===(r=r[0])?a[u]?a[u]+=r:a[++u]=r:(a[++u]=null,c.push({i:u,x:er(e,r)})),o=b_.lastIndex;return o<n.length&&(i=n.slice(o),a[u]?a[u]+=i:a[++u]=i),a.length<2?c[0]?or(c[0].x):ir(n):(n=c.length,function(t){for(var e,r=0;r<n;++r)a[(e=c[r]).i]=e.x(t);return a.join("")})}function ar(t,n){var e,r=typeof n;return null==n||"boolean"===r?$e(n):("number"===r?er:"string"===r?(e=be(n))?(n=e,y_):ur:n instanceof be?y_:Array.isArray(n)?nr:rr)(t,n)}function cr(t,n){return t=+t,n-=t,function(e){return Math.round(t+n*e)}}function sr(t,n,e,r,i,o){var u,a,c;return(u=Math.sqrt(t*t+n*n))&&(t/=u,n/=u),(c=t*e+n*r)&&(e-=t*c,r-=n*c),(a=Math.sqrt(e*e+r*r))&&(e/=a,r/=a,c/=a),t*r<n*e&&(t=-t,n=-n,c=-c,u=-u),{translateX:i,translateY:o,rotate:Math.atan2(n,t)*w_,skewX:Math.atan(c)*w_,scaleX:u,scaleY:a}}function fr(t){if("none"===t)return M_;p_||(p_=document.createElement("DIV"),d_=document.documentElement,v_=document.defaultView),p_.style.transform=t,t=v_.getComputedStyle(d_.appendChild(p_),null).getPropertyValue("transform"),d_.removeChild(p_);var n=t.slice(7,-1).split(",");return sr(+n[0],+n[1],+n[2],+n[3],+n[4],+n[5])}function lr(t){__||(__=document.createElementNS("http://www.w3.org/2000/svg","g")),__.setAttribute("transform",null==t?"":t);var n=__.transform.baseVal.consolidate().matrix;return sr(n.a,n.b,n.c,n.d,n.e,n.f)}function hr(t,n,e,r){function i(t){return t.length?t.pop()+" ":""}function o(t,r,i,o,u,a){if(t!==i||r!==o){var c=u.push("translate(",null,n,null,e);a.push({i:c-4,x:er(t,i)},{i:c-2,x:er(r,o)})}else(i||o)&&u.push("translate("+i+n+o+e)}function u(t,n,e,o){t!==n?(t-n>180?n+=360:n-t>180&&(t+=360),o.push({i:e.push(i(e)+"rotate(",null,r)-2,x:er(t,n)})):n&&e.push(i(e)+"rotate("+n+r)}function a(t,n,e,o){t!==n?o.push({i:e.push(i(e)+"skewX(",null,r)-2,x:er(t,n)}):n&&e.push(i(e)+"skewX("+n+r)}function c(t,n,e,r,o,u){if(t!==e||n!==r){var a=o.push(i(o)+"scale(",null,",",null,")");u.push({i:a-4,x:er(t,e)},{i:a-2,x:er(n,r)})}else 1===e&&1===r||o.push(i(o)+"scale("+e+","+r+")")}return function(n,e){var r=[],i=[];return n=t(n),e=t(e),o(n.translateX,n.translateY,e.translateX,e.translateY,r,i),u(n.rotate,e.rotate,r,i),a(n.skewX,e.skewX,r,i),c(n.scaleX,n.scaleY,e.scaleX,e.scaleY,r,i),n=e=null,function(t){for(var n,e=-1,o=i.length;++e<o;)r[(n=i[e]).i]=n.x(t);return r.join("")}}}function pr(t){return((t=Math.exp(t))+1/t)/2}function dr(t){return((t=Math.exp(t))-1/t)/2}function vr(t){return((t=Math.exp(2*t))-1)/(t+1)}function _r(t,n){var e,r,i=t[0],o=t[1],u=t[2],a=n[0],c=n[1],s=n[2],f=a-i,l=c-o,h=f*f+l*l;if(h<A_)r=Math.log(s/u)/N_,e=function(t){return[i+t*f,o+t*l,u*Math.exp(N_*t*r)]};else{var p=Math.sqrt(h),d=(s*s-u*u+E_*h)/(2*u*S_*p),v=(s*s-u*u-E_*h)/(2*s*S_*p),_=Math.log(Math.sqrt(d*d+1)-d),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-_)/N_,e=function(t){var n=t*r,e=pr(_),a=u/(S_*p)*(e*vr(N_*n+_)-dr(_));return[i+a*f,o+a*l,u*e/pr(N_*n+_)]}}return e.duration=1e3*r,e}function yr(t){return function(n,e){var r=t((n=Ae(n)).h,(e=Ae(e)).h),i=Ke(n.s,e.s),o=Ke(n.l,e.l),u=Ke(n.opacity,e.opacity);return function(t){return n.h=r(t),n.s=i(t),n.l=o(t),n.opacity=u(t),n+""}}}function gr(t,n){var e=Ke((t=Le(t)).l,(n=Le(n)).l),r=Ke(t.a,n.a),i=Ke(t.b,n.b),o=Ke(t.opacity,n.opacity);return function(n){return t.l=e(n),t.a=r(n),t.b=i(n),t.opacity=o(n),t+""}}function mr(t){return function(n,e){var r=t((n=Ie(n)).h,(e=Ie(e)).h),i=Ke(n.c,e.c),o=Ke(n.l,e.l),u=Ke(n.opacity,e.opacity);return function(t){return n.h=r(t),n.c=i(t),n.l=o(t),n.opacity=u(t),n+""}}}function xr(t){return function n(e){function r(n,r){var i=t((n=je(n)).h,(r=je(r)).h),o=Ke(n.s,r.s),u=Ke(n.l,r.l),a=Ke(n.opacity,r.opacity);return function(t){return n.h=i(t),n.s=o(t),n.l=u(Math.pow(t,e)),n.opacity=a(t),n+""}}return e=+e,r.gamma=n,r}(1)}function br(t,n){for(var e=new Array(n),r=0;r<n;++r)e[r]=t(r/(n-1));return e}function wr(){for(var t,n=0,e=arguments.length,r={};n<e;++n){if(!(t=arguments[n]+"")||t in r)throw new Error("illegal type: "+t);r[t]=[]}return new Mr(r)}function Mr(t){this._=t}function Tr(t,n){return t.trim().split(/^|\s+/).map(function(t){var e="",r=t.indexOf(".");if(r>=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})}function kr(t,n){for(var e,r=0,i=t.length;r<i;++r)if((e=t[r]).name===n)return e.value}function Nr(t,n,e){for(var r=0,i=t.length;r<i;++r)if(t[r].name===n){t[r]=R_,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=e&&t.push({name:n,value:e}),t}function Sr(t){return new Function("d","return {"+t.map(function(t,n){return JSON.stringify(t)+": d["+n+"]"}).join(",")+"}")}function Er(t,n){var e=Sr(t);return function(r,i){return n(e(r),i,t)}}function Ar(t){var n=Object.create(null),e=[];return t.forEach(function(t){for(var r in t)r in n||e.push(n[r]=r)}),e}function Cr(t){function n(t,n){var r,i,o=e(t,function(t,e){return r?r(t,e-1):(i=t,void(r=n?Er(t,n):Sr(t)))});return o.columns=i,o}function e(t,n){function e(){if(f>=s)return u;if(i)return i=!1,o;var n,e=f;if(34===t.charCodeAt(e)){for(var r=e;r++<s;)if(34===t.charCodeAt(r)){if(34!==t.charCodeAt(r+1))break;++r}return f=r+2,n=t.charCodeAt(r+1),13===n?(i=!0,10===t.charCodeAt(r+2)&&++f):10===n&&(i=!0),t.slice(e+1,r).replace(/""/g,'"')}for(;f<s;){var a=1;if(n=t.charCodeAt(f++),10===n)i=!0;else if(13===n)i=!0,10===t.charCodeAt(f)&&(++f,++a);else if(n!==c)continue;return t.slice(e,f-a)}return t.slice(e)}for(var r,i,o={},u={},a=[],s=t.length,f=0,l=0;(r=e())!==u;){for(var h=[];r!==o&&r!==u;)h.push(r),r=e();n&&null==(h=n(h,l++))||a.push(h)}return a}function r(n,e){return null==e&&(e=Ar(n)),[e.map(u).join(t)].concat(n.map(function(n){return e.map(function(t){return u(n[t])}).join(t)})).join("\n")}function i(t){return t.map(o).join("\n")}function o(n){return n.map(u).join(t)}function u(t){return null==t?"":a.test(t+="")?'"'+t.replace(/\"/g,'""')+'"':t}var a=new RegExp('["'+t+"\n]"),c=t.charCodeAt(0);return{parse:n,parseRows:e,format:r,formatRows:i}}function zr(t,n){function e(t){var n,e=s.status;if(!e&&Lr(s)||e>=200&&e<300||304===e){if(o)try{n=o.call(r,s)}catch(i){return void a.call("error",r,i)}else n=s;a.call("load",r,n)}else a.call("error",r,t)}var r,i,o,u,a=wr("beforesend","progress","load","error"),c=L(),s=new XMLHttpRequest,f=null,l=null,h=0;return"undefined"==typeof XDomainRequest||"withCredentials"in s||!/^(http(s)?:)?\/\//.test(t)||(s=new XDomainRequest),"onload"in s?s.onload=s.onerror=s.ontimeout=e:s.onreadystatechange=function(t){s.readyState>3&&e(t)},s.onprogress=function(t){a.call("progress",r,t)},r={header:function(t,n){return t=(t+"").toLowerCase(),arguments.length<2?c.get(t):(null==n?c.remove(t):c.set(t,n+""),r)},mimeType:function(t){return arguments.length?(i=null==t?null:t+"",r):i},responseType:function(t){return arguments.length?(u=t,r):u},timeout:function(t){return arguments.length?(h=+t,r):h},user:function(t){return arguments.length<1?f:(f=null==t?null:t+"",r)},password:function(t){return arguments.length<1?l:(l=null==t?null:t+"",r)},response:function(t){return o=t,r},get:function(t,n){return r.send("GET",t,n)},post:function(t,n){return r.send("POST",t,n)},send:function(n,e,o){return o||"function"!=typeof e||(o=e,e=null),o&&1===o.length&&(o=Pr(o)),s.open(n,t,!0,f,l),null==i||c.has("accept")||c.set("accept",i+",*/*"),s.setRequestHeader&&c.each(function(t,n){s.setRequestHeader(n,t)}),null!=i&&s.overrideMimeType&&s.overrideMimeType(i),null!=u&&(s.responseType=u),h>0&&(s.timeout=h),o&&r.on("error",o).on("load",function(t){o(null,t)}),a.call("beforesend",r,s),s.send(null==e?null:e),r},abort:function(){return s.abort(),r},on:function(){var t=a.on.apply(a,arguments);return t===a?r:t}},n?r.get(n):r}function Pr(t){return function(n,e){t(null==n?e:null)}}function Lr(t){var n=t.responseType;return n&&"text"!==n?t.response:t.responseText}function qr(t,n){return function(e,r){var i=zr(e).mimeType(t).response(n);return r?i.get(r):i}}function Ur(t,n){return function(e,r,i){arguments.length<3&&(i=r,r=null);var o=zr(e).mimeType(t);return o.row=function(t){return arguments.length?o.response(Rr(n,r=t)):r},o.row(r),i?o.get(i):o}}function Rr(t,n){return function(e){return t(e.responseText,n)}}function Dr(){return uy||(sy(Or),uy=cy.now()+ay)}function Or(){uy=0}function Fr(){this._call=this._time=this._next=null}function Ir(t,n,e){var r=new Fr;return r.restart(t,n,e),r}function Yr(){Dr(),++ny;for(var t,n=D_;n;)(t=uy-n._time)>=0&&n._call.call(null,t),n=n._next;--ny}function Br(t){uy=(oy=t||cy.now())+ay,ny=ey=0;try{Yr()}finally{ny=0,Hr(),uy=0}}function jr(){var t=cy.now(),n=t-oy;n>iy&&(ay-=n,oy=t)}function Hr(){for(var t,n,e=D_,r=1/0;e;)e._call?(r>e._time&&(r=e._time),t=e,e=e._next):(n=e._next,e._next=null,e=t?t._next=n:D_=n);O_=t,Xr(r)}function Xr(t){if(!ny){ey&&(ey=clearTimeout(ey));var n=t-uy;n>24?(t<1/0&&(ey=setTimeout(Br,n)),ry&&(ry=clearInterval(ry))):(ry||(ry=setInterval(jr,iy)),ny=1,sy(Br))}}function Vr(t,n,e){var r=new Fr;return n=null==n?0:+n,r.restart(function(e){r.stop(),t(e+n)},n,e),r}function Wr(t,n,e){var r=new Fr,i=n;return null==n?(r.restart(t,n,e),r):(n=+n,e=null==e?Dr():+e,r.restart(function o(u){u+=i,r.restart(o,i+=n,e),t(u)},n,e),r)}function $r(t,n,e,r){function i(n){return t(n=new Date((+n))),n}return i.floor=i,i.ceil=function(e){return t(e=new Date(e-1)),n(e,1),t(e),e},i.round=function(t){var n=i(t),e=i.ceil(t);return t-n<e-t?n:e},i.offset=function(t,e){return n(t=new Date((+t)),null==e?1:Math.floor(e)),t},i.range=function(e,r,o){var u=[];if(e=i.ceil(e),o=null==o?1:Math.floor(o),!(e<r&&o>0))return u;do u.push(new Date((+e)));while(n(e,o),t(e),e<r);return u},i.filter=function(e){return $r(function(n){for(;t(n),!e(n);)n.setTime(n-1)},function(t,r){for(;--r>=0;)for(;n(t,1),!e(t););})},e&&(i.count=function(n,r){return fy.setTime(+n),ly.setTime(+r),t(fy),t(ly),Math.floor(e(fy,ly))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(n){return r(n)%t===0}:function(n){return i.count(0,n)%t===0}):i:null}),i}function Zr(t){return $r(function(n){n.setDate(n.getDate()-(n.getDay()+7-t)%7),n.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+7*n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*vy)/gy})}function Gr(t){return $r(function(n){n.setUTCDate(n.getUTCDate()-(n.getUTCDay()+7-t)%7),n.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+7*n)},function(t,n){return(n-t)/gy})}function Jr(t,n){if((e=(t=n?t.toExponential(n-1):t.toExponential()).indexOf("e"))<0)return null;var e,r=t.slice(0,e);return[r.length>1?r[0]+r.slice(2):r,+t.slice(e+1)]}function Qr(t){return t=Jr(Math.abs(t)),t?t[1]:NaN}function Kr(t,n){return function(e,r){for(var i=e.length,o=[],u=0,a=t[0],c=0;i>0&&a>0&&(c+a+1>r&&(a=Math.max(1,r-c)),o.push(e.substring(i-=a,i+a)),!((c+=a+1)>r));)a=t[u=(u+1)%t.length];return o.reverse().join(n)}}function ti(t,n){t=t.toPrecision(n);t:for(var e,r=t.length,i=1,o=-1;i<r;++i)switch(t[i]){case".":o=e=i;break;case"0":0===o&&(o=i),e=i;break;case"e":break t;default:o>0&&(o=0)}return o>0?t.slice(0,o)+t.slice(e+1):t}function ni(t,n){var e=Jr(t,n);if(!e)return t+"";var r=e[0],i=e[1],o=i-(dg=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,u=r.length;return o===u?r:o>u?r+new Array(o-u+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Jr(t,Math.max(0,n+o-1))[0]}function ei(t,n){var e=Jr(t,n);if(!e)return t+"";var r=e[0],i=e[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")}function ri(t){return new ii(t)}function ii(t){if(!(n=yg.exec(t)))throw new Error("invalid format: "+t);var n,e=n[1]||" ",r=n[2]||">",i=n[3]||"-",o=n[4]||"",u=!!n[5],a=n[6]&&+n[6],c=!!n[7],s=n[8]&&+n[8].slice(1),f=n[9]||"";"n"===f?(c=!0,f="g"):_g[f]||(f=""),(u||"0"===e&&"="===r)&&(u=!0,e="0",r="="),this.fill=e,this.align=r,this.sign=i,this.symbol=o,this.zero=u,this.width=a,this.comma=c,this.precision=s,this.type=f}function oi(t){return t}function ui(t){function n(t){function n(t){var n,i,c,g=d,m=v;if("c"===p)m=_(t)+m,t="";else{t=+t;var x=(t<0||1/t<0)&&(t*=-1,!0);if(t=_(t,h),x)for(n=-1,i=t.length,x=!1;++n<i;)if(c=t.charCodeAt(n),48<c&&c<58||"x"===p&&96<c&&c<103||"X"===p&&64<c&&c<71){x=!0;break}if(g=(x?"("===a?a:"-":"-"===a||"("===a?"":a)+g,m=m+("s"===p?mg[8+dg/3]:"")+(x&&"("===a?")":""),y)for(n=-1,i=t.length;++n<i;)if(c=t.charCodeAt(n),48>c||c>57){m=(46===c?o+t.slice(n+1):t.slice(n))+m,t=t.slice(0,n);break}}l&&!s&&(t=r(t,1/0));var b=g.length+t.length+m.length,w=b<f?new Array(f-b+1).join(e):"";switch(l&&s&&(t=r(w+t,w.length?f-m.length:1/0),w=""),u){case"<":return g+t+m+w;case"=":return g+w+t+m;case"^":return w.slice(0,b=w.length>>1)+g+t+m+w.slice(b)}return w+g+t+m}t=ri(t);var e=t.fill,u=t.align,a=t.sign,c=t.symbol,s=t.zero,f=t.width,l=t.comma,h=t.precision,p=t.type,d="$"===c?i[0]:"#"===c&&/[boxX]/.test(p)?"0"+p.toLowerCase():"",v="$"===c?i[1]:/[%p]/.test(p)?"%":"",_=_g[p],y=!p||/[defgprs%]/.test(p);return h=null==h?p?6:12:/[gprs]/.test(p)?Math.max(1,Math.min(21,h)):Math.max(0,Math.min(20,h)),n.toString=function(){return t+""},n}function e(t,e){var r=n((t=ri(t),t.type="f",t)),i=3*Math.max(-8,Math.min(8,Math.floor(Qr(e)/3))),o=Math.pow(10,-i),u=mg[8+i/3];return function(t){return r(o*t)+u}}var r=t.grouping&&t.thousands?Kr(t.grouping,t.thousands):oi,i=t.currency,o=t.decimal;return{format:n,formatPrefix:e}}function ai(n){return gg=ui(n),t.format=gg.format,t.formatPrefix=gg.formatPrefix,gg}function ci(t){return Math.max(0,-Qr(Math.abs(t)))}function si(t,n){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Qr(n)/3)))-Qr(Math.abs(t)))}function fi(t,n){return t=Math.abs(t),n=Math.abs(n)-t,Math.max(0,Qr(n)-Qr(t))+1}function li(t){if(0<=t.y&&t.y<100){var n=new Date((-1),t.m,t.d,t.H,t.M,t.S,t.L);return n.setFullYear(t.y),n}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function hi(t){if(0<=t.y&&t.y<100){var n=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return n.setUTCFullYear(t.y),n}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function pi(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}function di(t){function n(t,n){return function(e){var r,i,o,u=[],a=-1,c=0,s=t.length;for(e instanceof Date||(e=new Date((+e)));++a<s;)37===t.charCodeAt(a)&&(u.push(t.slice(c,a)),null!=(i=bg[r=t.charAt(++a)])?r=t.charAt(++a):i="e"===r?" ":"0",(o=n[r])&&(r=o(e,i)),u.push(r),c=a+1);return u.push(t.slice(c,a)),u.join("")}}function e(t,n){return function(e){var i=pi(1900),o=r(i,t,e+="",0);if(o!=e.length)return null;if("p"in i&&(i.H=i.H%12+12*i.p),"W"in i||"U"in i){"w"in i||(i.w="W"in i?1:0);var u="Z"in i?hi(pi(i.y)).getUTCDay():n(pi(i.y)).getDay();i.m=0,i.d="W"in i?(i.w+6)%7+7*i.W-(u+5)%7:i.w+7*i.U-(u+6)%7}return"Z"in i?(i.H+=i.Z/100|0,i.M+=i.Z%100,hi(i)):n(i)}}function r(t,n,e,r){for(var i,o,u=0,a=n.length,c=e.length;u<a;){if(r>=c)return-1;if(i=n.charCodeAt(u++),37===i){if(i=n.charAt(u++),o=B[i in bg?n.charAt(u++):i],!o||(r=o(t,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function i(t,n,e){var r=C.exec(n.slice(e));return r?(t.p=z[r[0].toLowerCase()],e+r[0].length):-1}function o(t,n,e){var r=q.exec(n.slice(e));return r?(t.w=U[r[0].toLowerCase()],e+r[0].length):-1}function u(t,n,e){var r=P.exec(n.slice(e));return r?(t.w=L[r[0].toLowerCase()],e+r[0].length):-1}function a(t,n,e){var r=O.exec(n.slice(e));return r?(t.m=F[r[0].toLowerCase()],e+r[0].length):-1}function c(t,n,e){var r=R.exec(n.slice(e));return r?(t.m=D[r[0].toLowerCase()],e+r[0].length):-1}function s(t,n,e){return r(t,w,n,e)}function f(t,n,e){return r(t,M,n,e)}function l(t,n,e){return r(t,T,n,e)}function h(t){return S[t.getDay()]}function p(t){return N[t.getDay()]}function d(t){return A[t.getMonth()]}function v(t){return E[t.getMonth()]}function _(t){return k[+(t.getHours()>=12)]}function y(t){return S[t.getUTCDay()]}function g(t){return N[t.getUTCDay()]}function m(t){return A[t.getUTCMonth()]}function x(t){return E[t.getUTCMonth()]}function b(t){return k[+(t.getUTCHours()>=12)]}var w=t.dateTime,M=t.date,T=t.time,k=t.periods,N=t.days,S=t.shortDays,E=t.months,A=t.shortMonths,C=yi(k),z=gi(k),P=yi(N),L=gi(N),q=yi(S),U=gi(S),R=yi(E),D=gi(E),O=yi(A),F=gi(A),I={a:h,A:p,b:d,B:v,c:null,d:Li,e:Li,H:qi,I:Ui,j:Ri,L:Di,m:Oi,M:Fi,p:_,S:Ii,U:Yi,w:Bi,W:ji,x:null,X:null,y:Hi,Y:Xi,Z:Vi,"%":ao},Y={a:y,A:g,b:m,B:x,c:null,d:Wi,e:Wi,H:$i,I:Zi,j:Gi,L:Ji,m:Qi,M:Ki,p:b,S:to,U:no,w:eo,W:ro,x:null,X:null,y:io,Y:oo,Z:uo,"%":ao},B={a:o,A:u,b:a,B:c,c:s,d:Ni,e:Ni,H:Ei,I:Ei,j:Si,L:zi,m:ki,M:Ai,p:i,S:Ci,U:xi,w:mi,W:bi,x:f,X:l,y:Mi,Y:wi,Z:Ti,"%":Pi};return I.x=n(M,I),I.X=n(T,I),I.c=n(w,I),Y.x=n(M,Y),Y.X=n(T,Y),Y.c=n(w,Y),{format:function(t){var e=n(t+="",I);return e.toString=function(){return t},e},parse:function(t){var n=e(t+="",li);return n.toString=function(){return t},n},utcFormat:function(t){var e=n(t+="",Y);return e.toString=function(){return t},e},utcParse:function(t){var n=e(t,hi);return n.toString=function(){return t},n}}}function vi(t,n,e){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o<e?new Array(e-o+1).join(n)+i:i)}function _i(t){return t.replace(Tg,"\\$&")}function yi(t){return new RegExp("^(?:"+t.map(_i).join("|")+")","i")}function gi(t){for(var n={},e=-1,r=t.length;++e<r;)n[t[e].toLowerCase()]=e;return n}function mi(t,n,e){var r=wg.exec(n.slice(e,e+1));return r?(t.w=+r[0],e+r[0].length):-1}function xi(t,n,e){var r=wg.exec(n.slice(e));return r?(t.U=+r[0],e+r[0].length):-1}function bi(t,n,e){var r=wg.exec(n.slice(e));return r?(t.W=+r[0],e+r[0].length):-1}function wi(t,n,e){var r=wg.exec(n.slice(e,e+4));return r?(t.y=+r[0],e+r[0].length):-1}function Mi(t,n,e){var r=wg.exec(n.slice(e,e+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),e+r[0].length):-1}function Ti(t,n,e){var r=/^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(n.slice(e,e+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),e+r[0].length):-1}function ki(t,n,e){var r=wg.exec(n.slice(e,e+2));return r?(t.m=r[0]-1,e+r[0].length):-1}function Ni(t,n,e){var r=wg.exec(n.slice(e,e+2));return r?(t.d=+r[0],e+r[0].length):-1}function Si(t,n,e){var r=wg.exec(n.slice(e,e+3));return r?(t.m=0,t.d=+r[0],e+r[0].length):-1}function Ei(t,n,e){var r=wg.exec(n.slice(e,e+2));return r?(t.H=+r[0],e+r[0].length):-1}function Ai(t,n,e){var r=wg.exec(n.slice(e,e+2));return r?(t.M=+r[0],e+r[0].length):-1}function Ci(t,n,e){var r=wg.exec(n.slice(e,e+2));return r?(t.S=+r[0],e+r[0].length):-1}function zi(t,n,e){var r=wg.exec(n.slice(e,e+3));return r?(t.L=+r[0],e+r[0].length):-1}function Pi(t,n,e){var r=Mg.exec(n.slice(e,e+1));return r?e+r[0].length:-1}function Li(t,n){return vi(t.getDate(),n,2)}function qi(t,n){return vi(t.getHours(),n,2)}function Ui(t,n){return vi(t.getHours()%12||12,n,2)}function Ri(t,n){return vi(1+ky.count(jy(t),t),n,3)}function Di(t,n){return vi(t.getMilliseconds(),n,3)}function Oi(t,n){return vi(t.getMonth()+1,n,2)}function Fi(t,n){return vi(t.getMinutes(),n,2)}function Ii(t,n){return vi(t.getSeconds(),n,2)}function Yi(t,n){return vi(Sy.count(jy(t),t),n,2)}function Bi(t){return t.getDay()}function ji(t,n){return vi(Ey.count(jy(t),t),n,2)}function Hi(t,n){return vi(t.getFullYear()%100,n,2)}function Xi(t,n){return vi(t.getFullYear()%1e4,n,4)}function Vi(t){var n=t.getTimezoneOffset();return(n>0?"-":(n*=-1,"+"))+vi(n/60|0,"0",2)+vi(n%60,"0",2)}function Wi(t,n){return vi(t.getUTCDate(),n,2)}function $i(t,n){return vi(t.getUTCHours(),n,2)}function Zi(t,n){return vi(t.getUTCHours()%12||12,n,2)}function Gi(t,n){return vi(1+Zy.count(pg(t),t),n,3)}function Ji(t,n){return vi(t.getUTCMilliseconds(),n,3)}function Qi(t,n){return vi(t.getUTCMonth()+1,n,2)}function Ki(t,n){return vi(t.getUTCMinutes(),n,2)}function to(t,n){return vi(t.getUTCSeconds(),n,2)}function no(t,n){return vi(Jy.count(pg(t),t),n,2)}function eo(t){return t.getUTCDay()}function ro(t,n){return vi(Qy.count(pg(t),t),n,2)}function io(t,n){return vi(t.getUTCFullYear()%100,n,2)}function oo(t,n){return vi(t.getUTCFullYear()%1e4,n,4)}function uo(){return"+0000"}function ao(){return"%"}function co(n){return xg=di(n),t.timeFormat=xg.format,t.timeParse=xg.parse,t.utcFormat=xg.utcFormat,t.utcParse=xg.utcParse,xg}function so(t){return t.toISOString()}function fo(t){var n=new Date(t);return isNaN(n)?null:n}function lo(t){function n(n){var o=n+"",u=e.get(o);if(!u){if(i!==zg)return i;e.set(o,u=r.push(n))}return t[(u-1)%t.length]}var e=L(),r=[],i=zg;return t=null==t?[]:Cg.call(t),n.domain=function(t){if(!arguments.length)return r.slice();r=[],e=L();for(var i,o,u=-1,a=t.length;++u<a;)e.has(o=(i=t[u])+"")||e.set(o,r.push(i));return n},n.range=function(e){return arguments.length?(t=Cg.call(e),n):t.slice()},n.unknown=function(t){return arguments.length?(i=t,n):i},n.copy=function(){return lo().domain(r).range(t).unknown(i)},n}function ho(){function t(){var t=i().length,r=u[1]<u[0],h=u[r-0],p=u[1-r];n=(p-h)/Math.max(1,t-c+2*s),a&&(n=Math.floor(n)),h+=(p-h-n*(t-c))*f,e=n*(1-c),a&&(h=Math.round(h),e=Math.round(e));var d=l(t).map(function(t){return h+n*t});return o(r?d.reverse():d)}var n,e,r=lo().unknown(void 0),i=r.domain,o=r.range,u=[0,1],a=!1,c=0,s=0,f=.5;return delete r.unknown,r.domain=function(n){return arguments.length?(i(n),t()):i()},r.range=function(n){return arguments.length?(u=[+n[0],+n[1]],t()):u.slice()},r.rangeRound=function(n){return u=[+n[0],+n[1]],a=!0,t()},r.bandwidth=function(){return e},r.step=function(){return n},r.round=function(n){return arguments.length?(a=!!n,t()):a},r.padding=function(n){return arguments.length?(c=s=Math.max(0,Math.min(1,n)),t()):c},r.paddingInner=function(n){return arguments.length?(c=Math.max(0,Math.min(1,n)),t()):c},r.paddingOuter=function(n){return arguments.length?(s=Math.max(0,Math.min(1,n)),t()):s},r.align=function(n){return arguments.length?(f=Math.max(0,Math.min(1,n)),t()):f},r.copy=function(){return ho().domain(i()).range(u).round(a).paddingInner(c).paddingOuter(s).align(f)},t()}function po(t){var n=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,delete t.paddingOuter,t.copy=function(){return po(n())},t}function vo(){return po(ho().paddingInner(1))}function _o(t){return function(){return t}}function yo(t){return+t}function go(t,n){return(n-=t=+t)?function(e){return(e-t)/n}:_o(n)}function mo(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=n?0:t>=e?1:r(t)}}}function xo(t){return function(n,e){var r=t(n=+n,e=+e);return function(t){return t<=0?n:t>=1?e:r(t)}}}function bo(t,n,e,r){var i=t[0],o=t[1],u=n[0],a=n[1];return o<i?(i=e(o,i),u=r(a,u)):(i=e(i,o),u=r(u,a)),function(t){return u(i(t))}}function wo(t,n,e,r){var i=Math.min(t.length,n.length)-1,o=new Array(i),u=new Array(i),a=-1;for(t[i]<t[0]&&(t=t.slice().reverse(),n=n.slice().reverse());++a<i;)o[a]=e(t[a],t[a+1]),u[a]=r(n[a],n[a+1]);return function(n){var e=yd(t,n,1,i)-1;return u[e](o[e](n))}}function Mo(t,n){return n.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp())}function To(t,n){function e(){return i=Math.min(a.length,c.length)>2?wo:bo,o=u=null,r}function r(n){return(o||(o=i(a,c,f?mo(t):t,s)))(+n)}var i,o,u,a=Pg,c=Pg,s=ar,f=!1;return r.invert=function(t){return(u||(u=i(c,a,go,f?xo(n):n)))(+t)},r.domain=function(t){return arguments.length?(a=Ag.call(t,yo),e()):a.slice()},r.range=function(t){return arguments.length?(c=Cg.call(t),e()):c.slice()},r.rangeRound=function(t){return c=Cg.call(t),s=cr,e()},r.clamp=function(t){return arguments.length?(f=!!t,e()):f},r.interpolate=function(t){return arguments.length?(s=t,e()):s},e()}function ko(n,e,r){var i,o=n[0],u=n[n.length-1],a=p(o,u,null==e?10:e);switch(r=ri(null==r?",f":r),r.type){case"s":var c=Math.max(Math.abs(o),Math.abs(u));return null!=r.precision||isNaN(i=si(a,c))||(r.precision=i),t.formatPrefix(r,c);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=fi(a,Math.max(Math.abs(o),Math.abs(u))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=ci(a))||(r.precision=i-2*("%"===r.type))}return t.format(r)}function No(t){var n=t.domain;return t.ticks=function(t){var e=n();return h(e[0],e[e.length-1],null==t?10:t)},t.tickFormat=function(t,e){return ko(n(),t,e)},t.nice=function(e){var r=n(),i=r.length-1,o=null==e?10:e,u=r[0],a=r[i],c=p(u,a,o);return c&&(c=p(Math.floor(u/c)*c,Math.ceil(a/c)*c,o),r[0]=Math.floor(u/c)*c,r[i]=Math.ceil(a/c)*c,n(r)),t},t}function So(){var t=To(go,er);return t.copy=function(){return Mo(t,So())},No(t)}function Eo(){function t(t){return+t}var n=[0,1];return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=Ag.call(e,yo),t):n.slice()},t.copy=function(){return Eo().domain(n)},No(t)}function Ao(t,n){t=t.slice();var e,r=0,i=t.length-1,o=t[r],u=t[i];return u<o&&(e=r,r=i,i=e,e=o,o=u,u=e),t[r]=n.floor(o),t[i]=n.ceil(u),t}function Co(t,n){return(n=Math.log(n/t))?function(e){return Math.log(e/t)/n}:_o(n)}function zo(t,n){return t<0?function(e){return-Math.pow(-n,e)*Math.pow(-t,1-e)}:function(e){return Math.pow(n,e)*Math.pow(t,1-e)}}function Po(t){return isFinite(t)?+("1e"+t):t<0?0:t}function Lo(t){return 10===t?Po:t===Math.E?Math.exp:function(n){return Math.pow(t,n)}}function qo(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),function(n){return Math.log(n)/t})}function Uo(t){return function(n){return-t(-n)}}function Ro(){function n(){return o=qo(i),u=Lo(i),r()[0]<0&&(o=Uo(o),u=Uo(u)),e}var e=To(Co,zo).domain([1,10]),r=e.domain,i=10,o=qo(10),u=Lo(10);return e.base=function(t){return arguments.length?(i=+t,n()):i},e.domain=function(t){return arguments.length?(r(t),n()):r()},e.ticks=function(t){var n,e=r(),a=e[0],c=e[e.length-1];(n=c<a)&&(p=a,a=c,c=p);var s,f,l,p=o(a),d=o(c),v=null==t?10:+t,_=[];if(!(i%1)&&d-p<v){if(p=Math.round(p)-1,d=Math.round(d)+1,a>0){for(;p<d;++p)for(f=1,s=u(p);f<i;++f)if(l=s*f,!(l<a)){if(l>c)break;_.push(l)}}else for(;p<d;++p)for(f=i-1,s=u(p);f>=1;--f)if(l=s*f,!(l<a)){if(l>c)break;_.push(l)}}else _=h(p,d,Math.min(d-p,v)).map(u);return n?_.reverse():_},e.tickFormat=function(n,r){if(null==r&&(r=10===i?".0e":","),"function"!=typeof r&&(r=t.format(r)),n===1/0)return r;null==n&&(n=10);var a=Math.max(1,i*n/e.ticks().length);return function(t){var n=t/u(Math.round(o(t)));return n*i<i-.5&&(n*=i),n<=a?r(t):""}},e.nice=function(){return r(Ao(r(),{floor:function(t){return u(Math.floor(o(t)))},ceil:function(t){return u(Math.ceil(o(t)))}}))},e.copy=function(){return Mo(e,Ro().base(i))},e}function Do(t,n){return t<0?-Math.pow(-t,n):Math.pow(t,n)}function Oo(){function t(t,n){return(n=Do(n,e)-(t=Do(t,e)))?function(r){return(Do(r,e)-t)/n}:_o(n)}function n(t,n){return n=Do(n,e)-(t=Do(t,e)),function(r){return Do(t+n*r,1/e)}}var e=1,r=To(t,n),i=r.domain;return r.exponent=function(t){return arguments.length?(e=+t,i(i())):e},r.copy=function(){return Mo(r,Oo().exponent(e))},No(r)}function Fo(){return Oo().exponent(.5)}function Io(){function t(){var t=0,n=Math.max(1,i.length);for(o=new Array(n-1);++t<n;)o[t-1]=_(r,t/n);return e}function e(t){if(!isNaN(t=+t))return i[yd(o,t)]}var r=[],i=[],o=[];return e.invertExtent=function(t){var n=i.indexOf(t);return n<0?[NaN,NaN]:[n>0?o[n-1]:r[0],n<o.length?o[n]:r[r.length-1]]},e.domain=function(e){if(!arguments.length)return r.slice();r=[];for(var i,o=0,u=e.length;o<u;++o)i=e[o],null==i||isNaN(i=+i)||r.push(i);return r.sort(n),t()},e.range=function(n){return arguments.length?(i=Cg.call(n),t()):i.slice()},e.quantiles=function(){return o.slice()},e.copy=function(){return Io().domain(r).range(i)},e}function Yo(){function t(t){if(t<=t)return u[yd(o,t,0,i)]}function n(){var n=-1;for(o=new Array(i);++n<i;)o[n]=((n+1)*r-(n-i)*e)/(i+1);return t}var e=0,r=1,i=1,o=[.5],u=[0,1];return t.domain=function(t){return arguments.length?(e=+t[0],r=+t[1],n()):[e,r]},t.range=function(t){return arguments.length?(i=(u=Cg.call(t)).length-1,n()):u.slice()},t.invertExtent=function(t){var n=u.indexOf(t);return n<0?[NaN,NaN]:n<1?[e,o[0]]:n>=i?[o[i-1],r]:[o[n-1],o[n]]},t.copy=function(){return Yo().domain([e,r]).range(u)},No(t)}function Bo(){function t(t){if(t<=t)return e[yd(n,t,0,r)]}var n=[.5],e=[0,1],r=1;return t.domain=function(i){return arguments.length?(n=Cg.call(i),r=Math.min(n.length,e.length-1),t):n.slice()},t.range=function(i){return arguments.length?(e=Cg.call(i),r=Math.min(n.length,e.length-1),t):e.slice()},t.invertExtent=function(t){var r=e.indexOf(t);return[n[r-1],n[r]]},t.copy=function(){return Bo().domain(n).range(e)},t}function jo(t){return new Date(t)}function Ho(t){return t instanceof Date?+t:+new Date((+t))}function Xo(t,n,r,i,o,u,a,c,s){function f(e){return(a(e)<e?_:u(e)<e?y:o(e)<e?g:i(e)<e?m:n(e)<e?r(e)<e?x:b:t(e)<e?w:M)(e)}function l(n,r,i,o){if(null==n&&(n=10),"number"==typeof n){var u=Math.abs(i-r)/n,a=e(function(t){return t[2]}).right(T,u);a===T.length?(o=p(r/Fg,i/Fg,n),n=t):a?(a=T[u/T[a-1][2]<T[a][2]/u?a-1:a],o=a[1],n=a[0]):(o=p(r,i,n),n=c)}return null==o?n:n.every(o)}var h=To(go,er),d=h.invert,v=h.domain,_=s(".%L"),y=s(":%S"),g=s("%I:%M"),m=s("%I %p"),x=s("%a %d"),b=s("%b %d"),w=s("%B"),M=s("%Y"),T=[[a,1,Lg],[a,5,5*Lg],[a,15,15*Lg],[a,30,30*Lg],[u,1,qg],[u,5,5*qg],[u,15,15*qg],[u,30,30*qg],[o,1,Ug],[o,3,3*Ug],[o,6,6*Ug],[o,12,12*Ug],[i,1,Rg],[i,2,2*Rg],[r,1,Dg],[n,1,Og],[n,3,3*Og],[t,1,Fg]];return h.invert=function(t){return new Date(d(t))},h.domain=function(t){return arguments.length?v(Ag.call(t,Ho)):v().map(jo)},h.ticks=function(t,n){var e,r=v(),i=r[0],o=r[r.length-1],u=o<i;return u&&(e=i,i=o,o=e),e=l(t,i,o,n),e=e?e.range(i,o+1):[],u?e.reverse():e},h.tickFormat=function(t,n){return null==n?f:s(n)},h.nice=function(t,n){var e=v();return(t=l(t,e[0],e[e.length-1],n))?v(Ao(e,t)):h},h.copy=function(){return Mo(h,Xo(t,n,r,i,o,u,a,c,s))},h}function Vo(){return Xo(jy,Yy,Sy,ky,My,by,my,hy,t.timeFormat).domain([new Date(2e3,0,1),new Date(2e3,0,2)])}function Wo(){return Xo(pg,lg,Jy,Zy,Wy,Xy,my,hy,t.utcFormat).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)])}function $o(t){return t.match(/.{6}/g).map(function(t){return"#"+t})}function Zo(t){(t<0||t>1)&&(t-=Math.floor(t));var n=Math.abs(t-.5);return Wg.h=360*t-100,Wg.s=1.5-1.5*n,Wg.l=.8-.9*n,Wg+""}function Go(t){var n=t.length;return function(e){return t[Math.max(0,Math.min(n-1,Math.floor(e*n)))]}}function Jo(t){function n(n){var o=(n-e)/(r-e);return t(i?Math.max(0,Math.min(1,o)):o)}var e=0,r=1,i=!1;return n.domain=function(t){return arguments.length?(e=+t[0],r=+t[1],n):[e,r]},n.clamp=function(t){return arguments.length?(i=!!t,n):i},n.interpolator=function(e){return arguments.length?(t=e,n):t},n.copy=function(){return Jo(t).domain([e,r]).clamp(i)},No(n)}function Qo(t){var n=t+="",e=n.indexOf(":");return e>=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),Kg.hasOwnProperty(n)?{space:Kg[n],local:t}:t}function Ko(t){return function(){var n=this.ownerDocument,e=this.namespaceURI;return e===Qg&&n.documentElement.namespaceURI===Qg?n.createElement(t):n.createElementNS(e,t)}}function tu(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function nu(t){var n=Qo(t);return(n.local?tu:Ko)(n)}function eu(){return new ru}function ru(){this._="@"+(++tm).toString(36)}function iu(t,n,e){return t=ou(t,n,e),function(n){var e=n.relatedTarget;e&&(e===this||8&e.compareDocumentPosition(this))||t.call(this,n)}}function ou(n,e,r){return function(i){var o=t.event;t.event=i;try{n.call(this,this.__data__,e,r)}finally{t.event=o}}}function uu(t){return t.trim().split(/^|\s+/).map(function(t){var n="",e=t.indexOf(".");return e>=0&&(n=t.slice(e+1),t=t.slice(0,e)),{type:t,name:n}})}function au(t){return function(){var n=this.__on;if(n){for(var e,r=0,i=-1,o=n.length;r<o;++r)e=n[r],t.type&&e.type!==t.type||e.name!==t.name?n[++i]=e:this.removeEventListener(e.type,e.listener,e.capture);++i?n.length=i:delete this.__on}}}function cu(t,n,e){
+var r=om.hasOwnProperty(t.type)?iu:ou;return function(i,o,u){var a,c=this.__on,s=r(n,o,u);if(c)for(var f=0,l=c.length;f<l;++f)if((a=c[f]).type===t.type&&a.name===t.name)return this.removeEventListener(a.type,a.listener,a.capture),this.addEventListener(a.type,a.listener=s,a.capture=e),void(a.value=n);this.addEventListener(t.type,s,e),a={type:t.type,name:t.name,value:n,listener:s,capture:e},c?c.push(a):this.__on=[a]}}function su(t,n,e){var r,i,o=uu(t+""),u=o.length;{if(!(arguments.length<2)){for(a=n?cu:au,null==e&&(e=!1),r=0;r<u;++r)this.each(a(o[r],n,e));return this}var a=this.node().__on;if(a)for(var c,s=0,f=a.length;s<f;++s)for(r=0,c=a[s];r<u;++r)if((i=o[r]).type===c.type&&i.name===c.name)return c.value}}function fu(n,e,r,i){var o=t.event;n.sourceEvent=t.event,t.event=n;try{return e.apply(r,i)}finally{t.event=o}}function lu(){for(var n,e=t.event;n=e.sourceEvent;)e=n;return e}function hu(t,n){var e=t.ownerSVGElement||t;if(e.createSVGPoint){var r=e.createSVGPoint();return r.x=n.clientX,r.y=n.clientY,r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}var i=t.getBoundingClientRect();return[n.clientX-i.left-t.clientLeft,n.clientY-i.top-t.clientTop]}function pu(t){var n=lu();return n.changedTouches&&(n=n.changedTouches[0]),hu(t,n)}function du(){}function vu(t){return null==t?du:function(){return this.querySelector(t)}}function _u(t){"function"!=typeof t&&(t=vu(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i<e;++i)for(var o,u,a=n[i],c=a.length,s=r[i]=new Array(c),f=0;f<c;++f)(o=a[f])&&(u=t.call(o,o.__data__,f,a))&&("__data__"in o&&(u.__data__=o.__data__),s[f]=u);return new Pa(r,this._parents)}function yu(){return[]}function gu(t){return null==t?yu:function(){return this.querySelectorAll(t)}}function mu(t){"function"!=typeof t&&(t=gu(t));for(var n=this._groups,e=n.length,r=[],i=[],o=0;o<e;++o)for(var u,a=n[o],c=a.length,s=0;s<c;++s)(u=a[s])&&(r.push(t.call(u,u.__data__,s,a)),i.push(u));return new Pa(r,i)}function xu(t){"function"!=typeof t&&(t=im(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i<e;++i)for(var o,u=n[i],a=u.length,c=r[i]=[],s=0;s<a;++s)(o=u[s])&&t.call(o,o.__data__,s,u)&&c.push(o);return new Pa(r,this._parents)}function bu(t){return new Array(t.length)}function wu(){return new Pa(this._enter||this._groups.map(bu),this._parents)}function Mu(t,n){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=n}function Tu(t){return function(){return t}}function ku(t,n,e,r,i,o){for(var u,a=0,c=n.length,s=o.length;a<s;++a)(u=n[a])?(u.__data__=o[a],r[a]=u):e[a]=new Mu(t,o[a]);for(;a<c;++a)(u=n[a])&&(i[a]=u)}function Nu(t,n,e,r,i,o,u){var a,c,s,f={},l=n.length,h=o.length,p=new Array(l);for(a=0;a<l;++a)(c=n[a])&&(p[a]=s=am+u.call(c,c.__data__,a,n),s in f?i[a]=c:f[s]=c);for(a=0;a<h;++a)s=am+u.call(t,o[a],a,o),(c=f[s])?(r[a]=c,c.__data__=o[a],f[s]=null):e[a]=new Mu(t,o[a]);for(a=0;a<l;++a)(c=n[a])&&f[p[a]]===c&&(i[a]=c)}function Su(t,n){if(!t)return p=new Array(this.size()),s=-1,this.each(function(t){p[++s]=t}),p;var e=n?Nu:ku,r=this._parents,i=this._groups;"function"!=typeof t&&(t=Tu(t));for(var o=i.length,u=new Array(o),a=new Array(o),c=new Array(o),s=0;s<o;++s){var f=r[s],l=i[s],h=l.length,p=t.call(f,f&&f.__data__,s,r),d=p.length,v=a[s]=new Array(d),_=u[s]=new Array(d),y=c[s]=new Array(h);e(f,l,v,_,y,p,n);for(var g,m,x=0,b=0;x<d;++x)if(g=v[x]){for(x>=b&&(b=x+1);!(m=_[b])&&++b<d;);g._next=m||null}}return u=new Pa(u,r),u._enter=a,u._exit=c,u}function Eu(){return new Pa(this._exit||this._groups.map(bu),this._parents)}function Au(t){for(var n=this._groups,e=t._groups,r=n.length,i=e.length,o=Math.min(r,i),u=new Array(r),a=0;a<o;++a)for(var c,s=n[a],f=e[a],l=s.length,h=u[a]=new Array(l),p=0;p<l;++p)(c=s[p]||f[p])&&(h[p]=c);for(;a<r;++a)u[a]=n[a];return new Pa(u,this._parents)}function Cu(){for(var t=this._groups,n=-1,e=t.length;++n<e;)for(var r,i=t[n],o=i.length-1,u=i[o];--o>=0;)(r=i[o])&&(u&&u!==r.nextSibling&&u.parentNode.insertBefore(r,u),u=r);return this}function zu(t){function n(n,e){return n&&e?t(n.__data__,e.__data__):!n-!e}t||(t=Pu);for(var e=this._groups,r=e.length,i=new Array(r),o=0;o<r;++o){for(var u,a=e[o],c=a.length,s=i[o]=new Array(c),f=0;f<c;++f)(u=a[f])&&(s[f]=u);s.sort(n)}return new Pa(i,this._parents).order()}function Pu(t,n){return t<n?-1:t>n?1:t>=n?0:NaN}function Lu(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this}function qu(){var t=new Array(this.size()),n=-1;return this.each(function(){t[++n]=this}),t}function Uu(){for(var t=this._groups,n=0,e=t.length;n<e;++n)for(var r=t[n],i=0,o=r.length;i<o;++i){var u=r[i];if(u)return u}return null}function Ru(){var t=0;return this.each(function(){++t}),t}function Du(){return!this.node()}function Ou(t){for(var n=this._groups,e=0,r=n.length;e<r;++e)for(var i,o=n[e],u=0,a=o.length;u<a;++u)(i=o[u])&&t.call(i,i.__data__,u,o);return this}function Fu(t){return function(){this.removeAttribute(t)}}function Iu(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Yu(t,n){return function(){this.setAttribute(t,n)}}function Bu(t,n){return function(){this.setAttributeNS(t.space,t.local,n)}}function ju(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttribute(t):this.setAttribute(t,e)}}function Hu(t,n){return function(){var e=n.apply(this,arguments);null==e?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,e)}}function Xu(t,n){var e=Qo(t);if(arguments.length<2){var r=this.node();return e.local?r.getAttributeNS(e.space,e.local):r.getAttribute(e)}return this.each((null==n?e.local?Iu:Fu:"function"==typeof n?e.local?Hu:ju:e.local?Bu:Yu)(e,n))}function Vu(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function Wu(t){return function(){this.style.removeProperty(t)}}function $u(t,n,e){return function(){this.style.setProperty(t,n,e)}}function Zu(t,n,e){return function(){var r=n.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,e)}}function Gu(t,n,e){var r;return arguments.length>1?this.each((null==n?Wu:"function"==typeof n?Zu:$u)(t,n,null==e?"":e)):Vu(r=this.node()).getComputedStyle(r,null).getPropertyValue(t)}function Ju(t){return function(){delete this[t]}}function Qu(t,n){return function(){this[t]=n}}function Ku(t,n){return function(){var e=n.apply(this,arguments);null==e?delete this[t]:this[t]=e}}function ta(t,n){return arguments.length>1?this.each((null==n?Ju:"function"==typeof n?Ku:Qu)(t,n)):this.node()[t]}function na(t){return t.trim().split(/^|\s+/)}function ea(t){return t.classList||new ra(t)}function ra(t){this._node=t,this._names=na(t.getAttribute("class")||"")}function ia(t,n){for(var e=ea(t),r=-1,i=n.length;++r<i;)e.add(n[r])}function oa(t,n){for(var e=ea(t),r=-1,i=n.length;++r<i;)e.remove(n[r])}function ua(t){return function(){ia(this,t)}}function aa(t){return function(){oa(this,t)}}function ca(t,n){return function(){(n.apply(this,arguments)?ia:oa)(this,t)}}function sa(t,n){var e=na(t+"");if(arguments.length<2){for(var r=ea(this.node()),i=-1,o=e.length;++i<o;)if(!r.contains(e[i]))return!1;return!0}return this.each(("function"==typeof n?ca:n?ua:aa)(e,n))}function fa(){this.textContent=""}function la(t){return function(){this.textContent=t}}function ha(t){return function(){var n=t.apply(this,arguments);this.textContent=null==n?"":n}}function pa(t){return arguments.length?this.each(null==t?fa:("function"==typeof t?ha:la)(t)):this.node().textContent}function da(){this.innerHTML=""}function va(t){return function(){this.innerHTML=t}}function _a(t){return function(){var n=t.apply(this,arguments);this.innerHTML=null==n?"":n}}function ya(t){return arguments.length?this.each(null==t?da:("function"==typeof t?_a:va)(t)):this.node().innerHTML}function ga(){this.nextSibling&&this.parentNode.appendChild(this)}function ma(){return this.each(ga)}function xa(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function ba(){return this.each(xa)}function wa(t){var n="function"==typeof t?t:nu(t);return this.select(function(){return this.appendChild(n.apply(this,arguments))})}function Ma(){return null}function Ta(t,n){var e="function"==typeof t?t:nu(t),r=null==n?Ma:"function"==typeof n?n:vu(n);return this.select(function(){return this.insertBefore(e.apply(this,arguments),r.apply(this,arguments)||null)})}function ka(){var t=this.parentNode;t&&t.removeChild(this)}function Na(){return this.each(ka)}function Sa(t){return arguments.length?this.property("__data__",t):this.node().__data__}function Ea(t,n,e){var r=Vu(t),i=r.CustomEvent;i?i=new i(n,e):(i=r.document.createEvent("Event"),e?(i.initEvent(n,e.bubbles,e.cancelable),i.detail=e.detail):i.initEvent(n,!1,!1)),t.dispatchEvent(i)}function Aa(t,n){return function(){return Ea(this,t,n)}}function Ca(t,n){return function(){return Ea(this,t,n.apply(this,arguments))}}function za(t,n){return this.each(("function"==typeof n?Ca:Aa)(t,n))}function Pa(t,n){this._groups=t,this._parents=n}function La(){return new Pa([[document.documentElement]],cm)}function qa(t){return"string"==typeof t?new Pa([[document.querySelector(t)]],[document.documentElement]):new Pa([[t]],cm)}function Ua(t){return"string"==typeof t?new Pa([document.querySelectorAll(t)],[document.documentElement]):new Pa([null==t?[]:t],cm)}function Ra(t,n,e){arguments.length<3&&(e=n,n=lu().changedTouches);for(var r,i=0,o=n?n.length:0;i<o;++i)if((r=n[i]).identifier===e)return hu(t,r);return null}function Da(t,n){null==n&&(n=lu().touches);for(var e=0,r=n?n.length:0,i=new Array(r);e<r;++e)i[e]=hu(t,n[e]);return i}function Oa(t,n,e,r,i,o){var u=t.__transition;if(u){if(e in u)return}else t.__transition={};Ba(t,e,{name:n,index:r,group:i,on:sm,tween:fm,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:lm})}function Fa(t,n){var e=t.__transition;if(!e||!(e=e[n])||e.state>lm)throw new Error("too late");return e}function Ia(t,n){var e=t.__transition;if(!e||!(e=e[n])||e.state>pm)throw new Error("too late");return e}function Ya(t,n){var e=t.__transition;if(!e||!(e=e[n]))throw new Error("too late");return e}function Ba(t,n,e){function r(t){e.state=hm,e.delay<=t?i(t-e.delay):e.timer.restart(i,e.delay,e.time)}function i(r){var i,c,s,f;for(i in a)f=a[i],f.name===e.name&&(f.state===dm?(f.state=_m,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete a[i]):+i<n&&(f.state=_m,f.timer.stop(),delete a[i]));if(Vr(function(){e.state===dm&&(e.timer.restart(o,e.delay,e.time),o(r))}),e.state=pm,e.on.call("start",t,t.__data__,e.index,e.group),e.state===pm){for(e.state=dm,u=new Array(s=e.tween.length),i=0,c=-1;i<s;++i)(f=e.tween[i].value.call(t,t.__data__,e.index,e.group))&&(u[++c]=f);u.length=c+1}}function o(r){for(var i=r<e.duration?e.ease.call(null,r/e.duration):(e.state=vm,1),o=-1,c=u.length;++o<c;)u[o].call(null,i);if(e.state===vm){e.state=_m,e.timer.stop(),e.on.call("end",t,t.__data__,e.index,e.group);for(o in a)if(+o!==n)return void delete a[n];delete t.__transition}}var u,a=t.__transition;a[n]=e,e.timer=Ir(r,0,e.time)}function ja(t,n){var e,r,i,o=t.__transition,u=!0;if(o){n=null==n?null:n+"";for(i in o)(e=o[i]).name===n?(r=e.state===dm,e.state=_m,e.timer.stop(),r&&e.on.call("interrupt",t,t.__data__,e.index,e.group),delete o[i]):u=!1;u&&delete t.__transition}}function Ha(t){return this.each(function(){ja(this,t)})}function Xa(t,n){var e,r;return function(){var i=Ia(this,t),o=i.tween;if(o!==e){r=e=o;for(var u=0,a=r.length;u<a;++u)if(r[u].name===n){r=r.slice(),r.splice(u,1);break}}i.tween=r}}function Va(t,n,e){var r,i;if("function"!=typeof e)throw new Error;return function(){var o=Ia(this,t),u=o.tween;if(u!==r){i=(r=u).slice();for(var a={name:n,value:e},c=0,s=i.length;c<s;++c)if(i[c].name===n){i[c]=a;break}c===s&&i.push(a)}o.tween=i}}function Wa(t,n){var e=this._id;if(t+="",arguments.length<2){for(var r,i=Ya(this.node(),e).tween,o=0,u=i.length;o<u;++o)if((r=i[o]).name===t)return r.value;return null}return this.each((null==n?Xa:Va)(e,t,n))}function $a(t,n,e){var r=t._id;return t.each(function(){var t=Ia(this,r);(t.value||(t.value={}))[n]=e.apply(this,arguments)}),function(t){return Ya(t,r).value[n]}}function Za(t,n){var e;return("number"==typeof n?er:n instanceof be?y_:(e=be(n))?(n=e,y_):ur)(t,n)}function Ga(t){return function(){this.removeAttribute(t)}}function Ja(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Qa(t,n,e){var r,i;return function(){var o=this.getAttribute(t);return o===e?null:o===r?i:i=n(r=o,e)}}function Ka(t,n,e){var r,i;return function(){var o=this.getAttributeNS(t.space,t.local);return o===e?null:o===r?i:i=n(r=o,e)}}function tc(t,n,e){var r,i,o;return function(){var u,a=e(this);return null==a?void this.removeAttribute(t):(u=this.getAttribute(t),u===a?null:u===r&&a===i?o:o=n(r=u,i=a))}}function nc(t,n,e){var r,i,o;return function(){var u,a=e(this);return null==a?void this.removeAttributeNS(t.space,t.local):(u=this.getAttributeNS(t.space,t.local),u===a?null:u===r&&a===i?o:o=n(r=u,i=a))}}function ec(t,n){var e=Qo(t),r="transform"===e?k_:Za;return this.attrTween(t,"function"==typeof n?(e.local?nc:tc)(e,r,$a(this,"attr."+t,n)):null==n?(e.local?Ja:Ga)(e):(e.local?Ka:Qa)(e,r,n))}function rc(t,n){function e(){var e=this,r=n.apply(e,arguments);return r&&function(n){e.setAttributeNS(t.space,t.local,r(n))}}return e._value=n,e}function ic(t,n){function e(){var e=this,r=n.apply(e,arguments);return r&&function(n){e.setAttribute(t,r(n))}}return e._value=n,e}function oc(t,n){var e="attr."+t;if(arguments.length<2)return(e=this.tween(e))&&e._value;if(null==n)return this.tween(e,null);if("function"!=typeof n)throw new Error;var r=Qo(t);return this.tween(e,(r.local?rc:ic)(r,n))}function uc(t,n){return function(){Fa(this,t).delay=+n.apply(this,arguments)}}function ac(t,n){return n=+n,function(){Fa(this,t).delay=n}}function cc(t){var n=this._id;return arguments.length?this.each(("function"==typeof t?uc:ac)(n,t)):Ya(this.node(),n).delay}function sc(t,n){return function(){Ia(this,t).duration=+n.apply(this,arguments)}}function fc(t,n){return n=+n,function(){Ia(this,t).duration=n}}function lc(t){var n=this._id;return arguments.length?this.each(("function"==typeof t?sc:fc)(n,t)):Ya(this.node(),n).duration}function hc(t,n){if("function"!=typeof n)throw new Error;return function(){Ia(this,t).ease=n}}function pc(t){var n=this._id;return arguments.length?this.each(hc(n,t)):Ya(this.node(),n).ease}function dc(t){"function"!=typeof t&&(t=im(t));for(var n=this._groups,e=n.length,r=new Array(e),i=0;i<e;++i)for(var o,u=n[i],a=u.length,c=r[i]=[],s=0;s<a;++s)(o=u[s])&&t.call(o,o.__data__,s,u)&&c.push(o);return new Uc(r,this._parents,this._name,this._id)}function vc(t){if(t._id!==this._id)throw new Error;for(var n=this._groups,e=t._groups,r=n.length,i=e.length,o=Math.min(r,i),u=new Array(r),a=0;a<o;++a)for(var c,s=n[a],f=e[a],l=s.length,h=u[a]=new Array(l),p=0;p<l;++p)(c=s[p]||f[p])&&(h[p]=c);for(;a<r;++a)u[a]=n[a];return new Uc(u,this._parents,this._name,this._id)}function _c(t){return(t+"").trim().split(/^|\s+/).every(function(t){var n=t.indexOf(".");return n>=0&&(t=t.slice(0,n)),!t||"start"===t})}function yc(t,n,e){var r,i,o=_c(n)?Fa:Ia;return function(){var u=o(this,t),a=u.on;a!==r&&(i=(r=a).copy()).on(n,e),u.on=i}}function gc(t,n){var e=this._id;return arguments.length<2?Ya(this.node(),e).on.on(t):this.each(yc(e,t,n))}function mc(t){return function(){var n=this.parentNode;for(var e in this.__transition)if(+e!==t)return;n&&n.removeChild(this)}}function xc(){return this.on("end.remove",mc(this._id))}function bc(t){var n=this._name,e=this._id;"function"!=typeof t&&(t=vu(t));for(var r=this._groups,i=r.length,o=new Array(i),u=0;u<i;++u)for(var a,c,s=r[u],f=s.length,l=o[u]=new Array(f),h=0;h<f;++h)(a=s[h])&&(c=t.call(a,a.__data__,h,s))&&("__data__"in a&&(c.__data__=a.__data__),l[h]=c,Oa(l[h],n,e,h,l,Ya(a,e)));return new Uc(o,this._parents,n,e)}function wc(t){var n=this._name,e=this._id;"function"!=typeof t&&(t=gu(t));for(var r=this._groups,i=r.length,o=[],u=[],a=0;a<i;++a)for(var c,s=r[a],f=s.length,l=0;l<f;++l)if(c=s[l]){for(var h,p=t.call(c,c.__data__,l,s),d=Ya(c,e),v=0,_=p.length;v<_;++v)(h=p[v])&&Oa(h,n,e,v,p,d);o.push(p),u.push(c)}return new Uc(o,u,n,e)}function Mc(){return new ym(this._groups,this._parents)}function Tc(t,n){var e,r,i;return function(){var o=Vu(this).getComputedStyle(this,null),u=o.getPropertyValue(t),a=(this.style.removeProperty(t),o.getPropertyValue(t));return u===a?null:u===e&&a===r?i:i=n(e=u,r=a)}}function kc(t){return function(){this.style.removeProperty(t)}}function Nc(t,n,e){var r,i;return function(){var o=Vu(this).getComputedStyle(this,null).getPropertyValue(t);return o===e?null:o===r?i:i=n(r=o,e)}}function Sc(t,n,e){var r,i,o;return function(){var u=Vu(this).getComputedStyle(this,null),a=u.getPropertyValue(t),c=e(this);return null==c&&(this.style.removeProperty(t),c=u.getPropertyValue(t)),a===c?null:a===r&&c===i?o:o=n(r=a,i=c)}}function Ec(t,n,e){var r="transform"==(t+="")?T_:Za;return null==n?this.styleTween(t,Tc(t,r)).on("end.style."+t,kc(t)):this.styleTween(t,"function"==typeof n?Sc(t,r,$a(this,"style."+t,n)):Nc(t,r,n),e)}function Ac(t,n,e){function r(){var r=this,i=n.apply(r,arguments);return i&&function(n){r.style.setProperty(t,i(n),e)}}return r._value=n,r}function Cc(t,n,e){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==n)return this.tween(r,null);if("function"!=typeof n)throw new Error;return this.tween(r,Ac(t,n,null==e?"":e))}function zc(t){return function(){this.textContent=t}}function Pc(t){return function(){var n=t(this);this.textContent=null==n?"":n}}function Lc(t){return this.tween("text","function"==typeof t?Pc($a(this,"text",t)):zc(null==t?"":t+""))}function qc(){for(var t=this._name,n=this._id,e=Dc(),r=this._groups,i=r.length,o=0;o<i;++o)for(var u,a=r[o],c=a.length,s=0;s<c;++s)if(u=a[s]){var f=Ya(u,n);Oa(u,t,e,s,a,{time:f.time+f.delay+f.duration,delay:0,duration:f.duration,ease:f.ease})}return new Uc(r,this._parents,t,e)}function Uc(t,n,e,r){this._groups=t,this._parents=n,this._name=e,this._id=r}function Rc(t){return La().transition(t)}function Dc(){return++gm}function Oc(t,n){for(var e;!(e=t.__transition)||!(e=e[n]);)if(!(t=t.parentNode))return xm.time=Dr(),xm;return e}function Fc(t){var n,e;t instanceof Uc?(n=t._id,t=t._name):(n=Dc(),(e=xm).time=Dr(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,o=0;o<i;++o)for(var u,a=r[o],c=a.length,s=0;s<c;++s)(u=a[s])&&Oa(u,t,n,s,a,e||Oc(u,n));return new Uc(r,this._parents,t,n)}function Ic(t,n){var e,r,i=t.__transition;if(i){n=null==n?null:n+"";for(r in i)if((e=i[r]).state>hm&&e.name===n)return new Uc([[t]],bm,n,(+r))}return null}function Yc(t){return t}function Bc(t,n,e){var r=t(e);return"translate("+(isFinite(r)?r:n(e))+",0)"}function jc(t,n,e){var r=t(e);return"translate(0,"+(isFinite(r)?r:n(e))+")"}function Hc(t){var n=t.bandwidth()/2;return function(e){return t(e)+n}}function Xc(){return!this.__axis}function Vc(t,n){function e(e){var s,f=null==i?n.ticks?n.ticks.apply(n,r):n.domain():i,l=null==o?n.tickFormat?n.tickFormat.apply(n,r):Yc:o,h=Math.max(u,0)+c,p=t===Mm||t===km?Bc:jc,d=n.range(),v=d[0]+.5,_=d[d.length-1]+.5,y=(n.bandwidth?Hc:Yc)(n.copy()),g=e.selection?e.selection():e,m=g.selectAll(".domain").data([null]),x=g.selectAll(".tick").data(f,n).order(),b=x.exit(),w=x.enter().append("g").attr("class","tick"),M=x.select("line"),T=x.select("text"),k=t===Mm||t===Nm?-1:1,N=t===Nm||t===Tm?(s="x","y"):(s="y","x");m=m.merge(m.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),x=x.merge(w),M=M.merge(w.append("line").attr("stroke","#000").attr(s+"2",k*u).attr(N+"1",.5).attr(N+"2",.5)),T=T.merge(w.append("text").attr("fill","#000").attr(s,k*h).attr(N,.5).attr("dy",t===Mm?"0em":t===km?".71em":".32em")),e!==g&&(m=m.transition(e),x=x.transition(e),M=M.transition(e),T=T.transition(e),b=b.transition(e).attr("opacity",Sm).attr("transform",function(t){return p(y,this.parentNode.__axis||y,t)}),w.attr("opacity",Sm).attr("transform",function(t){return p(this.parentNode.__axis||y,y,t)})),b.remove(),m.attr("d",t===Nm||t==Tm?"M"+k*a+","+v+"H0.5V"+_+"H"+k*a:"M"+v+","+k*a+"V0.5H"+_+"V"+k*a),x.attr("opacity",1).attr("transform",function(t){return p(y,y,t)}),M.attr(s+"2",k*u),T.attr(s,k*h).text(l),g.filter(Xc).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===Tm?"start":t===Nm?"end":"middle"),g.each(function(){this.__axis=y})}var r=[],i=null,o=null,u=6,a=6,c=3;return e.scale=function(t){return arguments.length?(n=t,e):n},e.ticks=function(){return r=wm.call(arguments),e},e.tickArguments=function(t){return arguments.length?(r=null==t?[]:wm.call(t),e):r.slice()},e.tickValues=function(t){return arguments.length?(i=null==t?null:wm.call(t),e):i&&i.slice()},e.tickFormat=function(t){return arguments.length?(o=t,e):o},e.tickSize=function(t){return arguments.length?(u=a=+t,e):u},e.tickSizeInner=function(t){return arguments.length?(u=+t,e):u},e.tickSizeOuter=function(t){return arguments.length?(a=+t,e):a},e.tickPadding=function(t){return arguments.length?(c=+t,e):c},e}function Wc(t){return Vc(Mm,t)}function $c(t){return Vc(Tm,t)}function Zc(t){return Vc(km,t)}function Gc(t){return Vc(Nm,t)}function Jc(t,n){return t.parent===n.parent?1:2}function Qc(t){return t.reduce(Kc,0)/t.length}function Kc(t,n){return t+n.x}function ts(t){return 1+t.reduce(ns,0)}function ns(t,n){return Math.max(t,n.y)}function es(t){for(var n;n=t.children;)t=n[0];return t}function rs(t){for(var n;n=t.children;)t=n[n.length-1];return t}function is(){function t(t){var o,u=0;t.eachAfter(function(t){var e=t.children;e?(t.x=Qc(e),t.y=ts(e)):(t.x=o?u+=n(t,o):0,t.y=0,o=t)});var a=es(t),c=rs(t),s=a.x-n(a,c)/2,f=c.x+n(c,a)/2;return t.eachAfter(i?function(n){n.x=(n.x-t.x)*e,n.y=(t.y-n.y)*r}:function(n){n.x=(n.x-s)/(f-s)*e,n.y=(1-(t.y?n.y/t.y:1))*r})}var n=Jc,e=1,r=1,i=!1;return t.separation=function(e){return arguments.length?(n=e,t):n},t.size=function(n){return arguments.length?(i=!1,e=+n[0],r=+n[1],t):i?null:[e,r]},t.nodeSize=function(n){return arguments.length?(i=!0,e=+n[0],r=+n[1],t):i?[e,r]:null},t}function os(t){var n,e,r,i,o=this,u=[o];do for(n=u.reverse(),u=[];o=n.pop();)if(t(o),e=o.children)for(r=0,i=e.length;r<i;++r)u.push(e[r]);while(u.length);return this}function us(t){for(var n,e,r=this,i=[r];r=i.pop();)if(t(r),n=r.children)for(e=n.length-1;e>=0;--e)i.push(n[e]);return this}function as(t){for(var n,e,r,i=this,o=[i],u=[];i=o.pop();)if(u.push(i),n=i.children)for(e=0,r=n.length;e<r;++e)o.push(n[e]);for(;i=u.pop();)t(i);return this}function cs(t){return this.eachAfter(function(n){for(var e=+t(n.data)||0,r=n.children,i=r&&r.length;--i>=0;)e+=r[i].value;n.value=e})}function ss(t){return this.eachBefore(function(n){n.children&&n.children.sort(t)})}function fs(t){for(var n=this,e=ls(n,t),r=[n];n!==e;)n=n.parent,r.push(n);for(var i=r.length;t!==e;)r.splice(i,0,t),t=t.parent;return r}function ls(t,n){if(t===n)return t;var e=t.ancestors(),r=n.ancestors(),i=null;for(t=e.pop(),n=r.pop();t===n;)i=t,t=e.pop(),n=r.pop();return i}function hs(){for(var t=this,n=[t];t=t.parent;)n.push(t);return n}function ps(){var t=[];return this.each(function(n){t.push(n)}),t}function ds(){var t=[];return this.eachBefore(function(n){n.children||t.push(n)}),t}function vs(){var t=this,n=[];return t.each(function(e){e!==t&&n.push({source:e.parent,target:e})}),n}function _s(t,n){var e,r,i,o,u,a=new bs(t),c=+t.value&&(a.value=t.value),s=[a];for(null==n&&(n=gs);e=s.pop();)if(c&&(e.value=+e.data.value),(i=n(e.data))&&(u=i.length))for(e.children=new Array(u),o=u-1;o>=0;--o)s.push(r=e.children[o]=new bs(i[o])),r.parent=e,r.depth=e.depth+1;return a.eachBefore(xs)}function ys(){return _s(this).eachBefore(ms)}function gs(t){return t.children}function ms(t){t.data=t.data.data}function xs(t){var n=0;do t.height=n;while((t=t.parent)&&t.height<++n)}function bs(t){this.data=t,this.depth=this.height=0,this.parent=null}function ws(t){this._=t,this.next=null}function Ms(t){for(var n,e=(t=t.slice()).length,r=null,i=r;e;){var o=new ws(t[e-1]);i=i?i.next=o:r=o,t[n]=t[--e]}return{head:r,tail:i}}function Ts(t){return Ns(Ms(t),[])}function ks(t,n){var e=n.x-t.x,r=n.y-t.y,i=t.r-n.r;return i*i+1e-6>e*e+r*r}function Ns(t,n){var e,r,i,o=null,u=t.head;switch(n.length){case 1:e=Ss(n[0]);break;case 2:e=Es(n[0],n[1]);break;case 3:e=As(n[0],n[1],n[2])}for(;u;)i=u._,r=u.next,e&&ks(e,i)?o=u:(o?(t.tail=o,o.next=null):t.head=t.tail=null,n.push(i),e=Ns(t,n),n.pop(),t.head?(u.next=t.head,t.head=u):(u.next=null,t.head=t.tail=u),o=t.tail,o.next=r),u=r;return t.tail=o,e}function Ss(t){return{x:t.x,y:t.y,r:t.r}}function Es(t,n){var e=t.x,r=t.y,i=t.r,o=n.x,u=n.y,a=n.r,c=o-e,s=u-r,f=a-i,l=Math.sqrt(c*c+s*s);return{x:(e+o+c/l*f)/2,y:(r+u+s/l*f)/2,r:(l+i+a)/2}}function As(t,n,e){var r=t.x,i=t.y,o=t.r,u=n.x,a=n.y,c=n.r,s=e.x,f=e.y,l=e.r,h=2*(r-u),p=2*(i-a),d=2*(c-o),v=r*r+i*i-o*o-u*u-a*a+c*c,_=2*(r-s),y=2*(i-f),g=2*(l-o),m=r*r+i*i-o*o-s*s-f*f+l*l,x=_*p-h*y,b=(p*m-y*v)/x-r,w=(y*d-p*g)/x,M=(_*v-h*m)/x-i,T=(h*g-_*d)/x,k=w*w+T*T-1,N=2*(b*w+M*T+o),S=b*b+M*M-o*o,E=(-N-Math.sqrt(N*N-4*k*S))/(2*k);return{x:b+w*E+r,y:M+T*E+i,r:E}}function Cs(t,n,e){var r=t.x,i=t.y,o=n.r+e.r,u=t.r+e.r,a=n.x-r,c=n.y-i,s=a*a+c*c;if(s){var f=.5+((u*=u)-(o*=o))/(2*s),l=Math.sqrt(Math.max(0,2*o*(u+s)-(u-=s)*u-o*o))/(2*s);e.x=r+f*a+l*c,e.y=i+f*c-l*a}else e.x=r+u,e.y=i}function zs(t,n){var e=n.x-t.x,r=n.y-t.y,i=t.r+n.r;return i*i>e*e+r*r}function Ps(t,n,e){var r=t.x-n,i=t.y-e;return r*r+i*i}function Ls(t){this._=t,this.next=null,this.previous=null}function qs(t){if(!(i=t.length))return 0;var n,e,r,i;if(n=t[0],n.x=0,n.y=0,!(i>1))return n.r;if(e=t[1],n.x=-e.r,e.x=n.r,e.y=0,!(i>2))return n.r+e.r;Cs(e,n,r=t[2]);var o,u,a,c,s,f,l,h=n.r*n.r,p=e.r*e.r,d=r.r*r.r,v=h+p+d,_=h*n.x+p*e.x+d*r.x,y=h*n.y+p*e.y+d*r.y;n=new Ls(n),e=new Ls(e),r=new Ls(r),n.next=r.previous=e,e.next=n.previous=r,r.next=e.previous=n;t:for(a=3;a<i;++a){if(Cs(n._,e._,r=t[a]),r=new Ls(r),(s=n.previous)===(c=e.next)){if(zs(c._,r._)){n=e,e=c,--a;continue t}}else{f=c._.r,l=s._.r;do if(f<=l){if(zs(c._,r._)){e=c,n.next=e,e.previous=n,--a;continue t}c=c.next,f+=c._.r}else{if(zs(s._,r._)){n=s,n.next=e,e.previous=n,--a;continue t}s=s.previous,l+=s._.r}while(c!==s.next)}for(r.previous=n,r.next=e,n.next=e.previous=e=r,v+=d=r._.r*r._.r,_+=d*r._.x,y+=d*r._.y,h=Ps(n._,o=_/v,u=y/v);(r=r.next)!==e;)(d=Ps(r._,o,u))<h&&(n=r,h=d);e=n.next}for(n=[e._],r=e;(r=r.next)!==e;)n.push(r._);for(r=Ts(n),a=0;a<i;++a)n=t[a],n.x-=r.x,n.y-=r.y;return r.r}function Us(t){return qs(t),t}function Rs(t){return null==t?null:Ds(t)}function Ds(t){if("function"!=typeof t)throw new Error;return t}function Os(){return 0}function Fs(t){return function(){return t}}function Is(t){return Math.sqrt(t.value)}function Ys(){function t(t){return t.x=e/2,t.y=r/2,n?t.eachBefore(Bs(n)).eachAfter(js(i,.5)).eachBefore(Hs(1)):t.eachBefore(Bs(Is)).eachAfter(js(Os,1)).eachAfter(js(i,t.r/Math.min(e,r))).eachBefore(Hs(Math.min(e,r)/(2*t.r))),t}var n=null,e=1,r=1,i=Os;return t.radius=function(e){return arguments.length?(n=Rs(e),t):n},t.size=function(n){return arguments.length?(e=+n[0],r=+n[1],t):[e,r]},t.padding=function(n){return arguments.length?(i="function"==typeof n?n:Fs(+n),t):i},t}function Bs(t){return function(n){n.children||(n.r=Math.max(0,+t(n)||0))}}function js(t,n){return function(e){if(r=e.children){var r,i,o,u=r.length,a=t(e)*n||0;if(a)for(i=0;i<u;++i)r[i].r+=a;if(o=qs(r),a)for(i=0;i<u;++i)r[i].r-=a;e.r=o+a}}}function Hs(t){return function(n){var e=n.parent;n.r*=t,e&&(n.x=e.x+t*n.x,n.y=e.y+t*n.y)}}function Xs(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function Vs(t,n,e,r,i){for(var o,u=t.children,a=-1,c=u.length,s=t.value&&(r-n)/t.value;++a<c;)o=u[a],o.y0=e,o.y1=i,o.x0=n,o.x1=n+=o.value*s}function Ws(){function t(t){var u=t.height+1;return t.x0=t.y0=i,t.x1=e,t.y1=r/u,t.eachBefore(n(r,u)),o&&t.eachBefore(Xs),t}function n(t,n){return function(e){e.children&&Vs(e,e.x0,t*(e.depth+1)/n,e.x1,t*(e.depth+2)/n);var r=e.x0,o=e.y0,u=e.x1-i,a=e.y1-i;u<r&&(r=u=(r+u)/2),a<o&&(o=a=(o+a)/2),e.x0=r,e.y0=o,e.x1=u,e.y1=a}}var e=1,r=1,i=0,o=!1;return t.round=function(n){return arguments.length?(o=!!n,t):o},t.size=function(n){return arguments.length?(e=+n[0],r=+n[1],t):[e,r]},t.padding=function(n){return arguments.length?(i=+n,t):i},t}function $s(t){return t.id}function Zs(t){return t.parentId}function Gs(){function t(t){var r,i,o,u,a,c,s,f=t.length,l=new Array(f),h={};for(i=0;i<f;++i)r=t[i],a=l[i]=new bs(r),null!=(c=n(r,i,t))&&(c+="")&&(s=Em+(a.id=c),h[s]=s in h?Cm:a);for(i=0;i<f;++i)if(a=l[i],c=e(t[i],i,t),null!=c&&(c+="")){if(u=h[Em+c],!u)throw new Error("missing: "+c);if(u===Cm)throw new Error("ambiguous: "+c);u.children?u.children.push(a):u.children=[a],a.parent=u}else{if(o)throw new Error("multiple roots");o=a}if(!o)throw new Error("no root");if(o.parent=Am,o.eachBefore(function(t){t.depth=t.parent.depth+1,--f}).eachBefore(xs),o.parent=null,f>0)throw new Error("cycle");return o}var n=$s,e=Zs;return t.id=function(e){return arguments.length?(n=Ds(e),t):n},t.parentId=function(n){return arguments.length?(e=Ds(n),t):e},t}function Js(t,n){return t.parent===n.parent?1:2}function Qs(t){var n=t.children;return n?n[0]:t.t}function Ks(t){var n=t.children;return n?n[n.length-1]:t.t}function tf(t,n,e){var r=e/(n.i-t.i);n.c-=r,n.s+=e,t.c+=r,n.z+=e,n.m+=e}function nf(t){for(var n,e=0,r=0,i=t.children,o=i.length;--o>=0;)n=i[o],n.z+=e,n.m+=e,e+=n.s+(r+=n.c)}function ef(t,n,e){return t.a.parent===n.parent?t.a:e}function rf(t,n){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=n}function of(t){for(var n,e,r,i,o,u=new rf(t,0),a=[u];n=a.pop();)if(r=n._.children)for(n.children=new Array(o=r.length),i=o-1;i>=0;--i)a.push(e=n.children[i]=new rf(r[i],i)),e.parent=n;return(u.parent=new rf(null,0)).children=[u],u}function uf(){function t(t){var r=of(t);if(r.eachAfter(n),r.parent.m=-r.z,r.eachBefore(e),c)t.eachBefore(i);else{var s=t,f=t,l=t;t.eachBefore(function(t){t.x<s.x&&(s=t),t.x>f.x&&(f=t),t.depth>l.depth&&(l=t)});var h=s===f?1:o(s,f)/2,p=h-s.x,d=u/(f.x+h+p),v=a/(l.depth||1);t.eachBefore(function(t){t.x=(t.x+p)*d,t.y=t.depth*v})}return t}function n(t){var n=t.children,e=t.parent.children,i=t.i?e[t.i-1]:null;if(n){nf(t);var u=(n[0].z+n[n.length-1].z)/2;i?(t.z=i.z+o(t._,i._),t.m=t.z-u):t.z=u}else i&&(t.z=i.z+o(t._,i._));t.parent.A=r(t,i,t.parent.A||e[0])}function e(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function r(t,n,e){if(n){for(var r,i=t,u=t,a=n,c=i.parent.children[0],s=i.m,f=u.m,l=a.m,h=c.m;a=Ks(a),i=Qs(i),a&&i;)c=Qs(c),u=Ks(u),u.a=t,r=a.z+l-i.z-s+o(a._,i._),r>0&&(tf(ef(a,t,e),t,r),s+=r,f+=r),l+=a.m,s+=i.m,h+=c.m,f+=u.m;a&&!Ks(u)&&(u.t=a,u.m+=l-f),i&&!Qs(c)&&(c.t=i,c.m+=s-h,e=t)}return e}function i(t){t.x*=u,t.y=t.depth*a}var o=Js,u=1,a=1,c=null;return t.separation=function(n){return arguments.length?(o=n,t):o},t.size=function(n){return arguments.length?(c=!1,u=+n[0],a=+n[1],t):c?null:[u,a]},t.nodeSize=function(n){return arguments.length?(c=!0,u=+n[0],a=+n[1],t):c?[u,a]:null},t}function af(t,n,e,r,i){for(var o,u=t.children,a=-1,c=u.length,s=t.value&&(i-e)/t.value;++a<c;)o=u[a],o.x0=n,o.x1=r,o.y0=e,o.y1=e+=o.value*s}function cf(t,n,e,r,i,o){for(var u,a,c,s,f,l,h,p,d,v,_,y,g=[],m=n.children,x=0,b=m.length,w=n.value;x<b;){for(s=i-e,f=o-r,h=p=l=m[x].value,_=Math.max(f/s,s/f)/(w*t),y=l*l*_,v=Math.max(p/y,y/h),c=x+1;c<b;++c){if(l+=a=m[c].value,a<h&&(h=a),a>p&&(p=a),y=l*l*_,d=Math.max(p/y,y/h),d>v){l-=a;break}v=d}g.push(u={value:l,dice:s<f,children:m.slice(x,c)}),u.dice?Vs(u,e,r,i,w?r+=f*l/w:o):af(u,e,r,w?e+=s*l/w:i,o),w-=l,x=c}return g}function sf(){function t(t){return t.x0=t.y0=0,t.x1=i,t.y1=o,t.eachBefore(n),u=[0],r&&t.eachBefore(Xs),t}function n(t){var n=u[t.depth],r=t.x0+n,i=t.y0+n,o=t.x1-n,h=t.y1-n;o<r&&(r=o=(r+o)/2),h<i&&(i=h=(i+h)/2),t.x0=r,t.y0=i,t.x1=o,t.y1=h,t.children&&(n=u[t.depth+1]=a(t)/2,r+=l(t)-n,i+=c(t)-n,o-=s(t)-n,h-=f(t)-n,o<r&&(r=o=(r+o)/2),h<i&&(i=h=(i+h)/2),e(t,r,i,o,h))}var e=Pm,r=!1,i=1,o=1,u=[0],a=Os,c=Os,s=Os,f=Os,l=Os;return t.round=function(n){
+return arguments.length?(r=!!n,t):r},t.size=function(n){return arguments.length?(i=+n[0],o=+n[1],t):[i,o]},t.tile=function(n){return arguments.length?(e=Ds(n),t):e},t.padding=function(n){return arguments.length?t.paddingInner(n).paddingOuter(n):t.paddingInner()},t.paddingInner=function(n){return arguments.length?(a="function"==typeof n?n:Fs(+n),t):a},t.paddingOuter=function(n){return arguments.length?t.paddingTop(n).paddingRight(n).paddingBottom(n).paddingLeft(n):t.paddingTop()},t.paddingTop=function(n){return arguments.length?(c="function"==typeof n?n:Fs(+n),t):c},t.paddingRight=function(n){return arguments.length?(s="function"==typeof n?n:Fs(+n),t):s},t.paddingBottom=function(n){return arguments.length?(f="function"==typeof n?n:Fs(+n),t):f},t.paddingLeft=function(n){return arguments.length?(l="function"==typeof n?n:Fs(+n),t):l},t}function ff(t,n,e,r,i){function o(t,n,e,r,i,u,a){if(t>=n-1){var s=c[t];return s.x0=r,s.y0=i,s.x1=u,s.y1=a,void 0}for(var l=f[t],h=e/2+l,p=t+1,d=n-1;p<d;){var v=p+d>>>1;f[v]<h?p=v+1:d=v}var _=f[p]-l,y=e-_;if(a-i>u-r){var g=(i*y+a*_)/e;o(t,p,_,r,i,u,g),o(p,n,y,r,g,u,a)}else{var m=(r*y+u*_)/e;o(t,p,_,r,i,m,a),o(p,n,y,m,i,u,a)}}var u,a,c=t.children,s=c.length,f=new Array(s+1);for(f[0]=a=u=0;u<s;++u)f[u+1]=a+=c[u].value;o(0,s,t.value,n,e,r,i)}function lf(t,n,e,r,i){(1&t.depth?af:Vs)(t,n,e,r,i)}function hf(t,n){function e(){var e,i,o=r.length,u=0,a=0;for(e=0;e<o;++e)i=r[e],u+=i.x,a+=i.y;for(u=u/o-t,a=a/o-n,e=0;e<o;++e)i=r[e],i.x-=u,i.y-=a}var r;return null==t&&(t=0),null==n&&(n=0),e.initialize=function(t){r=t},e.x=function(n){return arguments.length?(t=+n,e):t},e.y=function(t){return arguments.length?(n=+t,e):n},e}function pf(t){return function(){return t}}function df(){return 1e-6*(Math.random()-.5)}function vf(t){return t.x+t.vx}function _f(t){return t.y+t.vy}function yf(t){function n(){function t(t,e,r,i,u){var a=t.data,p=t.r,d=l+p;{if(!a)return e>s+d||i<s-d||r>f+d||u<f-d;if(a.index>n){var v=s-a.x-a.vx,_=f-a.y-a.vy,y=v*v+_*_;y<d*d&&(0===v&&(v=df(),y+=v*v),0===_&&(_=df(),y+=_*_),y=(d-(y=Math.sqrt(y)))/y*o,c.vx+=(v*=y)*(d=(p*=p)/(h+p)),c.vy+=(_*=y)*d,a.vx-=v*(d=1-d),a.vy-=_*d)}}}for(var n,a,c,s,f,l,h,p=r.length,d=0;d<u;++d)for(a=jt(r,vf,_f).visitAfter(e),n=0;n<p;++n)c=r[n],l=i[n],h=l*l,s=c.x+c.vx,f=c.y+c.vy,a.visit(t)}function e(t){if(t.data)return t.r=i[t.data.index];for(var n=t.r=0;n<4;++n)t[n]&&t[n].r>t.r&&(t.r=t[n].r)}var r,i,o=1,u=1;return"function"!=typeof t&&(t=pf(null==t?1:+t)),n.initialize=function(n){var e,o=(r=n).length;for(i=new Array(o),e=0;e<o;++e)i[e]=+t(r[e],e,r)},n.iterations=function(t){return arguments.length?(u=+t,n):u},n.strength=function(t){return arguments.length?(o=+t,n):o},n.radius=function(e){return arguments.length?(t="function"==typeof e?e:pf(+e),n):t},n}function gf(t,n){return n}function mf(t){function n(t){return 1/Math.min(s[t.source.index],s[t.target.index])}function e(n){for(var e=0,r=t.length;e<d;++e)for(var i,o,c,s,l,h,p,v=0;v<r;++v)i=t[v],o=i.source,c=i.target,s=c.x+c.vx-o.x-o.vx||df(),l=c.y+c.vy-o.y-o.vy||df(),h=Math.sqrt(s*s+l*l),h=(h-a[v])/h*n*u[v],s*=h,l*=h,c.vx-=s*(p=f[v]),c.vy-=l*p,o.vx+=s*(p=1-p),o.vy+=l*p}function r(){if(c){var n,e,r=c.length,h=t.length,p=L(c,l);for(n=0,s=new Array(r);n<r;++n)s[n]=0;for(n=0;n<h;++n)e=t[n],e.index=n,"object"!=typeof e.source&&(e.source=p.get(e.source)),"object"!=typeof e.target&&(e.target=p.get(e.target)),++s[e.source.index],++s[e.target.index];for(n=0,f=new Array(h);n<h;++n)e=t[n],f[n]=s[e.source.index]/(s[e.source.index]+s[e.target.index]);u=new Array(h),i(),a=new Array(h),o()}}function i(){if(c)for(var n=0,e=t.length;n<e;++n)u[n]=+h(t[n],n,t)}function o(){if(c)for(var n=0,e=t.length;n<e;++n)a[n]=+p(t[n],n,t)}var u,a,c,s,f,l=gf,h=n,p=pf(30),d=1;return null==t&&(t=[]),e.initialize=function(t){c=t,r()},e.links=function(n){return arguments.length?(t=n,r(),e):t},e.id=function(t){return arguments.length?(l=t,e):l},e.iterations=function(t){return arguments.length?(d=+t,e):d},e.strength=function(t){return arguments.length?(h="function"==typeof t?t:pf(+t),i(),e):h},e.distance=function(t){return arguments.length?(p="function"==typeof t?t:pf(+t),o(),e):p},e}function xf(t){return t.x}function bf(t){return t.y}function wf(t){function n(){e(),p.call("tick",o),u<a&&(h.stop(),p.call("end",o))}function e(){var n,e,r=t.length;for(u+=(s-u)*c,l.each(function(t){t(u)}),n=0;n<r;++n)e=t[n],null==e.fx?e.x+=e.vx*=f:(e.x=e.fx,e.vx=0),null==e.fy?e.y+=e.vy*=f:(e.y=e.fy,e.vy=0)}function r(){for(var n,e=0,r=t.length;e<r;++e){if(n=t[e],n.index=e,isNaN(n.x)||isNaN(n.y)){var i=qm*Math.sqrt(e),o=e*Um;n.x=i*Math.cos(o),n.y=i*Math.sin(o)}(isNaN(n.vx)||isNaN(n.vy))&&(n.vx=n.vy=0)}}function i(n){return n.initialize&&n.initialize(t),n}var o,u=1,a=.001,c=1-Math.pow(a,1/300),s=0,f=.6,l=L(),h=Ir(n),p=wr("tick","end");return null==t&&(t=[]),r(),o={tick:e,restart:function(){return h.restart(n),o},stop:function(){return h.stop(),o},nodes:function(n){return arguments.length?(t=n,r(),l.each(i),o):t},alpha:function(t){return arguments.length?(u=+t,o):u},alphaMin:function(t){return arguments.length?(a=+t,o):a},alphaDecay:function(t){return arguments.length?(c=+t,o):+c},alphaTarget:function(t){return arguments.length?(s=+t,o):s},velocityDecay:function(t){return arguments.length?(f=1-t,o):1-f},force:function(t,n){return arguments.length>1?(null==n?l.remove(t):l.set(t,i(n)),o):l.get(t)},find:function(n,e,r){var i,o,u,a,c,s=0,f=t.length;for(null==r?r=1/0:r*=r,s=0;s<f;++s)a=t[s],i=n-a.x,o=e-a.y,u=i*i+o*o,u<r&&(c=a,r=u);return c},on:function(t,n){return arguments.length>1?(p.on(t,n),o):p.on(t)}}}function Mf(){function t(t){var n,a=i.length,c=jt(i,xf,bf).visitAfter(e);for(u=t,n=0;n<a;++n)o=i[n],c.visit(r)}function n(){if(i){var t,n=i.length;for(a=new Array(n),t=0;t<n;++t)a[t]=+c(i[t],t,i)}}function e(t){var n,e,r,i,o,u=0;if(t.length){for(r=i=o=0;o<4;++o)(n=t[o])&&(e=n.value)&&(u+=e,r+=e*n.x,i+=e*n.y);t.x=r/u,t.y=i/u}else{n=t,n.x=n.data.x,n.y=n.data.y;do u+=a[n.data.index];while(n=n.next)}t.value=u}function r(t,n,e,r){if(!t.value)return!0;var i=t.x-o.x,c=t.y-o.y,h=r-n,p=i*i+c*c;if(h*h/l<p)return p<f&&(0===i&&(i=df(),p+=i*i),0===c&&(c=df(),p+=c*c),p<s&&(p=Math.sqrt(s*p)),o.vx+=i*t.value*u/p,o.vy+=c*t.value*u/p),!0;if(!(t.length||p>=f)){(t.data!==o||t.next)&&(0===i&&(i=df(),p+=i*i),0===c&&(c=df(),p+=c*c),p<s&&(p=Math.sqrt(s*p)));do t.data!==o&&(h=a[t.data.index]*u/p,o.vx+=i*h,o.vy+=c*h);while(t=t.next)}}var i,o,u,a,c=pf(-30),s=1,f=1/0,l=.81;return t.initialize=function(t){i=t,n()},t.strength=function(e){return arguments.length?(c="function"==typeof e?e:pf(+e),n(),t):c},t.distanceMin=function(n){return arguments.length?(s=n*n,t):Math.sqrt(s)},t.distanceMax=function(n){return arguments.length?(f=n*n,t):Math.sqrt(f)},t.theta=function(n){return arguments.length?(l=n*n,t):Math.sqrt(l)},t}function Tf(t){function n(t){for(var n,e=0,u=r.length;e<u;++e)n=r[e],n.vx+=(o[e]-n.x)*i[e]*t}function e(){if(r){var n,e=r.length;for(i=new Array(e),o=new Array(e),n=0;n<e;++n)i[n]=isNaN(o[n]=+t(r[n],n,r))?0:+u(r[n],n,r)}}var r,i,o,u=pf(.1);return"function"!=typeof t&&(t=pf(null==t?0:+t)),n.initialize=function(t){r=t,e()},n.strength=function(t){return arguments.length?(u="function"==typeof t?t:pf(+t),e(),n):u},n.x=function(r){return arguments.length?(t="function"==typeof r?r:pf(+r),e(),n):t},n}function kf(t){function n(t){for(var n,e=0,u=r.length;e<u;++e)n=r[e],n.vy+=(o[e]-n.y)*i[e]*t}function e(){if(r){var n,e=r.length;for(i=new Array(e),o=new Array(e),n=0;n<e;++n)i[n]=isNaN(o[n]=+t(r[n],n,r))?0:+u(r[n],n,r)}}var r,i,o,u=pf(.1);return"function"!=typeof t&&(t=pf(null==t?0:+t)),n.initialize=function(t){r=t,e()},n.strength=function(t){return arguments.length?(u="function"==typeof t?t:pf(+t),e(),n):u},n.y=function(r){return arguments.length?(t="function"==typeof r?r:pf(+r),e(),n):t},n}function Nf(){t.event.stopImmediatePropagation()}function Sf(){t.event.preventDefault(),t.event.stopImmediatePropagation()}function Ef(t){var n=t.document.documentElement,e=qa(t).on("dragstart.drag",Sf,!0);"onselectstart"in n?e.on("selectstart.drag",Sf,!0):(n.__noselect=n.style.MozUserSelect,n.style.MozUserSelect="none")}function Af(t,n){var e=t.document.documentElement,r=qa(t).on("dragstart.drag",null);n&&(r.on("click.drag",Sf,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in e?r.on("selectstart.drag",null):(e.style.MozUserSelect=e.__noselect,delete e.__noselect)}function Cf(t){return function(){return t}}function zf(t,n,e,r,i,o,u,a,c,s){this.target=t,this.type=n,this.subject=e,this.identifier=r,this.active=i,this.x=o,this.y=u,this.dx=a,this.dy=c,this._=s}function Pf(){return!t.event.button}function Lf(){return this.parentNode}function qf(n){return null==n?{x:t.event.x,y:t.event.y}:n}function Uf(){function n(t){t.on("mousedown.drag",e).on("touchstart.drag",o).on("touchmove.drag",u).on("touchend.drag touchcancel.drag",a).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function e(){if(!f&&l.apply(this,arguments)){var n=c("mouse",h.apply(this,arguments),pu,this,arguments);n&&(qa(t.event.view).on("mousemove.drag",r,!0).on("mouseup.drag",i,!0),Ef(t.event.view),Nf(),s=!1,n("start"))}}function r(){Sf(),s=!0,d.mouse("drag")}function i(){qa(t.event.view).on("mousemove.drag mouseup.drag",null),Af(t.event.view,s),Sf(),d.mouse("end")}function o(){if(l.apply(this,arguments)){var n,e,r=t.event.changedTouches,i=h.apply(this,arguments),o=r.length;for(n=0;n<o;++n)(e=c(r[n].identifier,i,Ra,this,arguments))&&(Nf(),e("start"))}}function u(){var n,e,r=t.event.changedTouches,i=r.length;for(n=0;n<i;++n)(e=d[r[n].identifier])&&(Sf(),e("drag"))}function a(){var n,e,r=t.event.changedTouches,i=r.length;for(f&&clearTimeout(f),f=setTimeout(function(){f=null},500),n=0;n<i;++n)(e=d[r[n].identifier])&&(Nf(),e("end"))}function c(e,r,i,o,u){var a,c,s,f=i(r,e),l=v.copy();if(fu(new zf(n,"beforestart",a,e,_,f[0],f[1],0,0,l),function(){return null!=(t.event.subject=a=p.apply(o,u))&&(c=a.x-f[0]||0,s=a.y-f[1]||0,!0)}))return function h(t){var p,v=f;switch(t){case"start":d[e]=h,p=_++;break;case"end":delete d[e],--_;case"drag":f=i(r,e),p=_}fu(new zf(n,t,a,e,p,f[0]+c,f[1]+s,f[0]-v[0],f[1]-v[1],l),l.apply,l,[t,o,u])}}var s,f,l=Pf,h=Lf,p=qf,d={},v=wr("start","drag","end"),_=0;return n.filter=function(t){return arguments.length?(l="function"==typeof t?t:Cf(!!t),n):l},n.container=function(t){return arguments.length?(h="function"==typeof t?t:Cf(t),n):h},n.subject=function(t){return arguments.length?(p="function"==typeof t?t:Cf(t),n):p},n.on=function(){var t=v.on.apply(v,arguments);return t===v?n:t},n}function Rf(t){return function(){return t}}function Df(t){return t[0]}function Of(t){return t[1]}function Ff(){this._=null}function If(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function Yf(t,n){var e=n,r=n.R,i=e.U;i?i.L===e?i.L=r:i.R=r:t._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function Bf(t,n){var e=n,r=n.L,i=e.U;i?i.L===e?i.L=r:i.R=r:t._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function jf(t){for(;t.L;)t=t.L;return t}function Hf(t,n,e,r){var i=[null,null],o=Im.push(i)-1;return i.left=t,i.right=n,e&&Vf(i,t,n,e),r&&Vf(i,n,t,r),Om[t.index].halfedges.push(o),Om[n.index].halfedges.push(o),i}function Xf(t,n,e){var r=[n,e];return r.left=t,r}function Vf(t,n,e,r){t[0]||t[1]?t.left===e?t[1]=r:t[0]=r:(t[0]=r,t.left=n,t.right=e)}function Wf(t,n,e,r,i){var o,u=t[0],a=t[1],c=u[0],s=u[1],f=a[0],l=a[1],h=0,p=1,d=f-c,v=l-s;if(o=n-c,d||!(o>0)){if(o/=d,d<0){if(o<h)return;o<p&&(p=o)}else if(d>0){if(o>p)return;o>h&&(h=o)}if(o=r-c,d||!(o<0)){if(o/=d,d<0){if(o>p)return;o>h&&(h=o)}else if(d>0){if(o<h)return;o<p&&(p=o)}if(o=e-s,v||!(o>0)){if(o/=v,v<0){if(o<h)return;o<p&&(p=o)}else if(v>0){if(o>p)return;o>h&&(h=o)}if(o=i-s,v||!(o<0)){if(o/=v,v<0){if(o>p)return;o>h&&(h=o)}else if(v>0){if(o<h)return;o<p&&(p=o)}return!(h>0||p<1)||(h>0&&(t[0]=[c+h*d,s+h*v]),p<1&&(t[1]=[c+p*d,s+p*v]),!0)}}}}}function $f(t,n,e,r,i){var o=t[1];if(o)return!0;var u,a,c=t[0],s=t.left,f=t.right,l=s[0],h=s[1],p=f[0],d=f[1],v=(l+p)/2,_=(h+d)/2;if(d===h){if(v<n||v>=r)return;if(l>p){if(c){if(c[1]>=i)return}else c=[v,e];o=[v,i]}else{if(c){if(c[1]<e)return}else c=[v,i];o=[v,e]}}else if(u=(l-p)/(d-h),a=_-u*v,u<-1||u>1)if(l>p){if(c){if(c[1]>=i)return}else c=[(e-a)/u,e];o=[(i-a)/u,i]}else{if(c){if(c[1]<e)return}else c=[(i-a)/u,i];o=[(e-a)/u,e]}else if(h<d){if(c){if(c[0]>=r)return}else c=[n,u*n+a];o=[r,u*r+a]}else{if(c){if(c[0]<n)return}else c=[r,u*r+a];o=[n,u*n+a]}return t[0]=c,t[1]=o,!0}function Zf(t,n,e,r){for(var i,o=Im.length;o--;)$f(i=Im[o],t,n,e,r)&&Wf(i,t,n,e,r)&&(Math.abs(i[0][0]-i[1][0])>jm||Math.abs(i[0][1]-i[1][1])>jm)||delete Im[o]}function Gf(t){return Om[t.index]={site:t,halfedges:[]}}function Jf(t,n){var e=t.site,r=n.left,i=n.right;return e===i&&(i=r,r=e),i?Math.atan2(i[1]-r[1],i[0]-r[0]):(e===r?(r=n[1],i=n[0]):(r=n[0],i=n[1]),Math.atan2(r[0]-i[0],i[1]-r[1]))}function Qf(t,n){return n[+(n.left!==t.site)]}function Kf(t,n){return n[+(n.left===t.site)]}function tl(){for(var t,n,e,r,i=0,o=Om.length;i<o;++i)if((t=Om[i])&&(r=(n=t.halfedges).length)){var u=new Array(r),a=new Array(r);for(e=0;e<r;++e)u[e]=e,a[e]=Jf(t,Im[n[e]]);for(u.sort(function(t,n){return a[n]-a[t]}),e=0;e<r;++e)a[e]=n[u[e]];for(e=0;e<r;++e)n[e]=a[e]}}function nl(t,n,e,r){var i,o,u,a,c,s,f,l,h,p,d,v,_=Om.length,y=!0;for(i=0;i<_;++i)if(o=Om[i]){for(u=o.site,c=o.halfedges,a=c.length;a--;)Im[c[a]]||c.splice(a,1);for(a=0,s=c.length;a<s;)p=Kf(o,Im[c[a]]),d=p[0],v=p[1],f=Qf(o,Im[c[++a%s]]),l=f[0],h=f[1],(Math.abs(d-l)>jm||Math.abs(v-h)>jm)&&(c.splice(a,0,Im.push(Xf(u,p,Math.abs(d-t)<jm&&r-v>jm?[t,Math.abs(l-t)<jm?h:r]:Math.abs(v-r)<jm&&e-d>jm?[Math.abs(h-r)<jm?l:e,r]:Math.abs(d-e)<jm&&v-n>jm?[e,Math.abs(l-e)<jm?h:n]:Math.abs(v-n)<jm&&d-t>jm?[Math.abs(h-n)<jm?l:t,n]:null))-1),++s);s&&(y=!1)}if(y){var g,m,x,b=1/0;for(i=0,y=null;i<_;++i)(o=Om[i])&&(u=o.site,g=u[0]-t,m=u[1]-n,x=g*g+m*m,x<b&&(b=x,y=o));if(y){var w=[t,n],M=[t,r],T=[e,r],k=[e,n];y.halfedges.push(Im.push(Xf(u=y.site,w,M))-1,Im.push(Xf(u,M,T))-1,Im.push(Xf(u,T,k))-1,Im.push(Xf(u,k,w))-1)}}for(i=0;i<_;++i)(o=Om[i])&&(o.halfedges.length||delete Om[i])}function el(){If(this),this.x=this.y=this.arc=this.site=this.cy=null}function rl(t){var n=t.P,e=t.N;if(n&&e){var r=n.site,i=t.site,o=e.site;if(r!==o){var u=i[0],a=i[1],c=r[0]-u,s=r[1]-a,f=o[0]-u,l=o[1]-a,h=2*(c*l-s*f);if(!(h>=-Hm)){var p=c*c+s*s,d=f*f+l*l,v=(l*p-s*d)/h,_=(c*d-f*p)/h,y=Ym.pop()||new el;y.arc=t,y.site=i,y.x=v+u,y.y=(y.cy=_+a)+Math.sqrt(v*v+_*_),t.circle=y;for(var g=null,m=Fm._;m;)if(y.y<m.y||y.y===m.y&&y.x<=m.x){if(!m.L){g=m.P;break}m=m.L}else{if(!m.R){g=m;break}m=m.R}Fm.insert(g,y),g||(Rm=y)}}}}function il(t){var n=t.circle;n&&(n.P||(Rm=n.N),Fm.remove(n),Ym.push(n),If(n),t.circle=null)}function ol(){If(this),this.edge=this.site=this.circle=null}function ul(t){var n=Bm.pop()||new ol;return n.site=t,n}function al(t){il(t),Dm.remove(t),Bm.push(t),If(t)}function cl(t){var n=t.circle,e=n.x,r=n.cy,i=[e,r],o=t.P,u=t.N,a=[t];al(t);for(var c=o;c.circle&&Math.abs(e-c.circle.x)<jm&&Math.abs(r-c.circle.cy)<jm;)o=c.P,a.unshift(c),al(c),c=o;a.unshift(c),il(c);for(var s=u;s.circle&&Math.abs(e-s.circle.x)<jm&&Math.abs(r-s.circle.cy)<jm;)u=s.N,a.push(s),al(s),s=u;a.push(s),il(s);var f,l=a.length;for(f=1;f<l;++f)s=a[f],c=a[f-1],Vf(s.edge,c.site,s.site,i);c=a[0],s=a[l-1],s.edge=Hf(c.site,s.site,null,i),rl(c),rl(s)}function sl(t){for(var n,e,r,i,o=t[0],u=t[1],a=Dm._;a;)if(r=fl(a,u)-o,r>jm)a=a.L;else{if(i=o-ll(a,u),!(i>jm)){r>-jm?(n=a.P,e=a):i>-jm?(n=a,e=a.N):n=e=a;break}if(!a.R){n=a;break}a=a.R}Gf(t);var c=ul(t);if(Dm.insert(n,c),n||e){if(n===e)return il(n),e=ul(n.site),Dm.insert(c,e),c.edge=e.edge=Hf(n.site,c.site),rl(n),void rl(e);if(!e)return void(c.edge=Hf(n.site,c.site));il(n),il(e);var s=n.site,f=s[0],l=s[1],h=t[0]-f,p=t[1]-l,d=e.site,v=d[0]-f,_=d[1]-l,y=2*(h*_-p*v),g=h*h+p*p,m=v*v+_*_,x=[(_*g-p*m)/y+f,(h*m-v*g)/y+l];Vf(e.edge,s,d,x),c.edge=Hf(s,t,null,x),e.edge=Hf(t,d,null,x),rl(n),rl(e)}}function fl(t,n){var e=t.site,r=e[0],i=e[1],o=i-n;if(!o)return r;var u=t.P;if(!u)return-(1/0);e=u.site;var a=e[0],c=e[1],s=c-n;if(!s)return a;var f=a-r,l=1/o-1/s,h=f/s;return l?(-h+Math.sqrt(h*h-2*l*(f*f/(-2*s)-c+s/2+i-o/2)))/l+r:(r+a)/2}function ll(t,n){var e=t.N;if(e)return fl(e,n);var r=t.site;return r[1]===n?r[0]:1/0}function hl(t,n,e){return(t[0]-e[0])*(n[1]-t[1])-(t[0]-n[0])*(e[1]-t[1])}function pl(t,n){return n[1]-t[1]||n[0]-t[0]}function dl(t,n){var e,r,i,o=t.sort(pl).pop();for(Im=[],Om=new Array(t.length),Dm=new Ff,Fm=new Ff;;)if(i=Rm,o&&(!i||o[1]<i.y||o[1]===i.y&&o[0]<i.x))o[0]===e&&o[1]===r||(sl(o),e=o[0],r=o[1]),o=t.pop();else{if(!i)break;cl(i.arc)}if(tl(),n){var u=+n[0][0],a=+n[0][1],c=+n[1][0],s=+n[1][1];Zf(u,a,c,s),nl(u,a,c,s)}this.edges=Im,this.cells=Om,Dm=Fm=Im=Om=null}function vl(){function t(t){return new dl(t.map(function(r,i){var o=[Math.round(n(r,i,t)/jm)*jm,Math.round(e(r,i,t)/jm)*jm];return o.index=i,o.data=r,o}),r)}var n=Df,e=Of,r=null;return t.polygons=function(n){return t(n).polygons()},t.links=function(n){return t(n).links()},t.triangles=function(n){return t(n).triangles()},t.x=function(e){return arguments.length?(n="function"==typeof e?e:Rf(+e),t):n},t.y=function(n){return arguments.length?(e="function"==typeof n?n:Rf(+n),t):e},t.extent=function(n){return arguments.length?(r=null==n?null:[[+n[0][0],+n[0][1]],[+n[1][0],+n[1][1]]],t):r&&[[r[0][0],r[0][1]],[r[1][0],r[1][1]]]},t.size=function(n){return arguments.length?(r=null==n?null:[[0,0],[+n[0],+n[1]]],t):r&&[r[1][0],r[1][1]]},t}function _l(t){return function(){return t}}function yl(t,n,e){this.target=t,this.type=n,this.transform=e}function gl(t,n,e){this.k=t,this.x=n,this.y=e}function ml(t){return t.__zoom||Xm}function xl(){t.event.stopImmediatePropagation()}function bl(){t.event.preventDefault(),t.event.stopImmediatePropagation()}function wl(){return!t.event.button}function Ml(){var t,n,e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,t=e.width.baseVal.value,n=e.height.baseVal.value):(t=e.clientWidth,n=e.clientHeight),[[0,0],[t,n]]}function Tl(){return this.__zoom||Xm}function kl(){function n(t){t.on("wheel.zoom",s).on("mousedown.zoom",f).on("dblclick.zoom",l).on("touchstart.zoom",h).on("touchmove.zoom",p).on("touchend.zoom touchcancel.zoom",d).style("-webkit-tap-highlight-color","rgba(0,0,0,0)").property("__zoom",Tl)}function e(t,n){return n=Math.max(M,Math.min(T,n)),n===t.k?t:new gl(n,t.x,t.y)}function r(t,n,e){var r=n[0]-e[0]*t.k,i=n[1]-e[1]*t.k;return r===t.x&&i===t.y?t:new gl(t.k,r,i)}function i(t,n){var e=Math.min(0,t.invertX(n[0][0])-k)||Math.max(0,t.invertX(n[1][0])-N),r=Math.min(0,t.invertY(n[0][1])-S)||Math.max(0,t.invertY(n[1][1])-E);return e||r?t.translate(e,r):t}function o(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function u(t,n,e){t.on("start.zoom",function(){a(this,arguments).start()}).on("interrupt.zoom end.zoom",function(){a(this,arguments).end()}).tween("zoom",function(){var t=this,r=arguments,i=a(t,r),u=w.apply(t,r),c=e||o(u),s=Math.max(u[1][0]-u[0][0],u[1][1]-u[0][1]),f=t.__zoom,l="function"==typeof n?n.apply(t,r):n,h=_r(f.invert(c).concat(s/f.k),l.invert(c).concat(s/l.k));return function(t){if(1===t)t=l;else{var n=h(t),e=s/n[2];t=new gl(e,c[0]-n[0]*e,c[1]-n[1]*e)}i.zoom(null,t)}})}function a(t,n){for(var e,r=0,i=C.length;r<i;++r)if((e=C[r]).that===t)return e;return new c(t,n)}function c(t,n){this.that=t,this.args=n,this.index=-1,this.active=0}function s(){function n(){x=null,o.end()}if(b.apply(this,arguments)){var o=a(this,arguments),u=this.__zoom,c=Math.max(M,Math.min(T,u.k*Math.pow(2,-t.event.deltaY*(t.event.deltaMode?120:1)/500)));if(x){var s=pu(this);_[0]===s[0]&&_[1]===s[1]||(y=u.invert(_=s)),clearTimeout(x)}else{if(u.k===c)return;o.extent=w.apply(this,arguments),y=u.invert(_=pu(this)),ja(this),o.start()}bl(),x=setTimeout(n,L),o.zoom("mouse",i(r(e(u,c),_,y),o.extent))}}function f(){function n(){bl(),v=!0,o.zoom("mouse",i(r(o.that.__zoom,_=pu(o.that),y),o.extent))}function e(){u.on("mousemove.zoom mouseup.zoom",null),Af(t.event.view,v),bl(),o.end()}if(!m&&b.apply(this,arguments)){var o=a(this,arguments),u=qa(t.event.view).on("mousemove.zoom",n,!0).on("mouseup.zoom",e,!0);Ef(t.event.view),xl(),v=!1,o.extent=w.apply(this,arguments),y=this.__zoom.invert(_=pu(this)),ja(this),o.start()}}function l(){if(b.apply(this,arguments)){var o=this.__zoom,a=pu(this),c=o.invert(a),s=o.k*(t.event.shiftKey?.5:2),f=i(r(e(o,s),a,c),w.apply(this,arguments));bl(),A>0?qa(this).transition().duration(A).call(u,f,a):qa(this).call(n.transform,f)}}function h(){if(b.apply(this,arguments)){var n,e,r,i=a(this,arguments),o=t.event.changedTouches,u=o.length;for(xl(),n=0;n<u;++n)e=o[n],r=Ra(this,o,e.identifier),r=[r,this.__zoom.invert(r),e.identifier],i.touch0?i.touch1||(i.touch1=r):i.touch0=r;return g&&(g=clearTimeout(g),!i.touch1)?(i.end(),l.apply(this,arguments)):void(t.event.touches.length===u&&(g=setTimeout(function(){g=null},P),ja(this),i.extent=w.apply(this,arguments),i.start()))}}function p(){var n,o,u,c,s=a(this,arguments),f=t.event.changedTouches,l=f.length;for(bl(),g&&(g=clearTimeout(g)),n=0;n<l;++n)o=f[n],u=Ra(this,f,o.identifier),s.touch0&&s.touch0[2]===o.identifier?s.touch0[0]=u:s.touch1&&s.touch1[2]===o.identifier&&(s.touch1[0]=u);if(o=s.that.__zoom,s.touch1){var h=s.touch0[0],p=s.touch0[1],d=s.touch1[0],v=s.touch1[1],_=(_=d[0]-h[0])*_+(_=d[1]-h[1])*_,y=(y=v[0]-p[0])*y+(y=v[1]-p[1])*y;o=e(o,Math.sqrt(_/y)),u=[(h[0]+d[0])/2,(h[1]+d[1])/2],c=[(p[0]+v[0])/2,(p[1]+v[1])/2]}else{if(!s.touch0)return;u=s.touch0[0],c=s.touch0[1]}s.zoom("touch",i(r(o,u,c),s.extent))}function d(){var n,e,r=a(this,arguments),i=t.event.changedTouches,o=i.length;for(xl(),m&&clearTimeout(m),m=setTimeout(function(){m=null},P),n=0;n<o;++n)e=i[n],r.touch0&&r.touch0[2]===e.identifier?delete r.touch0:r.touch1&&r.touch1[2]===e.identifier&&delete r.touch1;r.touch1&&!r.touch0&&(r.touch0=r.touch1,delete r.touch1),r.touch0||r.end()}var v,_,y,g,m,x,b=wl,w=Ml,M=0,T=1/0,k=-T,N=T,S=k,E=N,A=250,C=[],z=wr("start","zoom","end"),P=500,L=150;return n.transform=function(t,n){var e=t.selection?t.selection():t;e.property("__zoom",Tl),t!==e?u(t,n):e.interrupt().each(function(){a(this,arguments).start().zoom(null,"function"==typeof n?n.apply(this,arguments):n).end()})},n.scaleBy=function(t,e){n.scaleTo(t,function(){var t=this.__zoom.k,n="function"==typeof e?e.apply(this,arguments):e;return t*n})},n.scaleTo=function(t,u){n.transform(t,function(){var t=w.apply(this,arguments),n=this.__zoom,a=o(t),c=n.invert(a),s="function"==typeof u?u.apply(this,arguments):u;return i(r(e(n,s),a,c),t)})},n.translateBy=function(t,e,r){n.transform(t,function(){return i(this.__zoom.translate("function"==typeof e?e.apply(this,arguments):e,"function"==typeof r?r.apply(this,arguments):r),w.apply(this,arguments))})},c.prototype={start:function(){return 1===++this.active&&(this.index=C.push(this)-1,this.emit("start")),this},zoom:function(t,n){return _&&"mouse"!==t&&(y=n.invert(_)),this.touch0&&"touch"!==t&&(this.touch0[1]=n.invert(this.touch0[0])),this.touch1&&"touch"!==t&&(this.touch1[1]=n.invert(this.touch1[0])),this.that.__zoom=n,this.emit("zoom"),this},end:function(){return 0===--this.active&&(C.splice(this.index,1),_=y=null,this.index=-1,this.emit("end")),this},emit:function(t){fu(new yl(n,t,this.that.__zoom),z.apply,z,[t,this.that,this.args])}},n.filter=function(t){return arguments.length?(b="function"==typeof t?t:_l(!!t),n):b},n.extent=function(t){return arguments.length?(w="function"==typeof t?t:_l([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),n):w},n.scaleExtent=function(t){return arguments.length?(M=+t[0],T=+t[1],n):[M,T]},n.translateExtent=function(t){return arguments.length?(k=+t[0][0],N=+t[1][0],S=+t[0][1],E=+t[1][1],n):[[k,S],[N,E]]},n.duration=function(t){return arguments.length?(A=+t,n):A},n.on=function(){var t=z.on.apply(z,arguments);return t===z?n:t},n}function Nl(t){return function(){return t}}function Sl(t,n,e){this.target=t,this.type=n,this.selection=e}function El(){t.event.stopImmediatePropagation()}function Al(){t.event.preventDefault(),t.event.stopImmediatePropagation()}function Cl(t){return{type:t}}function zl(){return!t.event.button}function Pl(){var t=this.ownerSVGElement||this;return[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function Ll(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function ql(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function Ul(t){var n=t.__brush;return n?n.dim.output(n.selection):null}function Rl(){return Fl(Gm)}function Dl(){return Fl(Jm)}function Ol(){return Fl(Qm)}function Fl(n){function e(t){var e=t.property("__brush",a).selectAll(".overlay").data([Cl("overlay")]);e.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",Km.overlay).merge(e).each(function(){var t=Ll(this).extent;qa(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])}),t.selectAll(".selection").data([Cl("selection")]).enter().append("rect").attr("class","selection").attr("cursor",Km.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var i=t.selectAll(".handle").data(n.handles,function(t){return t.type});i.exit().remove(),i.enter().append("rect").attr("class",function(t){return"handle handle--"+t.type}).attr("cursor",function(t){return Km[t.type]}),t.each(r).attr("fill","none").attr("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush touchstart.brush",u)}function r(){var t=qa(this),n=Ll(this).selection;n?(t.selectAll(".selection").style("display",null).attr("x",n[0][0]).attr("y",n[0][1]).attr("width",n[1][0]-n[0][0]).attr("height",n[1][1]-n[0][1]),t.selectAll(".handle").style("display",null).attr("x",function(t){return"e"===t.type[t.type.length-1]?n[1][0]-h/2:n[0][0]-h/2}).attr("y",function(t){return"s"===t.type[0]?n[1][1]-h/2:n[0][1]-h/2}).attr("width",function(t){return"n"===t.type||"s"===t.type?n[1][0]-n[0][0]+h:h}).attr("height",function(t){return"e"===t.type||"w"===t.type?n[1][1]-n[0][1]+h:h})):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function i(t,n){return t.__brush.emitter||new o(t,n)}function o(t,n){this.that=t,this.args=n,this.state=t.__brush,this.active=0}function u(){function e(){var t=pu(T);!R||w||M||(Math.abs(t[0]-O[0])>Math.abs(t[1]-O[1])?M=!0:w=!0),O=t,b=!0,Al(),o()}function o(){var t;switch(m=O[0]-D[0],x=O[1]-D[1],N){case Wm:case Vm:S&&(m=Math.max(P-l,Math.min(q-v,m)),h=l+m,_=v+m),E&&(x=Math.max(L-p,Math.min(U-y,x)),d=p+x,g=y+x);break;case $m:S<0?(m=Math.max(P-l,Math.min(q-l,m)),h=l+m,_=v):S>0&&(m=Math.max(P-v,Math.min(q-v,m)),h=l,_=v+m),E<0?(x=Math.max(L-p,Math.min(U-p,x)),d=p+x,g=y):E>0&&(x=Math.max(L-y,Math.min(U-y,x)),d=p,g=y+x);break;case Zm:S&&(h=Math.max(P,Math.min(q,l-m*S)),_=Math.max(P,Math.min(q,v+m*S))),E&&(d=Math.max(L,Math.min(U,p-x*E)),g=Math.max(L,Math.min(U,y+x*E)))}_<h&&(S*=-1,t=l,l=v,v=t,t=h,h=_,_=t,k in tx&&Y.attr("cursor",Km[k=tx[k]])),g<d&&(E*=-1,t=p,p=y,y=t,t=d,d=g,g=t,k in nx&&Y.attr("cursor",Km[k=nx[k]])),z=A.selection,w&&(h=z[0][0],_=z[1][0]),M&&(d=z[0][1],g=z[1][1]),z[0][0]===h&&z[0][1]===d&&z[1][0]===_&&z[1][1]===g||(A.selection=[[h,d],[_,g]],r.call(T),F.brush())}function u(){if(El(),t.event.touches){if(t.event.touches.length)return;c&&clearTimeout(c),c=setTimeout(function(){c=null},500),I.on("touchmove.brush touchend.brush touchcancel.brush",null)}else Af(t.event.view,b),B.on("keydown.brush keyup.brush mousemove.brush mouseup.brush",null);I.attr("pointer-events","all"),Y.attr("cursor",Km.overlay),ql(z)&&(A.selection=null,r.call(T)),F.end()}function a(){switch(t.event.keyCode){case 16:R=S&&E;break;case 18:N===$m&&(S&&(v=_-m*S,l=h+m*S),E&&(y=g-x*E,p=d+x*E),N=Zm,o());break;case 32:N!==$m&&N!==Zm||(S<0?v=_-m:S>0&&(l=h-m),E<0?y=g-x:E>0&&(p=d-x),N=Wm,Y.attr("cursor",Km.selection),o());break;default:return}Al()}function s(){switch(t.event.keyCode){case 16:R&&(w=M=R=!1,o());break;case 18:N===Zm&&(S<0?v=_:S>0&&(l=h),E<0?y=g:E>0&&(p=d),N=$m,o());break;case 32:N===Wm&&(t.event.altKey?(S&&(v=_-m*S,l=h+m*S),E&&(y=g-x*E,p=d+x*E),N=Zm):(S<0?v=_:S>0&&(l=h),E<0?y=g:E>0&&(p=d),N=$m),Y.attr("cursor",Km[k]),o());break;default:return}Al()}if(t.event.touches){if(t.event.changedTouches.length<t.event.touches.length)return Al()}else if(c)return;if(f.apply(this,arguments)){var l,h,p,d,v,_,y,g,m,x,b,w,M,T=this,k=t.event.target.__data__.type,N="selection"===(t.event.metaKey?k="overlay":k)?Vm:t.event.altKey?Zm:$m,S=n===Jm?null:ex[k],E=n===Gm?null:rx[k],A=Ll(T),C=A.extent,z=A.selection,P=C[0][0],L=C[0][1],q=C[1][0],U=C[1][1],R=S&&E&&t.event.shiftKey,D=pu(T),O=D,F=i(T,arguments).beforestart();"overlay"===k?A.selection=z=[[l=n===Jm?P:D[0],p=n===Gm?L:D[1]],[v=n===Jm?q:l,y=n===Gm?U:p]]:(l=z[0][0],p=z[0][1],v=z[1][0],y=z[1][1]),h=l,d=p,_=v,g=y;var I=qa(T).attr("pointer-events","none"),Y=I.selectAll(".overlay").attr("cursor",Km[k]);if(t.event.touches)I.on("touchmove.brush",e,!0).on("touchend.brush touchcancel.brush",u,!0);else{var B=qa(t.event.view).on("keydown.brush",a,!0).on("keyup.brush",s,!0).on("mousemove.brush",e,!0).on("mouseup.brush",u,!0);Ef(t.event.view)}El(),ja(T),r.call(T),F.start()}}function a(){var t=this.__brush||{selection:null};return t.extent=s.apply(this,arguments),t.dim=n,t}var c,s=Pl,f=zl,l=wr(e,"start","brush","end"),h=6;return e.move=function(t,e){t.selection?t.on("start.brush",function(){i(this,arguments).beforestart().start()}).on("interrupt.brush end.brush",function(){i(this,arguments).end()}).tween("brush",function(){function t(t){u.selection=1===t&&ql(s)?null:f(t),r.call(o),a.brush()}var o=this,u=o.__brush,a=i(o,arguments),c=u.selection,s=n.input("function"==typeof e?e.apply(this,arguments):e,u.extent),f=ar(c,s);return c&&s?t:t(1)}):t.each(function(){var t=this,o=arguments,u=t.__brush,a=n.input("function"==typeof e?e.apply(t,o):e,u.extent),c=i(t,o).beforestart();ja(t),u.selection=null==a||ql(a)?null:a,r.call(t),c.start().brush().end()})},o.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},brush:function(){return this.emit("brush"),this},end:function(){return 0===--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(t){fu(new Sl(e,t,n.output(this.state.selection)),l.apply,l,[t,this.that,this.args])}},e.extent=function(t){return arguments.length?(s="function"==typeof t?t:Nl([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),e):s},e.filter=function(t){return arguments.length?(f="function"==typeof t?t:Nl(!!t),e):f},e.handleSize=function(t){return arguments.length?(h=+t,e):h},e.on=function(){var t=l.on.apply(l,arguments);return t===l?e:t},e}function Il(){return new Yl}function Yl(){this.reset()}function Bl(t,n,e){var r=t.s=n+e,i=r-n,o=r-i;t.t=n-o+(e-i)}function jl(t){return t>1?0:t<-1?Yx:Math.acos(t)}function Hl(t){return t>1?Bx:t<-1?-Bx:Math.asin(t)}function Xl(t){return(t=nb(t/2))*t}function Vl(){}function Wl(t,n){t&&ub.hasOwnProperty(t.type)&&ub[t.type](t,n)}function $l(t,n,e){var r,i=-1,o=t.length-e;for(n.lineStart();++i<o;)r=t[i],n.point(r[0],r[1],r[2]);n.lineEnd()}function Zl(t,n){var e=-1,r=t.length;for(n.polygonStart();++e<r;)$l(t[e],n,1);n.polygonEnd()}function Gl(t,n){t&&ob.hasOwnProperty(t.type)?ob[t.type](t,n):Wl(t,n)}function Jl(){ab.point=Kl}function Ql(){th(ux,ax)}function Kl(t,n){ab.point=th,ux=t,ax=n,t*=Vx,n*=Vx,cx=t,sx=Gx(n=n/2+jx),fx=nb(n)}function th(t,n){t*=Vx,n*=Vx,n=n/2+jx;var e=t-cx,r=e>=0?1:-1,i=r*e,o=Gx(n),u=nb(n),a=fx*u,c=sx*o+a*Gx(i),s=a*r*nb(i);ix.add(Zx(s,c)),cx=t,sx=o,fx=u}function nh(t){return ox?ox.reset():(ox=Il(),ix=Il()),Gl(t,ab),2*ox}function eh(t){return[Zx(t[1],t[0]),Hl(t[2])]}function rh(t){var n=t[0],e=t[1],r=Gx(e);return[r*Gx(n),r*nb(n),nb(e)]}function ih(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}function oh(t,n){return[t[1]*n[2]-t[2]*n[1],t[2]*n[0]-t[0]*n[2],t[0]*n[1]-t[1]*n[0]]}function uh(t,n){t[0]+=n[0],t[1]+=n[1],t[2]+=n[2]}function ah(t,n){return[t[0]*n,t[1]*n,t[2]*n]}function ch(t){var n=rb(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=n,t[1]/=n,t[2]/=n}function sh(t,n){xx.push(bx=[lx=t,px=t]),n<hx&&(hx=n),n>dx&&(dx=n)}function fh(t,n){
+var e=rh([t*Vx,n*Vx]);if(gx){var r=oh(gx,e),i=[r[1],-r[0],0],o=oh(i,r);ch(o),o=eh(o);var u,a=t-vx,c=a>0?1:-1,s=o[0]*Xx*c,f=Wx(a)>180;f^(c*vx<s&&s<c*t)?(u=o[1]*Xx,u>dx&&(dx=u)):(s=(s+360)%360-180,f^(c*vx<s&&s<c*t)?(u=-o[1]*Xx,u<hx&&(hx=u)):(n<hx&&(hx=n),n>dx&&(dx=n))),f?t<vx?_h(lx,t)>_h(lx,px)&&(px=t):_h(t,px)>_h(lx,px)&&(lx=t):px>=lx?(t<lx&&(lx=t),t>px&&(px=t)):t>vx?_h(lx,t)>_h(lx,px)&&(px=t):_h(t,px)>_h(lx,px)&&(lx=t)}else sh(t,n);gx=e,vx=t}function lh(){cb.point=fh}function hh(){bx[0]=lx,bx[1]=px,cb.point=sh,gx=null}function ph(t,n){if(gx){var e=t-vx;mx.add(Wx(e)>180?e+(e>0?360:-360):e)}else _x=t,yx=n;ab.point(t,n),fh(t,n)}function dh(){ab.lineStart()}function vh(){ph(_x,yx),ab.lineEnd(),Wx(mx)>Fx&&(lx=-(px=180)),bx[0]=lx,bx[1]=px,gx=null}function _h(t,n){return(n-=t)<0?n+360:n}function yh(t,n){return t[0]-n[0]}function gh(t,n){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}function mh(t){var n,e,r,i,o,u,a;if(mx?mx.reset():mx=Il(),dx=px=-(lx=hx=1/0),xx=[],Gl(t,cb),e=xx.length){for(xx.sort(yh),n=1,r=xx[0],o=[r];n<e;++n)i=xx[n],gh(r,i[0])||gh(r,i[1])?(_h(r[0],i[1])>_h(r[0],r[1])&&(r[1]=i[1]),_h(i[0],r[1])>_h(r[0],r[1])&&(r[0]=i[0])):o.push(r=i);for(u=-(1/0),e=o.length-1,n=0,r=o[e];n<=e;r=i,++n)i=o[n],(a=_h(r[1],i[0]))>u&&(u=a,lx=i[0],px=r[1])}return xx=bx=null,lx===1/0||hx===1/0?[[NaN,NaN],[NaN,NaN]]:[[lx,hx],[px,dx]]}function xh(t,n){t*=Vx,n*=Vx;var e=Gx(n);bh(e*Gx(t),e*nb(t),nb(n))}function bh(t,n,e){++wx,Tx+=(t-Tx)/wx,kx+=(n-kx)/wx,Nx+=(e-Nx)/wx}function wh(){sb.point=Mh}function Mh(t,n){t*=Vx,n*=Vx;var e=Gx(n);Ux=e*Gx(t),Rx=e*nb(t),Dx=nb(n),sb.point=Th,bh(Ux,Rx,Dx)}function Th(t,n){t*=Vx,n*=Vx;var e=Gx(n),r=e*Gx(t),i=e*nb(t),o=nb(n),u=Zx(rb((u=Rx*o-Dx*i)*u+(u=Dx*r-Ux*o)*u+(u=Ux*i-Rx*r)*u),Ux*r+Rx*i+Dx*o);Mx+=u,Sx+=u*(Ux+(Ux=r)),Ex+=u*(Rx+(Rx=i)),Ax+=u*(Dx+(Dx=o)),bh(Ux,Rx,Dx)}function kh(){sb.point=xh}function Nh(){sb.point=Eh}function Sh(){Ah(Lx,qx),sb.point=xh}function Eh(t,n){Lx=t,qx=n,t*=Vx,n*=Vx,sb.point=Ah;var e=Gx(n);Ux=e*Gx(t),Rx=e*nb(t),Dx=nb(n),bh(Ux,Rx,Dx)}function Ah(t,n){t*=Vx,n*=Vx;var e=Gx(n),r=e*Gx(t),i=e*nb(t),o=nb(n),u=Rx*o-Dx*i,a=Dx*r-Ux*o,c=Ux*i-Rx*r,s=rb(u*u+a*a+c*c),f=Ux*r+Rx*i+Dx*o,l=s&&-jl(f)/s,h=Zx(s,f);Cx+=l*u,zx+=l*a,Px+=l*c,Mx+=h,Sx+=h*(Ux+(Ux=r)),Ex+=h*(Rx+(Rx=i)),Ax+=h*(Dx+(Dx=o)),bh(Ux,Rx,Dx)}function Ch(t){wx=Mx=Tx=kx=Nx=Sx=Ex=Ax=Cx=zx=Px=0,Gl(t,sb);var n=Cx,e=zx,r=Px,i=n*n+e*e+r*r;return i<Ix&&(n=Sx,e=Ex,r=Ax,Mx<Fx&&(n=Tx,e=kx,r=Nx),i=n*n+e*e+r*r,i<Ix)?[NaN,NaN]:[Zx(e,n)*Xx,Hl(r/rb(i))*Xx]}function zh(t){return function(){return t}}function Ph(t,n){function e(e,r){return e=t(e,r),n(e[0],e[1])}return t.invert&&n.invert&&(e.invert=function(e,r){return e=n.invert(e,r),e&&t.invert(e[0],e[1])}),e}function Lh(t,n){return[t>Yx?t-Hx:t<-Yx?t+Hx:t,n]}function qh(t,n,e){return(t%=Hx)?n||e?Ph(Rh(t),Dh(n,e)):Rh(t):n||e?Dh(n,e):Lh}function Uh(t){return function(n,e){return n+=t,[n>Yx?n-Hx:n<-Yx?n+Hx:n,e]}}function Rh(t){var n=Uh(t);return n.invert=Uh(-t),n}function Dh(t,n){function e(t,n){var e=Gx(n),a=Gx(t)*e,c=nb(t)*e,s=nb(n),f=s*r+a*i;return[Zx(c*o-f*u,a*r-s*i),Hl(f*o+c*u)]}var r=Gx(t),i=nb(t),o=Gx(n),u=nb(n);return e.invert=function(t,n){var e=Gx(n),a=Gx(t)*e,c=nb(t)*e,s=nb(n),f=s*o-c*u;return[Zx(c*o+s*u,a*r+f*i),Hl(f*r-a*i)]},e}function Oh(t){function n(n){return n=t(n[0]*Vx,n[1]*Vx),n[0]*=Xx,n[1]*=Xx,n}return t=qh(t[0]*Vx,t[1]*Vx,t.length>2?t[2]*Vx:0),n.invert=function(n){return n=t.invert(n[0]*Vx,n[1]*Vx),n[0]*=Xx,n[1]*=Xx,n},n}function Fh(t,n,e,r,i,o){if(e){var u=Gx(n),a=nb(n),c=r*e;null==i?(i=n+r*Hx,o=n-c/2):(i=Ih(u,i),o=Ih(u,o),(r>0?i<o:i>o)&&(i+=r*Hx));for(var s,f=i;r>0?f>o:f<o;f-=c)s=eh([u,-a*Gx(f),-a*nb(f)]),t.point(s[0],s[1])}}function Ih(t,n){n=rh(n),n[0]-=t,ch(n);var e=jl(-n[1]);return((-n[2]<0?-e:e)+Hx-Fx)%Hx}function Yh(){function t(t,n){e.push(t=r(t,n)),t[0]*=Xx,t[1]*=Xx}function n(){var t=i.apply(this,arguments),n=o.apply(this,arguments)*Vx,c=u.apply(this,arguments)*Vx;return e=[],r=qh(-t[0]*Vx,-t[1]*Vx,0).invert,Fh(a,n,c,1),t={type:"Polygon",coordinates:[e]},e=r=null,t}var e,r,i=zh([0,0]),o=zh(90),u=zh(6),a={point:t};return n.center=function(t){return arguments.length?(i="function"==typeof t?t:zh([+t[0],+t[1]]),n):i},n.radius=function(t){return arguments.length?(o="function"==typeof t?t:zh(+t),n):o},n.precision=function(t){return arguments.length?(u="function"==typeof t?t:zh(+t),n):u},n}function Bh(){var t,n=[];return{point:function(n,e){t.push([n,e])},lineStart:function(){n.push(t=[])},lineEnd:Vl,rejoin:function(){n.length>1&&n.push(n.pop().concat(n.shift()))},result:function(){var e=n;return n=[],t=null,e}}}function jh(t,n,e,r,i,o){var u,a=t[0],c=t[1],s=n[0],f=n[1],l=0,h=1,p=s-a,d=f-c;if(u=e-a,p||!(u>0)){if(u/=p,p<0){if(u<l)return;u<h&&(h=u)}else if(p>0){if(u>h)return;u>l&&(l=u)}if(u=i-a,p||!(u<0)){if(u/=p,p<0){if(u>h)return;u>l&&(l=u)}else if(p>0){if(u<l)return;u<h&&(h=u)}if(u=r-c,d||!(u>0)){if(u/=d,d<0){if(u<l)return;u<h&&(h=u)}else if(d>0){if(u>h)return;u>l&&(l=u)}if(u=o-c,d||!(u<0)){if(u/=d,d<0){if(u>h)return;u>l&&(l=u)}else if(d>0){if(u<l)return;u<h&&(h=u)}return l>0&&(t[0]=a+l*p,t[1]=c+l*d),h<1&&(n[0]=a+h*p,n[1]=c+h*d),!0}}}}}function Hh(t,n){return Wx(t[0]-n[0])<Fx&&Wx(t[1]-n[1])<Fx}function Xh(t,n,e,r){this.x=t,this.z=n,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Vh(t,n,e,r,i){var o,u,a=[],c=[];if(t.forEach(function(t){if(!((n=t.length-1)<=0)){var n,e,r=t[0],u=t[n];if(Hh(r,u)){for(i.lineStart(),o=0;o<n;++o)i.point((r=t[o])[0],r[1]);return void i.lineEnd()}a.push(e=new Xh(r,t,null,(!0))),c.push(e.o=new Xh(r,null,e,(!1))),a.push(e=new Xh(u,t,null,(!1))),c.push(e.o=new Xh(u,null,e,(!0)))}}),a.length){for(c.sort(n),Wh(a),Wh(c),o=0,u=c.length;o<u;++o)c[o].e=e=!e;for(var s,f,l=a[0];;){for(var h=l,p=!0;h.v;)if((h=h.n)===l)return;s=h.z,i.lineStart();do{if(h.v=h.o.v=!0,h.e){if(p)for(o=0,u=s.length;o<u;++o)i.point((f=s[o])[0],f[1]);else r(h.x,h.n.x,1,i);h=h.n}else{if(p)for(s=h.p.z,o=s.length-1;o>=0;--o)i.point((f=s[o])[0],f[1]);else r(h.x,h.p.x,-1,i);h=h.p}h=h.o,s=h.z,p=!p}while(!h.v);i.lineEnd()}}}function Wh(t){if(n=t.length){for(var n,e,r=0,i=t[0];++r<n;)i.n=e=t[r],e.p=i,i=e;i.n=e=t[0],e.p=i}}function $h(t,n,e,r){function i(i,o){return t<=i&&i<=e&&n<=o&&o<=r}function o(i,o,a,s){var f=0,l=0;if(null==i||(f=u(i,a))!==(l=u(o,a))||c(i,o)<0^a>0){do s.point(0===f||3===f?t:e,f>1?r:n);while((f=(f+a+4)%4)!==l)}else s.point(o[0],o[1])}function u(r,i){return Wx(r[0]-t)<Fx?i>0?0:3:Wx(r[0]-e)<Fx?i>0?2:1:Wx(r[1]-n)<Fx?i>0?1:0:i>0?3:2}function a(t,n){return c(t.x,n.x)}function c(t,n){var e=u(t,1),r=u(n,1);return e!==r?e-r:0===e?n[1]-t[1]:1===e?t[0]-n[0]:2===e?t[1]-n[1]:n[0]-t[0]}return function(u){function c(t,n){i(t,n)&&S.point(t,n)}function s(){for(var n=0,e=0,i=_.length;e<i;++e)for(var o,u,a=_[e],c=1,s=a.length,f=a[0],l=f[0],h=f[1];c<s;++c)o=l,u=h,f=a[c],l=f[0],h=f[1],u<=r?h>r&&(l-o)*(r-u)>(h-u)*(t-o)&&++n:h<=r&&(l-o)*(r-u)<(h-u)*(t-o)&&--n;return n}function f(){S=E,v=[],_=[],N=!0}function l(){var t=s(),n=N&&t,e=(v=w(v)).length;(n||e)&&(u.polygonStart(),n&&(u.lineStart(),o(null,null,1,u),u.lineEnd()),e&&Vh(v,a,t,o,u),u.polygonEnd()),S=u,v=_=y=null}function h(){A.point=d,_&&_.push(y=[]),k=!0,T=!1,b=M=NaN}function p(){v&&(d(g,m),x&&T&&E.rejoin(),v.push(E.result())),A.point=c,T&&S.lineEnd()}function d(o,u){var a=i(o,u);if(_&&y.push([o,u]),k)g=o,m=u,x=a,k=!1,a&&(S.lineStart(),S.point(o,u));else if(a&&T)S.point(o,u);else{var c=[b=Math.max(Mb,Math.min(wb,b)),M=Math.max(Mb,Math.min(wb,M))],s=[o=Math.max(Mb,Math.min(wb,o)),u=Math.max(Mb,Math.min(wb,u))];jh(c,s,t,n,e,r)?(T||(S.lineStart(),S.point(c[0],c[1])),S.point(s[0],s[1]),a||S.lineEnd(),N=!1):a&&(S.lineStart(),S.point(o,u),N=!1)}b=o,M=u,T=a}var v,_,y,g,m,x,b,M,T,k,N,S=u,E=Bh(),A={point:c,lineStart:h,lineEnd:p,polygonStart:f,polygonEnd:l};return A}}function Zh(){var t,n,e,r=0,i=0,o=960,u=500;return e={stream:function(e){return t&&n===e?t:t=$h(r,i,o,u)(n=e)},extent:function(a){return arguments.length?(r=+a[0][0],i=+a[0][1],o=+a[1][0],u=+a[1][1],t=n=null,e):[[r,i],[o,u]]}}}function Gh(){Tb.point=Qh,Tb.lineEnd=Jh}function Jh(){Tb.point=Tb.lineEnd=Vl}function Qh(t,n){t*=Vx,n*=Vx,lb=t,hb=nb(n),pb=Gx(n),Tb.point=Kh}function Kh(t,n){t*=Vx,n*=Vx;var e=nb(n),r=Gx(n),i=Wx(t-lb),o=Gx(i),u=nb(i),a=r*u,c=pb*e-hb*r*o,s=hb*e+pb*r*o;fb.add(Zx(rb(a*a+c*c),s)),lb=t,hb=e,pb=r}function tp(t){return fb?fb.reset():fb=Il(),Gl(t,Tb),+fb}function np(t,n){return kb[0]=t,kb[1]=n,tp(Nb)}function ep(t,n,e){var r=l(t,n-Fx,e).concat(n);return function(t){return r.map(function(n){return[t,n]})}}function rp(t,n,e){var r=l(t,n-Fx,e).concat(n);return function(t){return r.map(function(n){return[n,t]})}}function ip(){function t(){return{type:"MultiLineString",coordinates:n()}}function n(){return l(Jx(o/y)*y,i,y).map(p).concat(l(Jx(s/g)*g,c,g).map(d)).concat(l(Jx(r/v)*v,e,v).filter(function(t){return Wx(t%y)>Fx}).map(f)).concat(l(Jx(a/_)*_,u,_).filter(function(t){return Wx(t%g)>Fx}).map(h))}var e,r,i,o,u,a,c,s,f,h,p,d,v=10,_=v,y=90,g=360,m=2.5;return t.lines=function(){return n().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[p(o).concat(d(c).slice(1),p(i).reverse().slice(1),d(s).reverse().slice(1))]}},t.extent=function(n){return arguments.length?t.extentMajor(n).extentMinor(n):t.extentMinor()},t.extentMajor=function(n){return arguments.length?(o=+n[0][0],i=+n[1][0],s=+n[0][1],c=+n[1][1],o>i&&(n=o,o=i,i=n),s>c&&(n=s,s=c,c=n),t.precision(m)):[[o,s],[i,c]]},t.extentMinor=function(n){return arguments.length?(r=+n[0][0],e=+n[1][0],a=+n[0][1],u=+n[1][1],r>e&&(n=r,r=e,e=n),a>u&&(n=a,a=u,u=n),t.precision(m)):[[r,a],[e,u]]},t.step=function(n){return arguments.length?t.stepMajor(n).stepMinor(n):t.stepMinor()},t.stepMajor=function(n){return arguments.length?(y=+n[0],g=+n[1],t):[y,g]},t.stepMinor=function(n){return arguments.length?(v=+n[0],_=+n[1],t):[v,_]},t.precision=function(n){return arguments.length?(m=+n,f=ep(a,u,90),h=rp(r,e,m),p=ep(s,c,90),d=rp(o,i,m),t):m},t.extentMajor([[-180,-90+Fx],[180,90-Fx]]).extentMinor([[-180,-80-Fx],[180,80+Fx]])}function op(t,n){var e=t[0]*Vx,r=t[1]*Vx,i=n[0]*Vx,o=n[1]*Vx,u=Gx(r),a=nb(r),c=Gx(o),s=nb(o),f=u*Gx(e),l=u*nb(e),h=c*Gx(i),p=c*nb(i),d=2*Hl(rb(Xl(o-r)+u*c*Xl(i-e))),v=nb(d),_=d?function(t){var n=nb(t*=d)/v,e=nb(d-t)/v,r=e*f+n*h,i=e*l+n*p,o=e*a+n*s;return[Zx(i,r)*Xx,Zx(o,rb(r*r+i*i))*Xx]}:function(){return[e*Xx,r*Xx]};return _.distance=d,_}function up(t){return t}function ap(){Ab.point=cp}function cp(t,n){Ab.point=sp,db=_b=t,vb=yb=n}function sp(t,n){Eb.add(yb*t-_b*n),_b=t,yb=n}function fp(){sp(db,vb)}function lp(t,n){t<Cb&&(Cb=t),t>Pb&&(Pb=t),n<zb&&(zb=n),n>Lb&&(Lb=n)}function hp(t,n){Ub+=t,Rb+=n,++Db}function pp(){Hb.point=dp}function dp(t,n){Hb.point=vp,hp(xb=t,bb=n)}function vp(t,n){var e=t-xb,r=n-bb,i=rb(e*e+r*r);Ob+=i*(xb+t)/2,Fb+=i*(bb+n)/2,Ib+=i,hp(xb=t,bb=n)}function _p(){Hb.point=hp}function yp(){Hb.point=mp}function gp(){xp(gb,mb)}function mp(t,n){Hb.point=xp,hp(gb=xb=t,mb=bb=n)}function xp(t,n){var e=t-xb,r=n-bb,i=rb(e*e+r*r);Ob+=i*(xb+t)/2,Fb+=i*(bb+n)/2,Ib+=i,i=bb*t-xb*n,Yb+=i*(xb+t),Bb+=i*(bb+n),jb+=3*i,hp(xb=t,bb=n)}function bp(t){function n(n,e){t.moveTo(n+u,e),t.arc(n,e,u,0,Hx)}function e(n,e){t.moveTo(n,e),a.point=r}function r(n,e){t.lineTo(n,e)}function i(){a.point=n}function o(){t.closePath()}var u=4.5,a={point:n,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=o},polygonEnd:function(){a.lineEnd=i,a.point=n},pointRadius:function(t){return u=t,a},result:Vl};return a}function wp(){function t(t,n){a.push("M",t,",",n,u)}function n(t,n){a.push("M",t,",",n),c.point=e}function e(t,n){a.push("L",t,",",n)}function r(){c.point=n}function i(){c.point=t}function o(){a.push("Z")}var u=Mp(4.5),a=[],c={point:t,lineStart:r,lineEnd:i,polygonStart:function(){c.lineEnd=o},polygonEnd:function(){c.lineEnd=i,c.point=t},pointRadius:function(t){return u=Mp(t),c},result:function(){if(a.length){var t=a.join("");return a=[],t}}};return c}function Mp(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Tp(){function t(t){return t&&("function"==typeof o&&i.pointRadius(+o.apply(this,arguments)),Gl(t,e(i))),i.result()}var n,e,r,i,o=4.5;return t.area=function(t){return Gl(t,e(Ab)),Ab.result()},t.bounds=function(t){return Gl(t,e(qb)),qb.result()},t.centroid=function(t){return Gl(t,e(Hb)),Hb.result()},t.projection=function(r){return arguments.length?(e=null==(n=r)?up:r.stream,t):n},t.context=function(n){return arguments.length?(i=null==(r=n)?new wp:new bp(n),"function"!=typeof o&&i.pointRadius(o),t):r},t.pointRadius=function(n){return arguments.length?(o="function"==typeof n?n:(i.pointRadius(+n),+n),t):o},t.projection(null).context(null)}function kp(t,n){for(var e=n[0],r=n[1],i=[nb(e),-Gx(e),0],o=0,u=0,a=0,c=t.length;a<c;++a)if(f=(s=t[a]).length)for(var s,f,l=s[f-1],h=l[0],p=l[1]/2+jx,d=nb(p),v=Gx(p),_=0;_<f;++_,h=g,d=x,v=b,l=y){var y=s[_],g=y[0],m=y[1]/2+jx,x=nb(m),b=Gx(m),w=g-h,M=w>=0?1:-1,T=M*w,k=T>Yx,N=d*x;if(Xb.add(Zx(N*M*nb(T),v*b+N*Gx(T))),o+=k?w+M*Hx:w,k^h>=e^g>=e){var S=oh(rh(l),rh(y));ch(S);var E=oh(i,S);ch(E);var A=(k^w>=0?-1:1)*Hl(E[2]);(r>A||r===A&&(S[0]||S[1]))&&(u+=k^w>=0?1:-1)}}var C=(o<-Fx||o<Fx&&Xb<-Fx)^1&u;return Xb.reset(),C}function Np(t,n,e,r){return function(i,o){function u(n,e){var r=i(n,e);t(n=r[0],e=r[1])&&o.point(n,e)}function a(t,n){var e=i(t,n);_.point(e[0],e[1])}function c(){b.point=a,_.lineStart()}function s(){b.point=u,_.lineEnd()}function f(t,n){v.push([t,n]);var e=i(t,n);m.point(e[0],e[1])}function l(){m.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),m.lineEnd();var t,n,e,r,i=m.clean(),u=g.result(),a=u.length;if(v.pop(),p.push(v),v=null,a)if(1&i){if(e=u[0],(n=e.length-1)>0){for(x||(o.polygonStart(),x=!0),o.lineStart(),t=0;t<n;++t)o.point((r=e[t])[0],r[1]);o.lineEnd()}}else a>1&&2&i&&u.push(u.pop().concat(u.shift())),d.push(u.filter(Sp))}var p,d,v,_=n(o),y=i.invert(r[0],r[1]),g=Bh(),m=n(g),x=!1,b={point:u,lineStart:c,lineEnd:s,polygonStart:function(){b.point=f,b.lineStart=l,b.lineEnd=h,d=[],p=[]},polygonEnd:function(){b.point=u,b.lineStart=c,b.lineEnd=s,d=w(d);var t=kp(p,y);d.length?(x||(o.polygonStart(),x=!0),Vh(d,Ep,t,e,o)):t&&(x||(o.polygonStart(),x=!0),o.lineStart(),e(null,null,1,o),o.lineEnd()),x&&(o.polygonEnd(),x=!1),d=p=null},sphere:function(){o.polygonStart(),o.lineStart(),e(null,null,1,o),o.lineEnd(),o.polygonEnd()}};return b}}function Sp(t){return t.length>1}function Ep(t,n){return((t=t.x)[0]<0?t[1]-Bx-Fx:Bx-t[1])-((n=n.x)[0]<0?n[1]-Bx-Fx:Bx-n[1])}function Ap(t){var n,e=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),n=1},point:function(o,u){var a=o>0?Yx:-Yx,c=Wx(o-e);Wx(c-Yx)<Fx?(t.point(e,r=(r+u)/2>0?Bx:-Bx),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(a,r),t.point(o,r),n=0):i!==a&&c>=Yx&&(Wx(e-i)<Fx&&(e-=i*Fx),Wx(o-a)<Fx&&(o-=a*Fx),r=Cp(e,r,o,u),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(a,r),n=0),t.point(e=o,r=u),i=a},lineEnd:function(){t.lineEnd(),e=r=NaN},clean:function(){return 2-n}}}function Cp(t,n,e,r){var i,o,u=nb(t-e);return Wx(u)>Fx?$x((nb(n)*(o=Gx(r))*nb(e)-nb(r)*(i=Gx(n))*nb(t))/(i*o*u)):(n+r)/2}function zp(t,n,e,r){var i;if(null==t)i=e*Bx,r.point(-Yx,i),r.point(0,i),r.point(Yx,i),r.point(Yx,0),r.point(Yx,-i),r.point(0,-i),r.point(-Yx,-i),r.point(-Yx,0),r.point(-Yx,i);else if(Wx(t[0]-n[0])>Fx){var o=t[0]<n[0]?Yx:-Yx;i=e*o/2,r.point(-o,i),r.point(0,i),r.point(o,i)}else r.point(n[0],n[1])}function Pp(t,n){function e(e,r,i,o){Fh(o,t,n,i,e,r)}function r(t,n){return Gx(t)*Gx(n)>a}function i(t){var n,e,i,a,f;return{lineStart:function(){a=i=!1,f=1},point:function(l,h){var p,d=[l,h],v=r(l,h),_=c?v?0:u(l,h):v?u(l+(l<0?Yx:-Yx),h):0;if(!n&&(a=i=v)&&t.lineStart(),v!==i&&(p=o(n,d),(Hh(n,p)||Hh(d,p))&&(d[0]+=Fx,d[1]+=Fx,v=r(d[0],d[1]))),v!==i)f=0,v?(t.lineStart(),p=o(d,n),t.point(p[0],p[1])):(p=o(n,d),t.point(p[0],p[1]),t.lineEnd()),n=p;else if(s&&n&&c^v){var y;_&e||!(y=o(d,n,!0))||(f=0,c?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1])))}!v||n&&Hh(n,d)||t.point(d[0],d[1]),n=d,i=v,e=_},lineEnd:function(){i&&t.lineEnd(),n=null},clean:function(){return f|(a&&i)<<1}}}function o(t,n,e){var r=rh(t),i=rh(n),o=[1,0,0],u=oh(r,i),c=ih(u,u),s=u[0],f=c-s*s;if(!f)return!e&&t;var l=a*c/f,h=-a*s/f,p=oh(o,u),d=ah(o,l),v=ah(u,h);uh(d,v);var _=p,y=ih(d,_),g=ih(_,_),m=y*y-g*(ih(d,d)-1);if(!(m<0)){var x=rb(m),b=ah(_,(-y-x)/g);if(uh(b,d),b=eh(b),!e)return b;var w,M=t[0],T=n[0],k=t[1],N=n[1];T<M&&(w=M,M=T,T=w);var S=T-M,E=Wx(S-Yx)<Fx,A=E||S<Fx;if(!E&&N<k&&(w=k,k=N,N=w),A?E?k+N>0^b[1]<(Wx(b[0]-M)<Fx?k:N):k<=b[1]&&b[1]<=N:S>Yx^(M<=b[0]&&b[0]<=T)){var C=ah(_,(-y+x)/g);return uh(C,d),[b,eh(C)]}}}function u(n,e){var r=c?t:Yx-t,i=0;return n<-r?i|=1:n>r&&(i|=2),e<-r?i|=4:e>r&&(i|=8),i}var a=Gx(t),c=a>0,s=Wx(a)>Fx;return Np(r,i,e,c?[0,-t]:[-Yx,t-Yx])}function Lp(t){return{stream:qp(t)}}function qp(t){function n(){}var e=n.prototype=Object.create(Up.prototype);for(var r in t)e[r]=t[r];return function(t){var e=new n;return e.stream=t,e}}function Up(){}function Rp(t,n){return+n?Op(t,n):Dp(t)}function Dp(t){return qp({point:function(n,e){n=t(n,e),this.stream.point(n[0],n[1])}})}function Op(t,n){function e(r,i,o,u,a,c,s,f,l,h,p,d,v,_){var y=s-r,g=f-i,m=y*y+g*g;if(m>4*n&&v--){var x=u+h,b=a+p,w=c+d,M=rb(x*x+b*b+w*w),T=Hl(w/=M),k=Wx(Wx(w)-1)<Fx||Wx(o-l)<Fx?(o+l)/2:Zx(b,x),N=t(k,T),S=N[0],E=N[1],A=S-r,C=E-i,z=g*A-y*C;(z*z/m>n||Wx((y*A+g*C)/m-.5)>.3||u*h+a*p+c*d<$b)&&(e(r,i,o,u,a,c,S,E,k,x/=M,b/=M,w,v,_),_.point(S,E),e(S,E,k,x,b,w,s,f,l,h,p,d,v,_))}}return function(n){function r(e,r){e=t(e,r),n.point(e[0],e[1])}function i(){y=NaN,w.point=o,n.lineStart()}function o(r,i){var o=rh([r,i]),u=t(r,i);e(y,g,_,m,x,b,y=u[0],g=u[1],_=r,m=o[0],x=o[1],b=o[2],Wb,n),n.point(y,g)}function u(){w.point=r,n.lineEnd()}function a(){i(),w.point=c,w.lineEnd=s}function c(t,n){o(f=t,n),l=y,h=g,p=m,d=x,v=b,w.point=o}function s(){e(y,g,_,m,x,b,l,h,f,p,d,v,Wb,n),w.lineEnd=u,u()}var f,l,h,p,d,v,_,y,g,m,x,b,w={point:r,lineStart:i,lineEnd:u,polygonStart:function(){n.polygonStart(),w.lineStart=a},polygonEnd:function(){n.polygonEnd(),w.lineStart=i}};return w}}function Fp(t){return Ip(function(){return t})()}function Ip(t){function n(t){return t=f(t[0]*Vx,t[1]*Vx),[t[0]*_+a,c-t[1]*_]}function e(t){return t=f.invert((t[0]-a)/_,(c-t[1])/_),t&&[t[0]*Xx,t[1]*Xx]}function r(t,n){return t=u(t,n),[t[0]*_+a,c-t[1]*_]}function i(){f=Ph(s=qh(b,w,M),u);var t=u(m,x);return a=y-t[0]*_,c=g+t[1]*_,o()}function o(){return d=v=null,n}var u,a,c,s,f,l,h,p,d,v,_=150,y=480,g=250,m=0,x=0,b=0,w=0,M=0,T=null,k=Vb,N=null,S=up,E=.5,A=Rp(r,E);return n.stream=function(t){return d&&v===t?d:d=Zb(k(s,A(S(v=t))))},n.clipAngle=function(t){return arguments.length?(k=+t?Pp(T=t*Vx,6*Vx):(T=null,Vb),o()):T*Xx},n.clipExtent=function(t){return arguments.length?(S=null==t?(N=l=h=p=null,up):$h(N=+t[0][0],l=+t[0][1],h=+t[1][0],p=+t[1][1]),o()):null==N?null:[[N,l],[h,p]]},n.scale=function(t){return arguments.length?(_=+t,i()):_},n.translate=function(t){return arguments.length?(y=+t[0],g=+t[1],i()):[y,g]},n.center=function(t){return arguments.length?(m=t[0]%360*Vx,x=t[1]%360*Vx,i()):[m*Xx,x*Xx]},n.rotate=function(t){return arguments.length?(b=t[0]%360*Vx,w=t[1]%360*Vx,M=t.length>2?t[2]%360*Vx:0,i()):[b*Xx,w*Xx,M*Xx]},n.precision=function(t){return arguments.length?(A=Rp(r,E=t*t),o()):rb(E)},function(){return u=t.apply(this,arguments),n.invert=u.invert&&e,i()}}function Yp(t){var n=0,e=Yx/3,r=Ip(t),i=r(n,e);return i.parallels=function(t){return arguments.length?r(n=t[0]*Vx,e=t[1]*Vx):[n*Xx,e*Xx]},i}function Bp(t,n){function e(t,n){var e=rb(o-2*i*nb(n))/i;return[e*nb(t*=i),u-e*Gx(t)]}var r=nb(t),i=(r+nb(n))/2,o=1+r*(2*i-r),u=rb(o)/i;return e.invert=function(t,n){var e=u-n;return[Zx(t,e)/i,Hl((o-(t*t+e*e)*i*i)/(2*i))]},e}function jp(){return Yp(Bp).scale(151).translate([480,347])}function Hp(){return jp().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])}function Xp(t){var n=t.length;return{point:function(e,r){for(var i=-1;++i<n;)t[i].point(e,r)},sphere:function(){for(var e=-1;++e<n;)t[e].sphere()},lineStart:function(){for(var e=-1;++e<n;)t[e].lineStart()},lineEnd:function(){for(var e=-1;++e<n;)t[e].lineEnd()},polygonStart:function(){for(var e=-1;++e<n;)t[e].polygonStart()},polygonEnd:function(){for(var e=-1;++e<n;)t[e].polygonEnd()}}}function Vp(){function t(t){var n=t[0],e=t[1];return u=null,r.point(n,e),u||(i.point(n,e),u)||(o.point(n,e),u)}var n,e,r,i,o,u,a=Hp(),c=jp().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s=jp().rotate([157,0]).center([-3,19.9]).parallels([8,18]),f={point:function(t,n){u=[t,n]}};return t.invert=function(t){var n=a.scale(),e=a.translate(),r=(t[0]-e[0])/n,i=(t[1]-e[1])/n;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?c:i>=.166&&i<.234&&r>=-.214&&r<-.115?s:a).invert(t)},t.stream=function(t){return n&&e===t?n:n=Xp([a.stream(e=t),c.stream(t),s.stream(t)])},t.precision=function(n){return arguments.length?(a.precision(n),c.precision(n),s.precision(n),t):a.precision()},t.scale=function(n){return arguments.length?(a.scale(n),c.scale(.35*n),s.scale(n),t.translate(a.translate())):a.scale()},t.translate=function(n){if(!arguments.length)return a.translate();var e=a.scale(),u=+n[0],l=+n[1];return r=a.translate(n).clipExtent([[u-.455*e,l-.238*e],[u+.455*e,l+.238*e]]).stream(f),i=c.translate([u-.307*e,l+.201*e]).clipExtent([[u-.425*e+Fx,l+.12*e+Fx],[u-.214*e-Fx,l+.234*e-Fx]]).stream(f),o=s.translate([u-.205*e,l+.212*e]).clipExtent([[u-.214*e+Fx,l+.166*e+Fx],[u-.115*e-Fx,l+.234*e-Fx]]).stream(f),t},t.scale(1070)}function Wp(t){return function(n,e){var r=Gx(n),i=Gx(e),o=t(r*i);return[o*i*nb(n),o*nb(e)]}}function $p(t){return function(n,e){var r=rb(n*n+e*e),i=t(r),o=nb(i),u=Gx(i);return[Zx(n*o,r*u),Hl(r&&e*o/r)]}}function Zp(){return Fp(Gb).scale(120).clipAngle(179.999)}function Gp(){return Fp(Jb).scale(480/Hx).clipAngle(179.999)}function Jp(t,n){return[t,Kx(ib((Bx+n)/2))]}function Qp(){return Kp(Jp)}function Kp(t){var n,e=Fp(t),r=e.scale,i=e.translate,o=e.clipExtent;return e.scale=function(t){return arguments.length?(r(t),n&&e.clipExtent(null),e):r()},e.translate=function(t){return arguments.length?(i(t),n&&e.clipExtent(null),e):i()},e.clipExtent=function(t){if(!arguments.length)return n?null:o();if(n=null==t){var u=Yx*r(),a=i();t=[[a[0]-u,a[1]-u],[a[0]+u,a[1]+u]]}return o(t),e},e.clipExtent(null).scale(961/Hx)}function td(t){return ib((Bx+t)/2)}function nd(t,n){function e(t,n){o>0?n<-Bx+Fx&&(n=-Bx+Fx):n>Bx-Fx&&(n=Bx-Fx);var e=o/tb(td(n),i);return[e*nb(i*t),o-e*Gx(i*t)]}var r=Gx(t),i=t===n?nb(t):Kx(r/Gx(n))/Kx(td(n)/td(t)),o=r*tb(td(t),i)/i;return i?(e.invert=function(t,n){var e=o-n,r=eb(i)*rb(t*t+e*e);return[Zx(t,e)/i,2*$x(tb(o/r,1/i))-Bx]},e):Jp}function ed(){return Yp(nd)}function rd(t,n){return[t,n]}function id(){return Fp(rd).scale(480/Yx)}function od(t,n){function e(t,n){var e=o-n,r=i*t;return[e*nb(r),o-e*Gx(r)]}var r=Gx(t),i=t===n?nb(t):(r-Gx(n))/(n-t),o=r/i+t;return Wx(i)<Fx?rd:(e.invert=function(t,n){var e=o-n;return[Zx(t,e)/i,o-eb(i)*rb(t*t+e*e)]},e)}function ud(){return Yp(od).scale(128).translate([480,280])}function ad(t,n){var e=Gx(n),r=Gx(t)*e;return[e*nb(t)/r,nb(n)/r]}function cd(){return Fp(ad).scale(139).clipAngle(60)}function sd(t,n){return[Gx(n)*nb(t),nb(n)]}function fd(){return Fp(sd).scale(240).clipAngle(90+Fx)}function ld(t,n){var e=Gx(n),r=1+Gx(t)*e;return[e*nb(t)/r,nb(n)/r]}function hd(){return Fp(ld).scale(240).clipAngle(142)}function pd(t,n){return[Kx(ib((Bx+n)/2)),-t]}function dd(){var t=Kp(pd),n=t.center,e=t.rotate;return t.center=function(t){return arguments.length?n([-t[1],t[0]]):(t=n(),[t[1],-t[0]])},t.rotate=function(t){return arguments.length?e([t[0],t[1],t.length>2?t[2]+90:90]):(t=e(),[t[0],t[1],t[2]-90])},e([0,0,90])}var vd="4.0.0",_d=e(n),yd=_d.right,gd=_d.left,md=Array.prototype,xd=md.slice,bd=md.map,wd=Math.sqrt(50),Md=Math.sqrt(10),Td=Math.sqrt(2),kd="$";P.prototype=L.prototype={constructor:P,has:function(t){return kd+t in this},get:function(t){return this[kd+t]},set:function(t,n){return this[kd+t]=n,this},remove:function(t){var n=kd+t;return n in this&&delete this[n]},clear:function(){for(var t in this)t[0]===kd&&delete this[t]},keys:function(){var t=[];for(var n in this)n[0]===kd&&t.push(n.slice(1));return t},values:function(){var t=[];for(var n in this)n[0]===kd&&t.push(this[n]);return t},entries:function(){var t=[];for(var n in this)n[0]===kd&&t.push({key:n.slice(1),value:this[n]});return t},size:function(){var t=0;for(var n in this)n[0]===kd&&++t;return t},empty:function(){for(var t in this)if(t[0]===kd)return!1;return!0},each:function(t){for(var n in this)n[0]===kd&&t(this[n],n.slice(1),this)}};var Nd=L.prototype;F.prototype=I.prototype={constructor:F,has:Nd.has,add:function(t){return t+="",this[kd+t]=t,this},remove:Nd.remove,clear:Nd.clear,values:Nd.keys,size:Nd.size,empty:Nd.empty,each:Nd.each};var Sd=3,Ed=function Qb(t){function n(n){return Math.pow(n,t)}return t=+t,n.exponent=Qb,n}(Sd),Ad=function Kb(t){function n(n){return 1-Math.pow(1-n,t)}return t=+t,n.exponent=Kb,n}(Sd),Cd=function tw(t){function n(n){return((n*=2)<=1?Math.pow(n,t):2-Math.pow(2-n,t))/2}return t=+t,n.exponent=tw,n}(Sd),zd=Math.PI,Pd=zd/2,Ld=4/11,qd=6/11,Ud=8/11,Rd=.75,Dd=9/11,Od=10/11,Fd=.9375,Id=21/22,Yd=63/64,Bd=1/Ld/Ld,jd=1.70158,Hd=function nw(t){function n(n){return n*n*((t+1)*n-t)}return t=+t,n.overshoot=nw,n}(jd),Xd=function ew(t){function n(n){return--n*n*((t+1)*n+t)+1}return t=+t,n.overshoot=ew,n}(jd),Vd=function rw(t){function n(n){return((n*=2)<1?n*n*((t+1)*n-t):(n-=2)*n*((t+1)*n+t)+2)/2}return t=+t,n.overshoot=rw,n}(jd),Wd=2*Math.PI,$d=1,Zd=.3,Gd=function iw(t,n){function e(e){return t*Math.pow(2,10*--e)*Math.sin((r-e)/n)}var r=Math.asin(1/(t=Math.max(1,t)))*(n/=Wd);return e.amplitude=function(t){return iw(t,n*Wd)},e.period=function(n){return iw(t,n)},e}($d,Zd),Jd=function ow(t,n){function e(e){return 1-t*Math.pow(2,-10*(e=+e))*Math.sin((e+r)/n)}var r=Math.asin(1/(t=Math.max(1,t)))*(n/=Wd);return e.amplitude=function(t){return ow(t,n*Wd)},e.period=function(n){return ow(t,n)},e}($d,Zd),Qd=function uw(t,n){function e(e){return((e=2*e-1)<0?t*Math.pow(2,10*e)*Math.sin((r-e)/n):2-t*Math.pow(2,-10*e)*Math.sin((r+e)/n))/2}var r=Math.asin(1/(t=Math.max(1,t)))*(n/=Wd);return e.amplitude=function(t){return uw(t,n*Wd)},e.period=function(n){return uw(t,n)},e}($d,Zd),Kd=Math.PI,tv=2*Kd,nv=1e-6,ev=tv-nv;Mt.prototype=Tt.prototype={constructor:Mt,moveTo:function(t,n){this._.push("M",this._x0=this._x1=+t,",",this._y0=this._y1=+n)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._.push("Z"))},lineTo:function(t,n){this._.push("L",this._x1=+t,",",this._y1=+n)},quadraticCurveTo:function(t,n,e,r){this._.push("Q",+t,",",+n,",",this._x1=+e,",",this._y1=+r)},bezierCurveTo:function(t,n,e,r,i,o){this._.push("C",+t,",",+n,",",+e,",",+r,",",this._x1=+i,",",this._y1=+o)},arcTo:function(t,n,e,r,i){t=+t,n=+n,e=+e,r=+r,i=+i;var o=this._x1,u=this._y1,a=e-t,c=r-n,s=o-t,f=u-n,l=s*s+f*f;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._.push("M",this._x1=t,",",this._y1=n);else if(l>nv)if(Math.abs(f*a-c*s)>nv&&i){var h=e-o,p=r-u,d=a*a+c*c,v=h*h+p*p,_=Math.sqrt(d),y=Math.sqrt(l),g=i*Math.tan((Kd-Math.acos((d+l-v)/(2*_*y)))/2),m=g/y,x=g/_;Math.abs(m-1)>nv&&this._.push("L",t+m*s,",",n+m*f),this._.push("A",i,",",i,",0,0,",+(f*h>s*p),",",this._x1=t+x*a,",",this._y1=n+x*c)}else this._.push("L",this._x1=t,",",this._y1=n);else;},arc:function(t,n,e,r,i,o){t=+t,n=+n,e=+e;var u=e*Math.cos(r),a=e*Math.sin(r),c=t+u,s=n+a,f=1^o,l=o?r-i:i-r;if(e<0)throw new Error("negative radius: "+e);null===this._x1?this._.push("M",c,",",s):(Math.abs(this._x1-c)>nv||Math.abs(this._y1-s)>nv)&&this._.push("L",c,",",s),e&&(l>ev?this._.push("A",e,",",e,",0,1,",f,",",t-u,",",n-a,"A",e,",",e,",0,1,",f,",",this._x1=c,",",this._y1=s):(l<0&&(l=l%tv+tv),this._.push("A",e,",",e,",0,",+(l>=Kd),",",f,",",this._x1=t+e*Math.cos(i),",",this._y1=n+e*Math.sin(i))))},rect:function(t,n,e,r){this._.push("M",this._x0=this._x1=+t,",",this._y0=this._y1=+n,"h",+e,"v",+r,"h",-e,"Z")},toString:function(){return this._.join("")}};var rv=jt.prototype=Ht.prototype;rv.copy=function(){var t,n,e=new Ht(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return e;if(!r.length)return e._root=Xt(r),e;for(t=[{source:r,target:e._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(n=r.source[i])&&(n.length?t.push({source:n,target:r.target[i]=new Array(4)}):r.target[i]=Xt(n));return e},rv.add=kt,rv.addAll=St,rv.cover=Et,rv.data=At,rv.extent=Ct,rv.find=Pt,rv.remove=Lt,rv.removeAll=qt,rv.root=Ut,rv.size=Rt,rv.visit=Dt,rv.visitAfter=Ot,rv.x=It,rv.y=Bt;var iv=[].slice,ov={};Vt.prototype=Qt.prototype={constructor:Vt,defer:function(t){if("function"!=typeof t||this._call)throw new Error;if(null!=this._error)return this;var n=iv.call(arguments,1);return n.push(t),++this._waiting,this._tasks.push(n),Wt(this),this},abort:function(){return null==this._error&&Gt(this,new Error("abort")),this},await:function(t){if("function"!=typeof t||this._call)throw new Error;return this._call=function(n,e){t.apply(null,[n].concat(e))},Jt(this),this},awaitAll:function(t){if("function"!=typeof t||this._call)throw new Error;return this._call=t,Jt(this),this}};var uv=1e-12,av=Math.PI,cv=av/2,sv=2*av;fn.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:this._context.lineTo(t,n)}}};var fv=xn(ln);mn.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,n){this._curve.point(n*Math.sin(t),n*-Math.cos(t))}};var lv={draw:function(t,n){var e=Math.sqrt(n/av);t.moveTo(e,0),t.arc(0,0,e,0,sv)}},hv={draw:function(t,n){var e=Math.sqrt(n/5)/2;t.moveTo(-3*e,-e),t.lineTo(-e,-e),t.lineTo(-e,-3*e),t.lineTo(e,-3*e),t.lineTo(e,-e),t.lineTo(3*e,-e),t.lineTo(3*e,e),t.lineTo(e,e),t.lineTo(e,3*e),t.lineTo(-e,3*e),t.lineTo(-e,e),t.lineTo(-3*e,e),t.closePath()}},pv=Math.sqrt(1/3),dv=2*pv,vv={draw:function(t,n){var e=Math.sqrt(n/dv),r=e*pv;t.moveTo(0,-e),t.lineTo(r,0),t.lineTo(0,e),t.lineTo(-r,0),t.closePath()}},_v=.8908130915292852,yv=Math.sin(av/10)/Math.sin(7*av/10),gv=Math.sin(sv/10)*yv,mv=-Math.cos(sv/10)*yv,xv={draw:function(t,n){var e=Math.sqrt(n*_v),r=gv*e,i=mv*e;t.moveTo(0,-e),t.lineTo(r,i);for(var o=1;o<5;++o){var u=sv*o/5,a=Math.cos(u),c=Math.sin(u);t.lineTo(c*e,-a*e),t.lineTo(a*r-c*i,c*r+a*i)}t.closePath()}},bv={draw:function(t,n){var e=Math.sqrt(n),r=-e/2;t.rect(r,r,e,e)}},wv=Math.sqrt(3),Mv={draw:function(t,n){var e=-Math.sqrt(n/(3*wv));t.moveTo(0,2*e),t.lineTo(-wv*e,-e),t.lineTo(wv*e,-e),t.closePath()}},Tv=-.5,kv=Math.sqrt(3)/2,Nv=1/Math.sqrt(12),Sv=3*(Nv/2+1),Ev={draw:function(t,n){var e=Math.sqrt(n/Sv),r=e/2,i=e*Nv,o=r,u=e*Nv+e,a=-o,c=u;t.moveTo(r,i),t.lineTo(o,u),t.lineTo(a,c),t.lineTo(Tv*r-kv*i,kv*r+Tv*i),t.lineTo(Tv*o-kv*u,kv*o+Tv*u),t.lineTo(Tv*a-kv*c,kv*a+Tv*c),t.lineTo(Tv*r+kv*i,Tv*i-kv*r),t.lineTo(Tv*o+kv*u,Tv*u-kv*o),t.lineTo(Tv*a+kv*c,Tv*c-kv*a),t.closePath()}},Av=[lv,hv,vv,bv,xv,Mv,Ev];Sn.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:Nn(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,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);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:Nn(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},An.prototype={areaStart:kn,areaEnd:kn,
+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,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x2=t,this._y2=n;break;case 1:this._point=2,this._x3=t,this._y3=n;break;case 2:this._point=3,this._x4=t,this._y4=n,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+n)/6);break;default:Nn(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},zn.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,n){switch(t=+t,n=+n,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var e=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+n)/6;this._line?this._context.lineTo(e,r):this._context.moveTo(e,r);break;case 3:this._point=4;default:Nn(this,t,n)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n}},Ln.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,n=this._y,e=t.length-1;if(e>0)for(var r,i=t[0],o=n[0],u=t[e]-i,a=n[e]-o,c=-1;++c<=e;)r=c/e,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*u),this._beta*n[c]+(1-this._beta)*(o+r*a));this._x=this._y=null,this._basis.lineEnd()},point:function(t,n){this._x.push(+t),this._y.push(+n)}};var Cv=function aw(t){function n(n){return 1===t?new Sn(n):new Ln(n,t)}return n.beta=function(t){return aw(+t)},n}(.85);Un.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:qn(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2,this._x1=t,this._y1=n;break;case 2:this._point=3;default:qn(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var zv=function cw(t){function n(n){return new Un(n,t)}return n.tension=function(t){return cw(+t)},n}(0);Rn.prototype={areaStart:kn,areaEnd:kn,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,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:qn(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Pv=function sw(t){function n(n){return new Rn(n,t)}return n.tension=function(t){return sw(+t)},n}(0);Dn.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,n){switch(t=+t,n=+n,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:qn(this,t,n)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=n}};var Lv=function fw(t){function n(n){return new Dn(n,t)}return n.tension=function(t){return fw(+t)},n}(0);Fn.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,this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3;default:On(this,t,n)}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=n}};var qv=function lw(t){function n(n){return t?new Fn(n,t):new Un(n,0)}return n.alpha=function(t){return lw(+t)},n}(.5);In.prototype={areaStart:kn,areaEnd:kn,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,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=n;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=n);break;case 2:this._point=3,this._x5=t,this._y5=n;break;default:On(this,t,n)}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=n}};var Uv=function hw(t){function n(n){return t?new In(n,t):new Rn(n,0)}return n.alpha=function(t){return hw(+t)},n}(.5);Yn.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,n){if(t=+t,n=+n,this._point){var e=this._x2-t,r=this._y2-n;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(e*e+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:On(this,t,n)}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=n}};var Rv=function pw(t){function n(n){return t?new Yn(n,t):new Dn(n,0)}return n.alpha=function(t){return pw(+t)},n}(.5);Bn.prototype={areaStart:kn,areaEnd:kn,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,n){t=+t,n=+n,this._point?this._context.lineTo(t,n):(this._point=1,this._context.moveTo(t,n))}},$n.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Wn(this,this._t0,Vn(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,n){var e=NaN;if(t=+t,n=+n,t!==this._x1||n!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;break;case 2:this._point=3,Wn(this,Vn(this,e=Xn(this,t,n)),e);break;default:Wn(this,this._t0,e=Xn(this,t,n))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=n,this._t0=e}}},(Zn.prototype=Object.create($n.prototype)).point=function(t,n){$n.prototype.point.call(this,n,t)},Gn.prototype={moveTo:function(t,n){this._context.moveTo(n,t)},closePath:function(){this._context.closePath()},lineTo:function(t,n){this._context.lineTo(n,t)},bezierCurveTo:function(t,n,e,r,i,o){this._context.bezierCurveTo(n,t,r,e,o,i)}},Kn.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,n=this._y,e=t.length;if(e)if(this._line?this._context.lineTo(t[0],n[0]):this._context.moveTo(t[0],n[0]),2===e)this._context.lineTo(t[1],n[1]);else for(var r=te(t),i=te(n),o=0,u=1;u<e;++o,++u)this._context.bezierCurveTo(r[0][o],i[0][o],r[1][o],i[1][o],t[u],n[u]);(this._line||0!==this._line&&1===e)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,n){this._x.push(+t),this._y.push(+n)}},ee.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,n){switch(t=+t,n=+n,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,n),this._context.lineTo(t,n);else{var e=this._x*(1-this._t)+t*this._t;this._context.lineTo(e,this._y),this._context.lineTo(e,n)}}this._x=t,this._y=n}};var Dv=Array.prototype.slice,Ov=.7,Fv=1/Ov,Iv=/^#([0-9a-f]{3})$/,Yv=/^#([0-9a-f]{6})$/,Bv=/^rgb\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*\)$/,jv=/^rgb\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/,Hv=/^rgba\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/,Xv=/^rgba\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/,Vv=/^hsl\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/,Wv=/^hsla\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/,$v={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};ge(xe,be,{displayable:function(){return this.rgb().displayable()},toString:function(){return this.rgb()+""}}),ge(Ne,ke,me(xe,{brighter:function(t){return t=null==t?Fv:Math.pow(Fv,t),new Ne(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?Ov:Math.pow(Ov,t),new Ne(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},toString:function(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(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+")")}})),ge(Ce,Ae,me(xe,{brighter:function(t){return t=null==t?Fv:Math.pow(Fv,t),new Ce(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?Ov:Math.pow(Ov,t),new Ce(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),n=isNaN(t)||isNaN(this.s)?0:this.s,e=this.l,r=e+(e<.5?e:1-e)*n,i=2*e-r;return new Ne(ze(t>=240?t-240:t+120,i,r),ze(t,i,r),ze(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}}));var Zv=Math.PI/180,Gv=180/Math.PI,Jv=18,Qv=.95047,Kv=1,t_=1.08883,n_=4/29,e_=6/29,r_=3*e_*e_,i_=e_*e_*e_;ge(qe,Le,me(xe,{brighter:function(t){return new qe(this.l+Jv*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new qe(this.l-Jv*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,n=isNaN(this.a)?t:t+this.a/500,e=isNaN(this.b)?t:t-this.b/200;return t=Kv*Re(t),n=Qv*Re(n),e=t_*Re(e),new Ne(De(3.2404542*n-1.5371385*t-.4985314*e),De(-.969266*n+1.8760108*t+.041556*e),De(.0556434*n-.2040259*t+1.0572252*e),this.opacity)}})),ge(Ye,Ie,me(xe,{brighter:function(t){return new Ye(this.h,this.c,this.l+Jv*(null==t?1:t),this.opacity)},darker:function(t){return new Ye(this.h,this.c,this.l-Jv*(null==t?1:t),this.opacity)},rgb:function(){return Pe(this).rgb()}}));var o_=-.14861,u_=1.78277,a_=-.29227,c_=-.90649,s_=1.97294,f_=s_*c_,l_=s_*u_,h_=u_*a_-c_*o_;ge(He,je,me(xe,{brighter:function(t){return t=null==t?Fv:Math.pow(Fv,t),new He(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?Ov:Math.pow(Ov,t),new He(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Zv,n=+this.l,e=isNaN(this.s)?0:this.s*n*(1-n),r=Math.cos(t),i=Math.sin(t);return new Ne(255*(n+e*(o_*r+u_*i)),255*(n+e*(a_*r+c_*i)),255*(n+e*(s_*r)),this.opacity)}}));var p_,d_,v_,__,y_=function dw(t){function n(t,n){var r=e((t=ke(t)).r,(n=ke(n)).r),i=e(t.g,n.g),o=e(t.b,n.b),u=e(t.opacity,n.opacity);return function(n){return t.r=r(n),t.g=i(n),t.b=o(n),t.opacity=u(n),t+""}}var e=Qe(t);return n.gamma=dw,n}(1),g_=tr(Ve),m_=tr(We),x_=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,b_=new RegExp(x_.source,"g"),w_=180/Math.PI,M_={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},T_=hr(fr,"px, ","px)","deg)"),k_=hr(lr,", ",")",")"),N_=Math.SQRT2,S_=2,E_=4,A_=1e-12,C_=yr(Je),z_=yr(Ke),P_=mr(Je),L_=mr(Ke),q_=xr(Je),U_=xr(Ke),R_={value:function(){}};Mr.prototype=wr.prototype={constructor:Mr,on:function(t,n){var e,r=this._,i=Tr(t+"",r),o=-1,u=i.length;{if(!(arguments.length<2)){if(null!=n&&"function"!=typeof n)throw new Error("invalid callback: "+n);for(;++o<u;)if(e=(t=i[o]).type)r[e]=Nr(r[e],t.name,n);else if(null==n)for(e in r)r[e]=Nr(r[e],t.name,null);return this}for(;++o<u;)if((e=(t=i[o]).type)&&(e=kr(r[e],t.name)))return e}},copy:function(){var t={},n=this._;for(var e in n)t[e]=n[e].slice();return new Mr(t)},call:function(t,n){if((e=arguments.length-2)>0)for(var e,r,i=new Array(e),o=0;o<e;++o)i[o]=arguments[o+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(r=this._[t],o=0,e=r.length;o<e;++o)r[o].value.apply(n,i)},apply:function(t,n,e){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,o=r.length;i<o;++i)r[i].value.apply(n,e)}};var D_,O_,F_=Cr(","),I_=F_.parse,Y_=F_.parseRows,B_=F_.format,j_=F_.formatRows,H_=Cr("\t"),X_=H_.parse,V_=H_.parseRows,W_=H_.format,$_=H_.formatRows,Z_=qr("text/html",function(t){return document.createRange().createContextualFragment(t.responseText)}),G_=qr("application/json",function(t){return JSON.parse(t.responseText)}),J_=qr("text/plain",function(t){return t.responseText}),Q_=qr("application/xml",function(t){var n=t.responseXML;if(!n)throw new Error("parse error");return n}),K_=Ur("text/csv",I_),ty=Ur("text/tab-separated-values",X_),ny=0,ey=0,ry=0,iy=1e3,oy=0,uy=0,ay=0,cy="object"==typeof performance?performance:Date,sy="function"==typeof requestAnimationFrame?cy===Date?function(t){requestAnimationFrame(function(){t(cy.now())})}:requestAnimationFrame:function(t){setTimeout(t,17)};Fr.prototype=Ir.prototype={constructor:Fr,restart:function(t,n,e){if("function"!=typeof t)throw new TypeError("callback is not a function");e=(null==e?Dr():+e)+(null==n?0:+n),this._next||O_===this||(O_?O_._next=this:D_=this,O_=this),this._call=t,this._time=e,Xr()},stop:function(){this._call&&(this._call=null,this._time=1/0,Xr())}};var fy=new Date,ly=new Date,hy=$r(function(){},function(t,n){t.setTime(+t+n)},function(t,n){return n-t});hy.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?$r(function(n){n.setTime(Math.floor(n/t)*t)},function(n,e){n.setTime(+n+e*t)},function(n,e){return(e-n)/t}):hy:null};var py=hy.range,dy=1e3,vy=6e4,_y=36e5,yy=864e5,gy=6048e5,my=$r(function(t){t.setTime(Math.floor(t/dy)*dy)},function(t,n){t.setTime(+t+n*dy)},function(t,n){return(n-t)/dy},function(t){return t.getUTCSeconds()}),xy=my.range,by=$r(function(t){t.setTime(Math.floor(t/vy)*vy)},function(t,n){t.setTime(+t+n*vy)},function(t,n){return(n-t)/vy},function(t){return t.getMinutes()}),wy=by.range,My=$r(function(t){var n=t.getTimezoneOffset()*vy%_y;n<0&&(n+=_y),t.setTime(Math.floor((+t-n)/_y)*_y+n)},function(t,n){t.setTime(+t+n*_y)},function(t,n){return(n-t)/_y},function(t){return t.getHours()}),Ty=My.range,ky=$r(function(t){t.setHours(0,0,0,0)},function(t,n){t.setDate(t.getDate()+n)},function(t,n){return(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*vy)/yy},function(t){return t.getDate()-1}),Ny=ky.range,Sy=Zr(0),Ey=Zr(1),Ay=Zr(2),Cy=Zr(3),zy=Zr(4),Py=Zr(5),Ly=Zr(6),qy=Sy.range,Uy=Ey.range,Ry=Ay.range,Dy=Cy.range,Oy=zy.range,Fy=Py.range,Iy=Ly.range,Yy=$r(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,n){t.setMonth(t.getMonth()+n)},function(t,n){return n.getMonth()-t.getMonth()+12*(n.getFullYear()-t.getFullYear())},function(t){return t.getMonth()}),By=Yy.range,jy=$r(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,n){t.setFullYear(t.getFullYear()+n)},function(t,n){return n.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});jy.every=function(t){return isFinite(t=Math.floor(t))&&t>0?$r(function(n){n.setFullYear(Math.floor(n.getFullYear()/t)*t),n.setMonth(0,1),n.setHours(0,0,0,0)},function(n,e){n.setFullYear(n.getFullYear()+e*t)}):null};var Hy=jy.range,Xy=$r(function(t){t.setUTCSeconds(0,0)},function(t,n){t.setTime(+t+n*vy)},function(t,n){return(n-t)/vy},function(t){return t.getUTCMinutes()}),Vy=Xy.range,Wy=$r(function(t){t.setUTCMinutes(0,0,0)},function(t,n){t.setTime(+t+n*_y)},function(t,n){return(n-t)/_y},function(t){return t.getUTCHours()}),$y=Wy.range,Zy=$r(function(t){t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCDate(t.getUTCDate()+n)},function(t,n){return(n-t)/yy},function(t){return t.getUTCDate()-1}),Gy=Zy.range,Jy=Gr(0),Qy=Gr(1),Ky=Gr(2),tg=Gr(3),ng=Gr(4),eg=Gr(5),rg=Gr(6),ig=Jy.range,og=Qy.range,ug=Ky.range,ag=tg.range,cg=ng.range,sg=eg.range,fg=rg.range,lg=$r(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCMonth(t.getUTCMonth()+n)},function(t,n){return n.getUTCMonth()-t.getUTCMonth()+12*(n.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),hg=lg.range,pg=$r(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n)},function(t,n){return n.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});pg.every=function(t){return isFinite(t=Math.floor(t))&&t>0?$r(function(n){n.setUTCFullYear(Math.floor(n.getUTCFullYear()/t)*t),n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)},function(n,e){n.setUTCFullYear(n.getUTCFullYear()+e*t)}):null};var dg,vg=pg.range,_g={"":ti,"%":function(t,n){return(100*t).toFixed(n)},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,n){return t.toExponential(n)},f:function(t,n){return t.toFixed(n)},g:function(t,n){return t.toPrecision(n)},o:function(t){return Math.round(t).toString(8)},p:function(t,n){return ei(100*t,n)},r:ei,s:ni,X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},yg=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;ii.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+this.type};var gg,mg=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];t.format,t.formatPrefix,ai({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var xg,bg={"-":"",_:" ",0:"0"},wg=/^\s*\d+/,Mg=/^%/,Tg=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;t.timeFormat,t.timeParse,t.utcFormat,t.utcParse,co({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"]});var kg="%Y-%m-%dT%H:%M:%S.%LZ",Ng=Date.prototype.toISOString?so:t.utcFormat(kg),Sg=+new Date("2000-01-01T00:00:00.000Z")?fo:t.utcParse(kg),Eg=Array.prototype,Ag=Eg.map,Cg=Eg.slice,zg={name:"implicit"},Pg=[0,1],Lg=1e3,qg=60*Lg,Ug=60*qg,Rg=24*Ug,Dg=7*Rg,Og=30*Rg,Fg=365*Rg,Ig=$o("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),Yg=$o("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"),Bg=$o("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"),jg=$o("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"),Hg=U_(je(300,.5,0),je(-240,.5,1)),Xg=U_(je(-100,.75,.35),je(80,1.5,.8)),Vg=U_(je(260,.75,.35),je(80,1.5,.8)),Wg=je(),$g=Go($o("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Zg=Go($o("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),Gg=Go($o("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),Jg=Go($o("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),Qg="http://www.w3.org/1999/xhtml",Kg={svg:"http://www.w3.org/2000/svg",xhtml:Qg,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},tm=0;ru.prototype=eu.prototype={constructor:ru,get:function(t){for(var n=this._;!(n in t);)if(!(t=t.parentNode))return;return t[n]},set:function(t,n){return t[this._]=n},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var nm=function(t){return function(){return this.matches(t)}};if("undefined"!=typeof document){var em=document.documentElement;if(!em.matches){var rm=em.webkitMatchesSelector||em.msMatchesSelector||em.mozMatchesSelector||em.oMatchesSelector;nm=function(t){return function(){return rm.call(this,t)}}}}var im=nm,om={};if(t.event=null,"undefined"!=typeof document){var um=document.documentElement;"onmouseenter"in um||(om={mouseenter:"mouseover",
+mouseleave:"mouseout"})}Mu.prototype={constructor:Mu,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,n){return this._parent.insertBefore(t,n)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var am="$";ra.prototype={add:function(t){var n=this._names.indexOf(t);n<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var n=this._names.indexOf(t);n>=0&&(this._names.splice(n,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var cm=[null];Pa.prototype=La.prototype={constructor:Pa,select:_u,selectAll:mu,filter:xu,data:Su,enter:wu,exit:Eu,merge:Au,order:Cu,sort:zu,call:Lu,nodes:qu,node:Uu,size:Ru,empty:Du,each:Ou,attr:Xu,style:Gu,property:ta,classed:sa,text:pa,html:ya,raise:ma,lower:ba,append:wa,insert:Ta,remove:Na,datum:Sa,on:su,dispatch:za};var sm=wr("start","end","interrupt"),fm=[],lm=0,hm=1,pm=2,dm=3,vm=4,_m=5,ym=La.prototype.constructor,gm=0,mm=La.prototype;Uc.prototype=Rc.prototype={constructor:Uc,select:bc,selectAll:wc,filter:dc,merge:vc,selection:Mc,transition:qc,call:mm.call,nodes:mm.nodes,node:mm.node,size:mm.size,empty:mm.empty,each:mm.each,on:gc,attr:ec,attrTween:oc,style:Ec,styleTween:Cc,text:Lc,remove:xc,tween:Wa,delay:cc,duration:lc,ease:pc};var xm={time:null,delay:0,duration:250,ease:et};La.prototype.interrupt=Ha,La.prototype.transition=Fc;var bm=[null],wm=Array.prototype.slice,Mm=1,Tm=2,km=3,Nm=4,Sm=1e-6;bs.prototype=_s.prototype={constructor:bs,each:os,eachAfter:as,eachBefore:us,sum:cs,sort:ss,path:fs,ancestors:hs,descendants:ps,leaves:ds,links:vs,copy:ys};var Em="$",Am={depth:-1},Cm={};rf.prototype=Object.create(bs.prototype);var zm=(1+Math.sqrt(5))/2,Pm=function vw(t){function n(n,e,r,i,o){cf(t,n,e,r,i,o)}return n.ratio=function(t){return vw((t=+t)>1?t:1)},n}(zm),Lm=function _w(t){function n(n,e,r,i,o){if((u=n._squarify)&&u.ratio===t)for(var u,a,c,s,f,l=-1,h=u.length,p=n.value;++l<h;){for(a=u[l],c=a.children,s=a.value=0,f=c.length;s<f;++s)a.value+=c[s].value;a.dice?Vs(a,e,r,i,r+=(o-r)*a.value/p):af(a,e,r,e+=(i-e)*a.value/p,o),p-=a.value}else n._squarify=u=cf(t,n,e,r,i,o),u.ratio=t}return n.ratio=function(t){return _w((t=+t)>1?t:1)},n}(zm),qm=10,Um=Math.PI*(3-Math.sqrt(5));zf.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t},Ff.prototype={constructor:Ff,insert:function(t,n){var e,r,i;if(t){if(n.P=t,n.N=t.N,t.N&&(t.N.P=n),t.N=n,t.R){for(t=t.R;t.L;)t=t.L;t.L=n}else t.R=n;e=t}else this._?(t=jf(this._),n.P=null,n.N=t,t.P=t.L=n,e=t):(n.P=n.N=null,this._=n,e=null);for(n.L=n.R=null,n.U=e,n.C=!0,t=n;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,t=r):(t===e.R&&(Yf(this,e),t=e,e=t.U),e.C=!1,r.C=!0,Bf(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,t=r):(t===e.L&&(Bf(this,e),t=e,e=t.U),e.C=!1,r.C=!0,Yf(this,r))),e=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var n,e,r,i=t.U,o=t.L,u=t.R;if(e=o?u?jf(u):o:u,i?i.L===t?i.L=e:i.R=e:this._=e,o&&u?(r=e.C,e.C=t.C,e.L=o,o.U=e,e!==u?(i=e.U,e.U=t.U,t=e.R,i.L=t,e.R=u,u.U=e):(e.U=i,i=e,t=e.R)):(r=t.C,t=e),t&&(t.U=i),!r){if(t&&t.C)return void(t.C=!1);do{if(t===this._)break;if(t===i.L){if(n=i.R,n.C&&(n.C=!1,i.C=!0,Yf(this,i),n=i.R),n.L&&n.L.C||n.R&&n.R.C){n.R&&n.R.C||(n.L.C=!1,n.C=!0,Bf(this,n),n=i.R),n.C=i.C,i.C=n.R.C=!1,Yf(this,i),t=this._;break}}else if(n=i.L,n.C&&(n.C=!1,i.C=!0,Bf(this,i),n=i.L),n.L&&n.L.C||n.R&&n.R.C){n.L&&n.L.C||(n.R.C=!1,n.C=!0,Yf(this,n),n=i.L),n.C=i.C,i.C=n.L.C=!1,Bf(this,i),t=this._;break}n.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}};var Rm,Dm,Om,Fm,Im,Ym=[],Bm=[],jm=1e-6,Hm=1e-12;dl.prototype={constructor:dl,polygons:function(){var t=this.edges;return this.cells.map(function(n){var e=n.halfedges.map(function(e){return Qf(n,t[e])});return e.data=n.site.data,e})},triangles:function(){var t=[],n=this.edges;return this.cells.forEach(function(e,r){for(var i,o=e.site,u=e.halfedges,a=-1,c=u.length,s=n[u[c-1]],f=s.left===o?s.right:s.left;++a<c;)i=f,s=n[u[a]],f=s.left===o?s.right:s.left,r<i.index&&r<f.index&&hl(o,i,f)<0&&t.push([o.data,i.data,f.data])}),t},links:function(){return this.edges.filter(function(t){return t.right}).map(function(t){return{source:t.left.data,target:t.right.data}})}},gl.prototype={constructor:gl,scale:function(t){return 1===t?this:new gl(this.k*t,this.x,this.y)},translate:function(t,n){return 0===t&0===n?this:new gl(this.k,this.x+this.k*t,this.y+this.k*n)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var Xm=new gl(1,0,0);ml.prototype=gl.prototype;var Vm={name:"drag"},Wm={name:"space"},$m={name:"handle"},Zm={name:"center"},Gm={name:"x",handles:["e","w"].map(Cl),input:function(t,n){return t&&[[t[0],n[0][1]],[t[1],n[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},Jm={name:"y",handles:["n","s"].map(Cl),input:function(t,n){return t&&[[n[0][0],t[0]],[n[1][0],t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},Qm={name:"xy",handles:["n","e","s","w","nw","ne","se","sw"].map(Cl),input:function(t){return t},output:function(t){return t}},Km={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"},tx={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},nx={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},ex={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},rx={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};Yl.prototype={constructor:Yl,reset:function(){this.s=this.t=0},add:function(t){Bl(Ox,t,this.t),Bl(this,Ox.s,this.s),this.s?this.t+=Ox.t:this.s=Ox.t},valueOf:function(){return this.s}};var ix,ox,ux,ax,cx,sx,fx,lx,hx,px,dx,vx,_x,yx,gx,mx,xx,bx,wx,Mx,Tx,kx,Nx,Sx,Ex,Ax,Cx,zx,Px,Lx,qx,Ux,Rx,Dx,Ox=new Yl,Fx=1e-6,Ix=1e-12,Yx=Math.PI,Bx=Yx/2,jx=Yx/4,Hx=2*Yx,Xx=180/Yx,Vx=Yx/180,Wx=Math.abs,$x=Math.atan,Zx=Math.atan2,Gx=Math.cos,Jx=Math.ceil,Qx=Math.exp,Kx=Math.log,tb=Math.pow,nb=Math.sin,eb=Math.sign||function(t){return t>0?1:t<0?-1:0},rb=Math.sqrt,ib=Math.tan,ob={Feature:function(t,n){Wl(t.geometry,n)},FeatureCollection:function(t,n){for(var e=t.features,r=-1,i=e.length;++r<i;)Wl(e[r].geometry,n)}},ub={Sphere:function(t,n){n.sphere()},Point:function(t,n){t=t.coordinates,n.point(t[0],t[1],t[2])},MultiPoint:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)t=e[r],n.point(t[0],t[1],t[2])},LineString:function(t,n){$l(t.coordinates,n,0)},MultiLineString:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)$l(e[r],n,0)},Polygon:function(t,n){Zl(t.coordinates,n)},MultiPolygon:function(t,n){for(var e=t.coordinates,r=-1,i=e.length;++r<i;)Zl(e[r],n)},GeometryCollection:function(t,n){for(var e=t.geometries,r=-1,i=e.length;++r<i;)Wl(e[r],n)}},ab={point:Vl,lineStart:Vl,lineEnd:Vl,polygonStart:function(){ix.reset(),ab.lineStart=Jl,ab.lineEnd=Ql},polygonEnd:function(){var t=+ix;ox.add(t<0?Hx+t:t),this.lineStart=this.lineEnd=this.point=Vl},sphere:function(){ox.add(Hx)}},cb={point:sh,lineStart:lh,lineEnd:hh,polygonStart:function(){cb.point=ph,cb.lineStart=dh,cb.lineEnd=vh,mx.reset(),ab.polygonStart()},polygonEnd:function(){ab.polygonEnd(),cb.point=sh,cb.lineStart=lh,cb.lineEnd=hh,ix<0?(lx=-(px=180),hx=-(dx=90)):mx>Fx?dx=90:mx<-Fx&&(hx=-90),bx[0]=lx,bx[1]=px}},sb={sphere:Vl,point:xh,lineStart:wh,lineEnd:kh,polygonStart:function(){sb.lineStart=Nh,sb.lineEnd=Sh},polygonEnd:function(){sb.lineStart=wh,sb.lineEnd=kh}};Lh.invert=Lh;var fb,lb,hb,pb,db,vb,_b,yb,gb,mb,xb,bb,wb=1e9,Mb=-wb,Tb={sphere:Vl,point:Vl,lineStart:Gh,lineEnd:Vl,polygonStart:Vl,polygonEnd:Vl},kb=[null,null],Nb={type:"LineString",coordinates:kb},Sb=Il(),Eb=Il(),Ab={point:Vl,lineStart:Vl,lineEnd:Vl,polygonStart:function(){Ab.lineStart=ap,Ab.lineEnd=fp},polygonEnd:function(){Ab.lineStart=Ab.lineEnd=Ab.point=Vl,Sb.add(Wx(Eb)),Eb.reset()},result:function(){var t=Sb/2;return Sb.reset(),t}},Cb=1/0,zb=Cb,Pb=-Cb,Lb=Pb,qb={point:lp,lineStart:Vl,lineEnd:Vl,polygonStart:Vl,polygonEnd:Vl,result:function(){var t=[[Cb,zb],[Pb,Lb]];return Pb=Lb=-(zb=Cb=1/0),t}},Ub=0,Rb=0,Db=0,Ob=0,Fb=0,Ib=0,Yb=0,Bb=0,jb=0,Hb={point:hp,lineStart:pp,lineEnd:_p,polygonStart:function(){Hb.lineStart=yp,Hb.lineEnd=gp},polygonEnd:function(){Hb.point=hp,Hb.lineStart=pp,Hb.lineEnd=_p},result:function(){var t=jb?[Yb/jb,Bb/jb]:Ib?[Ob/Ib,Fb/Ib]:Db?[Ub/Db,Rb/Db]:[NaN,NaN];return Ub=Rb=Db=Ob=Fb=Ib=Yb=Bb=jb=0,t}},Xb=Il(),Vb=Np(function(){return!0},Ap,zp,[-Yx,-Bx]);Up.prototype={point:function(t,n){this.stream.point(t,n)},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 Wb=16,$b=Gx(30*Vx),Zb=qp({point:function(t,n){this.stream.point(t*Vx,n*Vx)}}),Gb=Wp(function(t){return rb(2/(1+t))});Gb.invert=$p(function(t){return 2*Hl(t/2)});var Jb=Wp(function(t){return(t=jl(t))&&t/nb(t)});Jb.invert=$p(function(t){return t}),Jp.invert=function(t,n){return[t,2*$x(Qx(n))-Bx]},rd.invert=rd,ad.invert=$p($x),sd.invert=$p(Hl),ld.invert=$p(function(t){return 2+$x(t)}),pd.invert=function(t,n){return[-n,2*$x(Qx(t))-Bx]},t.version=vd,t.bisect=yd,t.bisectRight=yd,t.bisectLeft=gd,t.ascending=n,t.bisector=e,t.descending=i,t.deviation=a,t.extent=c,t.histogram=v,t.thresholdFreedmanDiaconis=y,t.thresholdScott=g,t.thresholdSturges=d,t.max=m,t.mean=x,t.median=b,t.merge=w,t.min=M,t.pairs=T,t.permute=k,t.quantile=_,t.range=l,t.scan=N,t.shuffle=S,t.sum=E,t.ticks=h,t.tickStep=p,t.transpose=A,t.variance=u,t.zip=z,t.entries=j,t.keys=Y,t.values=B,t.map=L,t.set=I,t.nest=q,t.randomUniform=H,t.randomNormal=X,t.randomLogNormal=V,t.randomBates=$,t.randomIrwinHall=W,t.randomExponential=Z,t.easeLinear=G,t.easeQuad=K,t.easeQuadIn=J,t.easeQuadOut=Q,t.easeQuadInOut=K,t.easeCubic=et,t.easeCubicIn=tt,t.easeCubicOut=nt,t.easeCubicInOut=et,t.easePoly=Cd,t.easePolyIn=Ed,t.easePolyOut=Ad,t.easePolyInOut=Cd,t.easeSin=ot,t.easeSinIn=rt,t.easeSinOut=it,t.easeSinInOut=ot,t.easeExp=ct,t.easeExpIn=ut,t.easeExpOut=at,t.easeExpInOut=ct,t.easeCircle=lt,t.easeCircleIn=st,t.easeCircleOut=ft,t.easeCircleInOut=lt,t.easeBounce=pt,t.easeBounceIn=ht,t.easeBounceOut=pt,t.easeBounceInOut=dt,t.easeBack=Vd,t.easeBackIn=Hd,t.easeBackOut=Xd,t.easeBackInOut=Vd,t.easeElastic=Jd,t.easeElasticIn=Gd,t.easeElasticOut=Jd,t.easeElasticInOut=Qd,t.polygonArea=vt,t.polygonCentroid=_t,t.polygonHull=xt,t.polygonContains=bt,t.polygonLength=wt,t.path=Tt,t.quadtree=jt,t.queue=Qt,t.arc=sn,t.area=vn,t.line=dn,t.pie=gn,t.radialArea=Mn,t.radialLine=wn,t.symbol=Tn,t.symbols=Av,t.symbolCircle=lv,t.symbolCross=hv,t.symbolDiamond=vv,t.symbolSquare=bv,t.symbolStar=xv,t.symbolTriangle=Mv,t.symbolWye=Ev,t.curveBasisClosed=Cn,t.curveBasisOpen=Pn,t.curveBasis=En,t.curveBundle=Cv,t.curveCardinalClosed=Pv,t.curveCardinalOpen=Lv,t.curveCardinal=zv,t.curveCatmullRomClosed=Uv,t.curveCatmullRomOpen=Rv,t.curveCatmullRom=qv,t.curveLinearClosed=jn,t.curveLinear=ln,t.curveMonotoneX=Jn,t.curveMonotoneY=Qn,t.curveNatural=ne,t.curveStep=re,t.curveStepAfter=oe,t.curveStepBefore=ie,t.stack=se,t.stackOffsetExpand=fe,t.stackOffsetNone=ue,t.stackOffsetSilhouette=le,t.stackOffsetWiggle=he,t.stackOrderAscending=pe,t.stackOrderDescending=ve,t.stackOrderInsideOut=_e,t.stackOrderNone=ae,t.stackOrderReverse=ye,t.color=be,t.rgb=ke,t.hsl=Ae,t.lab=Le,t.hcl=Ie,t.cubehelix=je,t.interpolate=ar,t.interpolateArray=nr,t.interpolateNumber=er,t.interpolateObject=rr,t.interpolateRound=cr,t.interpolateString=ur,t.interpolateTransformCss=T_,t.interpolateTransformSvg=k_,t.interpolateZoom=_r,t.interpolateRgb=y_,t.interpolateRgbBasis=g_,t.interpolateRgbBasisClosed=m_,t.interpolateHsl=C_,t.interpolateHslLong=z_,t.interpolateLab=gr,t.interpolateHcl=P_,t.interpolateHclLong=L_,t.interpolateCubehelix=q_,t.interpolateCubehelixLong=U_,t.interpolateBasis=Ve,t.interpolateBasisClosed=We,t.quantize=br,t.dispatch=wr,t.dsvFormat=Cr,t.csvParse=I_,t.csvParseRows=Y_,t.csvFormat=B_,t.csvFormatRows=j_,t.tsvParse=X_,t.tsvParseRows=V_,t.tsvFormat=W_,t.tsvFormatRows=$_,t.request=zr,t.html=Z_,t.json=G_,t.text=J_,t.xml=Q_,t.csv=K_,t.tsv=ty,t.now=Dr,t.timer=Ir,t.timerFlush=Yr,t.timeout=Vr,t.interval=Wr,t.timeInterval=$r,t.timeMillisecond=hy,t.timeMilliseconds=py,t.timeSecond=my,t.timeSeconds=xy,t.timeMinute=by,t.timeMinutes=wy,t.timeHour=My,t.timeHours=Ty,t.timeDay=ky,t.timeDays=Ny,t.timeWeek=Sy,t.timeWeeks=qy,t.timeSunday=Sy,t.timeSundays=qy,t.timeMonday=Ey,t.timeMondays=Uy,t.timeTuesday=Ay,t.timeTuesdays=Ry,t.timeWednesday=Cy,t.timeWednesdays=Dy,t.timeThursday=zy,t.timeThursdays=Oy,t.timeFriday=Py,t.timeFridays=Fy,t.timeSaturday=Ly,t.timeSaturdays=Iy,t.timeMonth=Yy,t.timeMonths=By,t.timeYear=jy,t.timeYears=Hy,t.utcMillisecond=hy,t.utcMilliseconds=py,t.utcSecond=my,t.utcSeconds=xy,t.utcMinute=Xy,t.utcMinutes=Vy,t.utcHour=Wy,t.utcHours=$y,t.utcDay=Zy,t.utcDays=Gy,t.utcWeek=Jy,t.utcWeeks=ig,t.utcSunday=Jy,t.utcSundays=ig,t.utcMonday=Qy,t.utcMondays=og,t.utcTuesday=Ky,t.utcTuesdays=ug,t.utcWednesday=tg,t.utcWednesdays=ag,t.utcThursday=ng,t.utcThursdays=cg,t.utcFriday=eg,t.utcFridays=sg,t.utcSaturday=rg,t.utcSaturdays=fg,t.utcMonth=lg,t.utcMonths=hg,t.utcYear=pg,t.utcYears=vg,t.formatLocale=ui,t.formatDefaultLocale=ai,t.formatSpecifier=ri,t.precisionFixed=ci,t.precisionPrefix=si,t.precisionRound=fi,t.isoFormat=Ng,t.isoParse=Sg,t.timeFormatLocale=di,t.timeFormatDefaultLocale=co,t.scaleBand=ho,t.scalePoint=vo,t.scaleIdentity=Eo,t.scaleLinear=So,t.scaleLog=Ro,t.scaleOrdinal=lo,t.scaleImplicit=zg,t.scalePow=Oo,t.scaleSqrt=Fo,t.scaleQuantile=Io,t.scaleQuantize=Yo,t.scaleThreshold=Bo,t.scaleTime=Vo,t.scaleUtc=Wo,t.schemeCategory10=Ig,t.schemeCategory20b=Yg,t.schemeCategory20c=Bg,t.schemeCategory20=jg,t.scaleSequential=Jo,t.interpolateCubehelixDefault=Hg,t.interpolateRainbow=Zo,t.interpolateWarm=Xg,t.interpolateCool=Vg,t.interpolateViridis=$g,t.interpolateMagma=Zg,t.interpolateInferno=Gg,t.interpolatePlasma=Jg,t.creator=nu,t.customEvent=fu,t.local=eu,t.matcher=im,t.mouse=pu,t.namespace=Qo,t.namespaces=Kg,t.select=qa,t.selectAll=Ua,t.selection=La,t.selector=vu,t.selectorAll=gu,t.touch=Ra,t.touches=Da,t.window=Vu,t.active=Ic,t.interrupt=ja,t.transition=Rc,t.axisTop=Wc,t.axisRight=$c,t.axisBottom=Zc,t.axisLeft=Gc,t.cluster=is,t.hierarchy=_s,t.pack=Ys,t.packSiblings=Us,t.packEnclose=Ts,t.partition=Ws,t.stratify=Gs,t.tree=uf,t.treemap=sf,t.treemapBinary=ff,t.treemapDice=Vs,t.treemapSlice=af,t.treemapSliceDice=lf,t.treemapSquarify=Pm,t.treemapResquarify=Lm,t.forceCenter=hf,t.forceCollide=yf,t.forceLink=mf,t.forceManyBody=Mf,t.forceSimulation=wf,t.forceX=Tf,t.forceY=kf,t.drag=Uf,t.dragDisable=Ef,t.dragEnable=Af,t.voronoi=vl,t.zoom=kl,t.zoomIdentity=Xm,t.zoomTransform=ml,t.brush=Ol,t.brushX=Rl,t.brushY=Dl,t.brushSelection=Ul,t.geoArea=nh,t.geoBounds=mh,t.geoCentroid=Ch,t.geoCircle=Yh,t.geoClipExtent=Zh,t.geoDistance=np,t.geoGraticule=ip,t.geoInterpolate=op,t.geoLength=tp,t.geoPath=Tp,t.geoAlbers=Hp,t.geoAlbersUsa=Vp,t.geoAzimuthalEqualArea=Zp,t.geoAzimuthalEquidistant=Gp,t.geoConicConformal=ed,t.geoConicEqualArea=jp,t.geoConicEquidistant=ud,t.geoEquirectangular=id,t.geoGnomonic=cd,t.geoProjection=Fp,t.geoProjectionMutator=Ip,t.geoMercator=Qp,t.geoOrthographic=fd,t.geoStereographic=hd,t.geoTransverseMercator=dd,t.geoRotation=Oh,t.geoStream=Gl,t.geoTransform=Lp,Object.defineProperty(t,"__esModule",{value:!0})}); \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/d3/dagre-d3.min.js b/www/wiki/extensions/Mermaid/res/d3/dagre-d3.min.js
new file mode 100644
index 00000000..e0fadb50
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/d3/dagre-d3.min.js
@@ -0,0 +1,8113 @@
+(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.dagreD3=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<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){
+/**
+ * @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.
+ */
+module.exports={graphlib:require("./lib/graphlib"),dagre:require("./lib/dagre"),intersect:require("./lib/intersect"),render:require("./lib/render"),util:require("./lib/util"),version:require("./lib/version")}},{"./lib/dagre":8,"./lib/graphlib":9,"./lib/intersect":10,"./lib/render":25,"./lib/util":27,"./lib/version":28}],2:[function(require,module,exports){var util=require("./util");module.exports={default:normal,normal:normal,vee:vee,undirected:undirected};function normal(parent,id,edge,type){var marker=parent.append("marker").attr("id",id).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto");var path=marker.append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");util.applyStyle(path,edge[type+"Style"]);if(edge[type+"Class"]){path.attr("class",edge[type+"Class"])}}function vee(parent,id,edge,type){var marker=parent.append("marker").attr("id",id).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto");var path=marker.append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");util.applyStyle(path,edge[type+"Style"]);if(edge[type+"Class"]){path.attr("class",edge[type+"Class"])}}function undirected(parent,id,edge,type){var marker=parent.append("marker").attr("id",id).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto");var path=marker.append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");util.applyStyle(path,edge[type+"Style"]);if(edge[type+"Class"]){path.attr("class",edge[type+"Class"])}}},{"./util":27}],3:[function(require,module,exports){var util=require("./util"),addLabel=require("./label/add-label");module.exports=createClusters;function createClusters(selection,g){var clusters=g.nodes().filter(function(v){return util.isSubgraph(g,v)}),svgClusters=selection.selectAll("g.cluster").data(clusters,function(v){return v});svgClusters.selectAll("*").remove();svgClusters.enter().append("g").attr("class","cluster").attr("id",function(v){var node=g.node(v);return node.id}).style("opacity",0);svgClusters=selection.selectAll("g.cluster");util.applyTransition(svgClusters,g).style("opacity",1);svgClusters.each(function(v){var node=g.node(v),thisGroup=d3.select(this);d3.select(this).append("rect");var labelGroup=thisGroup.append("g").attr("class","label");addLabel(labelGroup,node,node.clusterLabelPos)});svgClusters.selectAll("rect").each(function(c){var node=g.node(c);var domCluster=d3.select(this);util.applyStyle(domCluster,node.style)});util.applyTransition(svgClusters.exit(),g).style("opacity",0).remove();return svgClusters}},{"./label/add-label":18,"./util":27}],4:[function(require,module,exports){"use strict";var _=require("./lodash"),addLabel=require("./label/add-label"),util=require("./util"),d3=require("./d3");module.exports=createEdgeLabels;function createEdgeLabels(selection,g){var svgEdgeLabels=selection.selectAll("g.edgeLabel").data(g.edges(),function(e){return util.edgeToId(e)}).classed("update",true);svgEdgeLabels.selectAll("*").remove();svgEdgeLabels.enter().append("g").classed("edgeLabel",true).style("opacity",0);svgEdgeLabels=selection.selectAll("g.edgeLabel");svgEdgeLabels.each(function(e){var edge=g.edge(e),label=addLabel(d3.select(this),g.edge(e),0,0).classed("label",true),bbox=label.node().getBBox();if(edge.labelId){label.attr("id",edge.labelId)}if(!_.has(edge,"width")){edge.width=bbox.width}if(!_.has(edge,"height")){edge.height=bbox.height}});util.applyTransition(svgEdgeLabels.exit(),g).style("opacity",0).remove();return svgEdgeLabels}},{"./d3":7,"./label/add-label":18,"./lodash":21,"./util":27}],5:[function(require,module,exports){"use strict";var _=require("./lodash"),intersectNode=require("./intersect/intersect-node"),util=require("./util"),d3=require("./d3");module.exports=createEdgePaths;function createEdgePaths(selection,g,arrows){var svgPaths=selection.selectAll("g.edgePath").data(g.edges(),function(e){return util.edgeToId(e)}).classed("update",true);enter(svgPaths,g);exit(svgPaths,g);svgPaths=selection.selectAll("g.edgePath");util.applyTransition(svgPaths,g).style("opacity",1);
+// Save DOM element in the path group, and set ID and class
+svgPaths.each(function(e){var domEdge=d3.select(this);var edge=g.edge(e);edge.elem=this;if(edge.id){domEdge.attr("id",edge.id)}util.applyClass(domEdge,edge["class"],(domEdge.classed("update")?"update ":"")+"edgePath")});svgPaths.selectAll("path.path").each(function(e){var edge=g.edge(e);edge.arrowheadId=_.uniqueId("arrowhead");var domEdge=d3.select(this).attr("marker-end",function(){return"url("+makeFragmentRef(location.href,edge.arrowheadId)+")"}).style("fill","none");util.applyTransition(domEdge,g).attr("d",function(e){return calcPoints(g,e)});util.applyStyle(domEdge,edge.style)});svgPaths.selectAll("defs *").remove();svgPaths.selectAll("defs").each(function(e){var edge=g.edge(e),arrowhead=arrows[edge.arrowhead];arrowhead(d3.select(this),edge.arrowheadId,edge,"arrowhead")});return svgPaths}function makeFragmentRef(url,fragmentId){var baseUrl=url.split("#")[0];return baseUrl+"#"+fragmentId}function calcPoints(g,e){var edge=g.edge(e),tail=g.node(e.v),head=g.node(e.w),points=edge.points.slice(1,edge.points.length-1);points.unshift(intersectNode(tail,points[0]));points.push(intersectNode(head,points[points.length-1]));return createLine(edge,points)}function createLine(edge,points){var line=d3.line().x(function(d){return d.x}).y(function(d){return d.y});line.curve(edge.lineCurve);return line(points)}function getCoords(elem){var bbox=elem.getBBox(),matrix=elem.ownerSVGElement.getScreenCTM().inverse().multiply(elem.getScreenCTM()).translate(bbox.width/2,bbox.height/2);return{x:matrix.e,y:matrix.f}}function enter(svgPaths,g){var svgPathsEnter=svgPaths.enter().append("g").attr("class","edgePath").style("opacity",0);svgPathsEnter.append("path").attr("class","path").attr("d",function(e){var edge=g.edge(e),sourceElem=g.node(e.v).elem,points=_.range(edge.points.length).map(function(){return getCoords(sourceElem)});return createLine(edge,points)});svgPathsEnter.append("defs")}function exit(svgPaths,g){var svgPathExit=svgPaths.exit();util.applyTransition(svgPathExit,g).style("opacity",0).remove();util.applyTransition(svgPathExit.select("path.path"),g).attr("d",function(e){var source=g.node(e.v);if(source){var points=_.range(this.getTotalLength()).map(function(){return source});return createLine({},points)}else{return d3.select(this).attr("d")}})}},{"./d3":7,"./intersect/intersect-node":14,"./lodash":21,"./util":27}],6:[function(require,module,exports){"use strict";var _=require("./lodash"),addLabel=require("./label/add-label"),util=require("./util"),d3=require("./d3");module.exports=createNodes;function createNodes(selection,g,shapes){var simpleNodes=g.nodes().filter(function(v){return!util.isSubgraph(g,v)});var svgNodes=selection.selectAll("g.node").data(simpleNodes,function(v){return v}).classed("update",true);svgNodes.selectAll("*").remove();svgNodes.enter().append("g").attr("class","node").style("opacity",0);svgNodes=selection.selectAll("g.node");svgNodes.each(function(v){var node=g.node(v),thisGroup=d3.select(this);util.applyClass(thisGroup,node["class"],(thisGroup.classed("update")?"update ":"")+"node");var labelGroup=thisGroup.append("g").attr("class","label"),labelDom=addLabel(labelGroup,node),shape=shapes[node.shape],bbox=_.pick(labelDom.node().getBBox(),"width","height");node.elem=this;if(node.id){thisGroup.attr("id",node.id)}if(node.labelId){labelGroup.attr("id",node.labelId)}if(_.has(node,"width")){bbox.width=node.width}if(_.has(node,"height")){bbox.height=node.height}bbox.width+=node.paddingLeft+node.paddingRight;bbox.height+=node.paddingTop+node.paddingBottom;labelGroup.attr("transform","translate("+(node.paddingLeft-node.paddingRight)/2+","+(node.paddingTop-node.paddingBottom)/2+")");var shapeSvg=shape(d3.select(this),bbox,node);util.applyStyle(shapeSvg,node.style);var shapeBBox=shapeSvg.node().getBBox();node.width=shapeBBox.width;node.height=shapeBBox.height});util.applyTransition(svgNodes.exit(),g).style("opacity",0).remove();return svgNodes}},{"./d3":7,"./label/add-label":18,"./lodash":21,"./util":27}],7:[function(require,module,exports){
+// Stub to get D3 either via NPM or from the global object
+module.exports=window.d3},{}],8:[function(require,module,exports){
+/* global window */
+var dagre;if(require){try{dagre=require("dagre")}catch(e){}}if(!dagre){dagre=window.dagre}module.exports=dagre},{dagre:29}],9:[function(require,module,exports){
+/* global window */
+var graphlib;if(require){try{graphlib=require("graphlib")}catch(e){}}if(!graphlib){graphlib=window.graphlib}module.exports=graphlib},{graphlib:59}],10:[function(require,module,exports){module.exports={node:require("./intersect-node"),circle:require("./intersect-circle"),ellipse:require("./intersect-ellipse"),polygon:require("./intersect-polygon"),rect:require("./intersect-rect")}},{"./intersect-circle":11,"./intersect-ellipse":12,"./intersect-node":14,"./intersect-polygon":15,"./intersect-rect":16}],11:[function(require,module,exports){var intersectEllipse=require("./intersect-ellipse");module.exports=intersectCircle;function intersectCircle(node,rx,point){return intersectEllipse(node,rx,rx,point)}},{"./intersect-ellipse":12}],12:[function(require,module,exports){module.exports=intersectEllipse;function intersectEllipse(node,rx,ry,point){
+// Formulae from: http://mathworld.wolfram.com/Ellipse-LineIntersection.html
+var cx=node.x;var cy=node.y;var px=cx-point.x;var py=cy-point.y;var det=Math.sqrt(rx*rx*py*py+ry*ry*px*px);var dx=Math.abs(rx*ry*px/det);if(point.x<cx){dx=-dx}var dy=Math.abs(rx*ry*py/det);if(point.y<cy){dy=-dy}return{x:cx+dx,y:cy+dy}}},{}],13:[function(require,module,exports){module.exports=intersectLine;
+/*
+ * Returns the point at which two lines, p and q, intersect or returns
+ * undefined if they do not intersect.
+ */function intersectLine(p1,p2,q1,q2){
+// Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994,
+// p7 and p473.
+var a1,a2,b1,b2,c1,c2;var r1,r2,r3,r4;var denom,offset,num;var x,y;
+// Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x +
+// b1 y + c1 = 0.
+a1=p2.y-p1.y;b1=p1.x-p2.x;c1=p2.x*p1.y-p1.x*p2.y;
+// Compute r3 and r4.
+r3=a1*q1.x+b1*q1.y+c1;r4=a1*q2.x+b1*q2.y+c1;
+// Check signs of r3 and r4. If both point 3 and point 4 lie on
+// same side of line 1, the line segments do not intersect.
+if(r3!==0&&r4!==0&&sameSign(r3,r4)){return}
+// Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0
+a2=q2.y-q1.y;b2=q1.x-q2.x;c2=q2.x*q1.y-q1.x*q2.y;
+// Compute r1 and r2
+r1=a2*p1.x+b2*p1.y+c2;r2=a2*p2.x+b2*p2.y+c2;
+// Check signs of r1 and r2. If both point 1 and point 2 lie
+// on same side of second line segment, the line segments do
+// not intersect.
+if(r1!==0&&r2!==0&&sameSign(r1,r2)){return}
+// Line segments intersect: compute intersection point.
+denom=a1*b2-a2*b1;if(denom===0){return}offset=Math.abs(denom/2);
+// The denom/2 is to get rounding instead of truncating. It
+// is added or subtracted to the numerator, depending upon the
+// sign of the numerator.
+num=b1*c2-b2*c1;x=num<0?(num-offset)/denom:(num+offset)/denom;num=a2*c1-a1*c2;y=num<0?(num-offset)/denom:(num+offset)/denom;return{x:x,y:y}}function sameSign(r1,r2){return r1*r2>0}},{}],14:[function(require,module,exports){module.exports=intersectNode;function intersectNode(node,point){return node.intersect(point)}},{}],15:[function(require,module,exports){var intersectLine=require("./intersect-line");module.exports=intersectPolygon;
+/*
+ * Returns the point ({x, y}) at which the point argument intersects with the
+ * node argument assuming that it has the shape specified by polygon.
+ */function intersectPolygon(node,polyPoints,point){var x1=node.x;var y1=node.y;var intersections=[];var minX=Number.POSITIVE_INFINITY,minY=Number.POSITIVE_INFINITY;polyPoints.forEach(function(entry){minX=Math.min(minX,entry.x);minY=Math.min(minY,entry.y)});var left=x1-node.width/2-minX;var top=y1-node.height/2-minY;for(var i=0;i<polyPoints.length;i++){var p1=polyPoints[i];var p2=polyPoints[i<polyPoints.length-1?i+1:0];var intersect=intersectLine(node,point,{x:left+p1.x,y:top+p1.y},{x:left+p2.x,y:top+p2.y});if(intersect){intersections.push(intersect)}}if(!intersections.length){console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",node);return node}if(intersections.length>1){
+// More intersections, find the one nearest to edge end point
+intersections.sort(function(p,q){var pdx=p.x-point.x,pdy=p.y-point.y,distp=Math.sqrt(pdx*pdx+pdy*pdy),qdx=q.x-point.x,qdy=q.y-point.y,distq=Math.sqrt(qdx*qdx+qdy*qdy);return distp<distq?-1:distp===distq?0:1})}return intersections[0]}},{"./intersect-line":13}],16:[function(require,module,exports){module.exports=intersectRect;function intersectRect(node,point){var x=node.x;var y=node.y;
+// Rectangle intersection algorithm from:
+// http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes
+var dx=point.x-x;var dy=point.y-y;var w=node.width/2;var h=node.height/2;var sx,sy;if(Math.abs(dy)*w>Math.abs(dx)*h){
+// Intersection is top or bottom of rect.
+if(dy<0){h=-h}sx=dy===0?0:h*dx/dy;sy=h}else{
+// Intersection is left or right of rect.
+if(dx<0){w=-w}sx=w;sy=dx===0?0:w*dy/dx}return{x:x+sx,y:y+sy}}},{}],17:[function(require,module,exports){var util=require("../util");module.exports=addHtmlLabel;function addHtmlLabel(root,node){var fo=root.append("foreignObject").attr("width","100000");var div=fo.append("xhtml:div");div.attr("xmlns","http://www.w3.org/1999/xhtml");var label=node.label;switch(typeof label){case"function":div.insert(label);break;case"object":
+// Currently we assume this is a DOM object.
+div.insert(function(){return label});break;default:div.html(label)}util.applyStyle(div,node.labelStyle);div.style("display","inline-block");
+// Fix for firefox
+div.style("white-space","nowrap");var client=div.node().getBoundingClientRect();fo.attr("width",client.width).attr("height",client.height);return fo}},{"../util":27}],18:[function(require,module,exports){var addTextLabel=require("./add-text-label"),addHtmlLabel=require("./add-html-label"),addSVGLabel=require("./add-svg-label");module.exports=addLabel;function addLabel(root,node,location){var label=node.label;var labelSvg=root.append("g");
+// Allow the label to be a string, a function that returns a DOM element, or
+// a DOM element itself.
+if(node.labelType==="svg"){addSVGLabel(labelSvg,node)}else if(typeof label!=="string"||node.labelType==="html"){addHtmlLabel(labelSvg,node)}else{addTextLabel(labelSvg,node)}var labelBBox=labelSvg.node().getBBox();var y;switch(location){case"top":y=-node.height/2;break;case"bottom":y=node.height/2-labelBBox.height;break;default:y=-labelBBox.height/2}labelSvg.attr("transform","translate("+-labelBBox.width/2+","+y+")");return labelSvg}},{"./add-html-label":17,"./add-svg-label":19,"./add-text-label":20}],19:[function(require,module,exports){var util=require("../util");module.exports=addSVGLabel;function addSVGLabel(root,node){var domNode=root;domNode.node().appendChild(node.label);util.applyStyle(domNode,node.labelStyle);return domNode}},{"../util":27}],20:[function(require,module,exports){var util=require("../util");module.exports=addTextLabel;
+/*
+ * Attaches a text label to the specified root. Handles escape sequences.
+ */function addTextLabel(root,node){var domNode=root.append("text");var lines=processEscapeSequences(node.label).split("\n");for(var i=0;i<lines.length;i++){domNode.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(lines[i])}util.applyStyle(domNode,node.labelStyle);return domNode}function processEscapeSequences(text){var newText="",escaped=false,ch;for(var i=0;i<text.length;++i){ch=text[i];if(escaped){switch(ch){case"n":newText+="\n";break;default:newText+=ch}escaped=false}else if(ch==="\\"){escaped=true}else{newText+=ch}}return newText}},{"../util":27}],21:[function(require,module,exports){
+/* global window */
+var lodash;if(require){try{lodash=require("lodash")}catch(e){}}if(!lodash){lodash=window._}module.exports=lodash},{lodash:79}],22:[function(require,module,exports){"use strict";var util=require("./util"),d3=require("./d3");module.exports=positionClusters;function positionClusters(selection,g){var created=selection.filter(function(){return!d3.select(this).classed("update")});function translate(v){var node=g.node(v);return"translate("+node.x+","+node.y+")"}created.attr("transform",translate);util.applyTransition(selection,g).style("opacity",1).attr("transform",translate);util.applyTransition(created.selectAll("rect"),g).attr("width",function(v){return g.node(v).width}).attr("height",function(v){return g.node(v).height}).attr("x",function(v){var node=g.node(v);return-node.width/2}).attr("y",function(v){var node=g.node(v);return-node.height/2})}},{"./d3":7,"./util":27}],23:[function(require,module,exports){"use strict";var util=require("./util"),d3=require("./d3"),_=require("./lodash");module.exports=positionEdgeLabels;function positionEdgeLabels(selection,g){var created=selection.filter(function(){return!d3.select(this).classed("update")});function translate(e){var edge=g.edge(e);return _.has(edge,"x")?"translate("+edge.x+","+edge.y+")":""}created.attr("transform",translate);util.applyTransition(selection,g).style("opacity",1).attr("transform",translate)}},{"./d3":7,"./lodash":21,"./util":27}],24:[function(require,module,exports){"use strict";var util=require("./util"),d3=require("./d3");module.exports=positionNodes;function positionNodes(selection,g){var created=selection.filter(function(){return!d3.select(this).classed("update")});function translate(v){var node=g.node(v);return"translate("+node.x+","+node.y+")"}created.attr("transform",translate);util.applyTransition(selection,g).style("opacity",1).attr("transform",translate)}},{"./d3":7,"./util":27}],25:[function(require,module,exports){var _=require("./lodash"),layout=require("./dagre").layout;module.exports=render;
+// This design is based on http://bost.ocks.org/mike/chart/.
+function render(){var createNodes=require("./create-nodes"),createClusters=require("./create-clusters"),createEdgeLabels=require("./create-edge-labels"),createEdgePaths=require("./create-edge-paths"),positionNodes=require("./position-nodes"),positionEdgeLabels=require("./position-edge-labels"),positionClusters=require("./position-clusters"),shapes=require("./shapes"),arrows=require("./arrows");var fn=function(svg,g){preProcessGraph(g);svg.selectAll("*").remove();var outputGroup=createOrSelectGroup(svg,"output"),clustersGroup=createOrSelectGroup(outputGroup,"clusters"),edgePathsGroup=createOrSelectGroup(outputGroup,"edgePaths"),edgeLabels=createEdgeLabels(createOrSelectGroup(outputGroup,"edgeLabels"),g),nodes=createNodes(createOrSelectGroup(outputGroup,"nodes"),g,shapes);layout(g);positionNodes(nodes,g);positionEdgeLabels(edgeLabels,g);createEdgePaths(edgePathsGroup,g,arrows);var clusters=createClusters(clustersGroup,g);positionClusters(clusters,g);postProcessGraph(g)};fn.createNodes=function(value){if(!arguments.length)return createNodes;createNodes=value;return fn};fn.createClusters=function(value){if(!arguments.length)return createClusters;createClusters=value;return fn};fn.createEdgeLabels=function(value){if(!arguments.length)return createEdgeLabels;createEdgeLabels=value;return fn};fn.createEdgePaths=function(value){if(!arguments.length)return createEdgePaths;createEdgePaths=value;return fn};fn.shapes=function(value){if(!arguments.length)return shapes;shapes=value;return fn};fn.arrows=function(value){if(!arguments.length)return arrows;arrows=value;return fn};return fn}var NODE_DEFAULT_ATTRS={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"};var EDGE_DEFAULT_ATTRS={arrowhead:"normal",lineCurve:d3.curveLinear};function preProcessGraph(g){g.nodes().forEach(function(v){var node=g.node(v);if(!_.has(node,"label")&&!g.children(v).length){node.label=v}if(_.has(node,"paddingX")){_.defaults(node,{paddingLeft:node.paddingX,paddingRight:node.paddingX})}if(_.has(node,"paddingY")){_.defaults(node,{paddingTop:node.paddingY,paddingBottom:node.paddingY})}if(_.has(node,"padding")){_.defaults(node,{paddingLeft:node.padding,paddingRight:node.padding,paddingTop:node.padding,paddingBottom:node.padding})}_.defaults(node,NODE_DEFAULT_ATTRS);_.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(k){node[k]=Number(node[k])});
+// Save dimensions for restore during post-processing
+if(_.has(node,"width")){node._prevWidth=node.width}if(_.has(node,"height")){node._prevHeight=node.height}});g.edges().forEach(function(e){var edge=g.edge(e);if(!_.has(edge,"label")){edge.label=""}_.defaults(edge,EDGE_DEFAULT_ATTRS)})}function postProcessGraph(g){_.each(g.nodes(),function(v){var node=g.node(v);
+// Restore original dimensions
+if(_.has(node,"_prevWidth")){node.width=node._prevWidth}else{delete node.width}if(_.has(node,"_prevHeight")){node.height=node._prevHeight}else{delete node.height}delete node._prevWidth;delete node._prevHeight})}function createOrSelectGroup(root,name){var selection=root.select("g."+name);if(selection.empty()){selection=root.append("g").attr("class",name)}return selection}},{"./arrows":2,"./create-clusters":3,"./create-edge-labels":4,"./create-edge-paths":5,"./create-nodes":6,"./dagre":8,"./lodash":21,"./position-clusters":22,"./position-edge-labels":23,"./position-nodes":24,"./shapes":26}],26:[function(require,module,exports){"use strict";var intersectRect=require("./intersect/intersect-rect"),intersectEllipse=require("./intersect/intersect-ellipse"),intersectCircle=require("./intersect/intersect-circle"),intersectPolygon=require("./intersect/intersect-polygon");module.exports={rect:rect,ellipse:ellipse,circle:circle,diamond:diamond};function rect(parent,bbox,node){var shapeSvg=parent.insert("rect",":first-child").attr("rx",node.rx).attr("ry",node.ry).attr("x",-bbox.width/2).attr("y",-bbox.height/2).attr("width",bbox.width).attr("height",bbox.height);node.intersect=function(point){return intersectRect(node,point)};return shapeSvg}function ellipse(parent,bbox,node){var rx=bbox.width/2,ry=bbox.height/2,shapeSvg=parent.insert("ellipse",":first-child").attr("x",-bbox.width/2).attr("y",-bbox.height/2).attr("rx",rx).attr("ry",ry);node.intersect=function(point){return intersectEllipse(node,rx,ry,point)};return shapeSvg}function circle(parent,bbox,node){var r=Math.max(bbox.width,bbox.height)/2,shapeSvg=parent.insert("circle",":first-child").attr("x",-bbox.width/2).attr("y",-bbox.height/2).attr("r",r);node.intersect=function(point){return intersectCircle(node,r,point)};return shapeSvg}
+// Circumscribe an ellipse for the bounding box with a diamond shape. I derived
+// the function to calculate the diamond shape from:
+// http://mathforum.org/kb/message.jspa?messageID=3750236
+function diamond(parent,bbox,node){var w=bbox.width*Math.SQRT2/2,h=bbox.height*Math.SQRT2/2,points=[{x:0,y:-h},{x:-w,y:0},{x:0,y:h},{x:w,y:0}],shapeSvg=parent.insert("polygon",":first-child").attr("points",points.map(function(p){return p.x+","+p.y}).join(" "));node.intersect=function(p){return intersectPolygon(node,points,p)};return shapeSvg}},{"./intersect/intersect-circle":11,"./intersect/intersect-ellipse":12,"./intersect/intersect-polygon":15,"./intersect/intersect-rect":16}],27:[function(require,module,exports){var _=require("./lodash");
+// Public utility functions
+module.exports={isSubgraph:isSubgraph,edgeToId:edgeToId,applyStyle:applyStyle,applyClass:applyClass,applyTransition:applyTransition};
+/*
+ * Returns true if the specified node in the graph is a subgraph node. A
+ * subgraph node is one that contains other nodes.
+ */function isSubgraph(g,v){return!!g.children(v).length}function edgeToId(e){return escapeId(e.v)+":"+escapeId(e.w)+":"+escapeId(e.name)}var ID_DELIM=/:/g;function escapeId(str){return str?String(str).replace(ID_DELIM,"\\:"):""}function applyStyle(dom,styleFn){if(styleFn){dom.attr("style",styleFn)}}function applyClass(dom,classFn,otherClasses){if(classFn){dom.attr("class",classFn).attr("class",otherClasses+" "+dom.attr("class"))}}function applyTransition(selection,g){var graph=g.graph();if(_.isPlainObject(graph)){var transition=graph.transition;if(_.isFunction(transition)){return transition(selection)}}return selection}},{"./lodash":21}],28:[function(require,module,exports){module.exports="0.5.3"},{}],29:[function(require,module,exports){
+/*
+Copyright (c) 2012-2014 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.
+*/
+module.exports={graphlib:require("./lib/graphlib"),layout:require("./lib/layout"),debug:require("./lib/debug"),util:{time:require("./lib/util").time,notime:require("./lib/util").notime},version:require("./lib/version")}},{"./lib/debug":34,"./lib/graphlib":35,"./lib/layout":37,"./lib/util":57,"./lib/version":58}],30:[function(require,module,exports){"use strict";var _=require("./lodash"),greedyFAS=require("./greedy-fas");module.exports={run:run,undo:undo};function run(g){var fas=g.graph().acyclicer==="greedy"?greedyFAS(g,weightFn(g)):dfsFAS(g);_.each(fas,function(e){var label=g.edge(e);g.removeEdge(e);label.forwardName=e.name;label.reversed=true;g.setEdge(e.w,e.v,label,_.uniqueId("rev"))});function weightFn(g){return function(e){return g.edge(e).weight}}}function dfsFAS(g){var fas=[],stack={},visited={};function dfs(v){if(_.has(visited,v)){return}visited[v]=true;stack[v]=true;_.each(g.outEdges(v),function(e){if(_.has(stack,e.w)){fas.push(e)}else{dfs(e.w)}});delete stack[v]}_.each(g.nodes(),dfs);return fas}function undo(g){_.each(g.edges(),function(e){var label=g.edge(e);if(label.reversed){g.removeEdge(e);var forwardName=label.forwardName;delete label.reversed;delete label.forwardName;g.setEdge(e.w,e.v,label,forwardName)}})}},{"./greedy-fas":36,"./lodash":38}],31:[function(require,module,exports){var _=require("./lodash"),util=require("./util");module.exports=addBorderSegments;function addBorderSegments(g){function dfs(v){var children=g.children(v),node=g.node(v);if(children.length){_.each(children,dfs)}if(_.has(node,"minRank")){node.borderLeft=[];node.borderRight=[];for(var rank=node.minRank,maxRank=node.maxRank+1;rank<maxRank;++rank){addBorderNode(g,"borderLeft","_bl",v,node,rank);addBorderNode(g,"borderRight","_br",v,node,rank)}}}_.each(g.children(),dfs)}function addBorderNode(g,prop,prefix,sg,sgNode,rank){var label={width:0,height:0,rank:rank,borderType:prop},prev=sgNode[prop][rank-1],curr=util.addDummyNode(g,"border",label,prefix);sgNode[prop][rank]=curr;g.setParent(curr,sg);if(prev){g.setEdge(prev,curr,{weight:1})}}},{"./lodash":38,"./util":57}],32:[function(require,module,exports){"use strict";var _=require("./lodash");module.exports={adjust:adjust,undo:undo};function adjust(g){var rankDir=g.graph().rankdir.toLowerCase();if(rankDir==="lr"||rankDir==="rl"){swapWidthHeight(g)}}function undo(g){var rankDir=g.graph().rankdir.toLowerCase();if(rankDir==="bt"||rankDir==="rl"){reverseY(g)}if(rankDir==="lr"||rankDir==="rl"){swapXY(g);swapWidthHeight(g)}}function swapWidthHeight(g){_.each(g.nodes(),function(v){swapWidthHeightOne(g.node(v))});_.each(g.edges(),function(e){swapWidthHeightOne(g.edge(e))})}function swapWidthHeightOne(attrs){var w=attrs.width;attrs.width=attrs.height;attrs.height=w}function reverseY(g){_.each(g.nodes(),function(v){reverseYOne(g.node(v))});_.each(g.edges(),function(e){var edge=g.edge(e);_.each(edge.points,reverseYOne);if(_.has(edge,"y")){reverseYOne(edge)}})}function reverseYOne(attrs){attrs.y=-attrs.y}function swapXY(g){_.each(g.nodes(),function(v){swapXYOne(g.node(v))});_.each(g.edges(),function(e){var edge=g.edge(e);_.each(edge.points,swapXYOne);if(_.has(edge,"x")){swapXYOne(edge)}})}function swapXYOne(attrs){var x=attrs.x;attrs.x=attrs.y;attrs.y=x}},{"./lodash":38}],33:[function(require,module,exports){
+/*
+ * Simple doubly linked list implementation derived from Cormen, et al.,
+ * "Introduction to Algorithms".
+ */
+module.exports=List;function List(){var sentinel={};sentinel._next=sentinel._prev=sentinel;this._sentinel=sentinel}List.prototype.dequeue=function(){var sentinel=this._sentinel,entry=sentinel._prev;if(entry!==sentinel){unlink(entry);return entry}};List.prototype.enqueue=function(entry){var sentinel=this._sentinel;if(entry._prev&&entry._next){unlink(entry)}entry._next=sentinel._next;sentinel._next._prev=entry;sentinel._next=entry;entry._prev=sentinel};List.prototype.toString=function(){var strs=[],sentinel=this._sentinel,curr=sentinel._prev;while(curr!==sentinel){strs.push(JSON.stringify(curr,filterOutLinks));curr=curr._prev}return"["+strs.join(", ")+"]"};function unlink(entry){entry._prev._next=entry._next;entry._next._prev=entry._prev;delete entry._next;delete entry._prev}function filterOutLinks(k,v){if(k!=="_next"&&k!=="_prev"){return v}}},{}],34:[function(require,module,exports){var _=require("./lodash"),util=require("./util"),Graph=require("./graphlib").Graph;module.exports={debugOrdering:debugOrdering};
+/* istanbul ignore next */function debugOrdering(g){var layerMatrix=util.buildLayerMatrix(g);var h=new Graph({compound:true,multigraph:true}).setGraph({});_.each(g.nodes(),function(v){h.setNode(v,{label:v});h.setParent(v,"layer"+g.node(v).rank)});_.each(g.edges(),function(e){h.setEdge(e.v,e.w,{},e.name)});_.each(layerMatrix,function(layer,i){var layerV="layer"+i;h.setNode(layerV,{rank:"same"});_.reduce(layer,function(u,v){h.setEdge(u,v,{style:"invis"});return v})});return h}},{"./graphlib":35,"./lodash":38,"./util":57}],35:[function(require,module,exports){
+/* global window */
+var graphlib;if(typeof require==="function"){try{graphlib=require("graphlib")}catch(e){}}if(!graphlib){graphlib=window.graphlib}module.exports=graphlib},{graphlib:59}],36:[function(require,module,exports){var _=require("./lodash"),Graph=require("./graphlib").Graph,List=require("./data/list");
+/*
+ * A greedy heuristic for finding a feedback arc set for a graph. A feedback
+ * arc set is a set of edges that can be removed to make a graph acyclic.
+ * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and
+ * effective heuristic for the feedback arc set problem." This implementation
+ * adjusts that from the paper to allow for weighted edges.
+ */module.exports=greedyFAS;var DEFAULT_WEIGHT_FN=_.constant(1);function greedyFAS(g,weightFn){if(g.nodeCount()<=1){return[]}var state=buildState(g,weightFn||DEFAULT_WEIGHT_FN);var results=doGreedyFAS(state.graph,state.buckets,state.zeroIdx);
+// Expand multi-edges
+return _.flatten(_.map(results,function(e){return g.outEdges(e.v,e.w)}),true)}function doGreedyFAS(g,buckets,zeroIdx){var results=[],sources=buckets[buckets.length-1],sinks=buckets[0];var entry;while(g.nodeCount()){while(entry=sinks.dequeue()){removeNode(g,buckets,zeroIdx,entry)}while(entry=sources.dequeue()){removeNode(g,buckets,zeroIdx,entry)}if(g.nodeCount()){for(var i=buckets.length-2;i>0;--i){entry=buckets[i].dequeue();if(entry){results=results.concat(removeNode(g,buckets,zeroIdx,entry,true));break}}}}return results}function removeNode(g,buckets,zeroIdx,entry,collectPredecessors){var results=collectPredecessors?[]:undefined;_.each(g.inEdges(entry.v),function(edge){var weight=g.edge(edge),uEntry=g.node(edge.v);if(collectPredecessors){results.push({v:edge.v,w:edge.w})}uEntry.out-=weight;assignBucket(buckets,zeroIdx,uEntry)});_.each(g.outEdges(entry.v),function(edge){var weight=g.edge(edge),w=edge.w,wEntry=g.node(w);wEntry["in"]-=weight;assignBucket(buckets,zeroIdx,wEntry)});g.removeNode(entry.v);return results}function buildState(g,weightFn){var fasGraph=new Graph,maxIn=0,maxOut=0;_.each(g.nodes(),function(v){fasGraph.setNode(v,{v:v,in:0,out:0})});
+// Aggregate weights on nodes, but also sum the weights across multi-edges
+// into a single edge for the fasGraph.
+_.each(g.edges(),function(e){var prevWeight=fasGraph.edge(e.v,e.w)||0,weight=weightFn(e),edgeWeight=prevWeight+weight;fasGraph.setEdge(e.v,e.w,edgeWeight);maxOut=Math.max(maxOut,fasGraph.node(e.v).out+=weight);maxIn=Math.max(maxIn,fasGraph.node(e.w)["in"]+=weight)});var buckets=_.range(maxOut+maxIn+3).map(function(){return new List});var zeroIdx=maxIn+1;_.each(fasGraph.nodes(),function(v){assignBucket(buckets,zeroIdx,fasGraph.node(v))});return{graph:fasGraph,buckets:buckets,zeroIdx:zeroIdx}}function assignBucket(buckets,zeroIdx,entry){if(!entry.out){buckets[0].enqueue(entry)}else if(!entry["in"]){buckets[buckets.length-1].enqueue(entry)}else{buckets[entry.out-entry["in"]+zeroIdx].enqueue(entry)}}},{"./data/list":33,"./graphlib":35,"./lodash":38}],37:[function(require,module,exports){"use strict";var _=require("./lodash"),acyclic=require("./acyclic"),normalize=require("./normalize"),rank=require("./rank"),normalizeRanks=require("./util").normalizeRanks,parentDummyChains=require("./parent-dummy-chains"),removeEmptyRanks=require("./util").removeEmptyRanks,nestingGraph=require("./nesting-graph"),addBorderSegments=require("./add-border-segments"),coordinateSystem=require("./coordinate-system"),order=require("./order"),position=require("./position"),util=require("./util"),Graph=require("./graphlib").Graph;module.exports=layout;function layout(g,opts){var time=opts&&opts.debugTiming?util.time:util.notime;time("layout",function(){var layoutGraph=time(" buildLayoutGraph",function(){return buildLayoutGraph(g)});time(" runLayout",function(){runLayout(layoutGraph,time)});time(" updateInputGraph",function(){updateInputGraph(g,layoutGraph)})})}function runLayout(g,time){time(" makeSpaceForEdgeLabels",function(){makeSpaceForEdgeLabels(g)});time(" removeSelfEdges",function(){removeSelfEdges(g)});time(" acyclic",function(){acyclic.run(g)});time(" nestingGraph.run",function(){nestingGraph.run(g)});time(" rank",function(){rank(util.asNonCompoundGraph(g))});time(" injectEdgeLabelProxies",function(){injectEdgeLabelProxies(g)});time(" removeEmptyRanks",function(){removeEmptyRanks(g)});time(" nestingGraph.cleanup",function(){nestingGraph.cleanup(g)});time(" normalizeRanks",function(){normalizeRanks(g)});time(" assignRankMinMax",function(){assignRankMinMax(g)});time(" removeEdgeLabelProxies",function(){removeEdgeLabelProxies(g)});time(" normalize.run",function(){normalize.run(g)});time(" parentDummyChains",function(){parentDummyChains(g)});time(" addBorderSegments",function(){addBorderSegments(g)});time(" order",function(){order(g)});time(" insertSelfEdges",function(){insertSelfEdges(g)});time(" adjustCoordinateSystem",function(){coordinateSystem.adjust(g)});time(" position",function(){position(g)});time(" positionSelfEdges",function(){positionSelfEdges(g)});time(" removeBorderNodes",function(){removeBorderNodes(g)});time(" normalize.undo",function(){normalize.undo(g)});time(" fixupEdgeLabelCoords",function(){fixupEdgeLabelCoords(g)});time(" undoCoordinateSystem",function(){coordinateSystem.undo(g)});time(" translateGraph",function(){translateGraph(g)});time(" assignNodeIntersects",function(){assignNodeIntersects(g)});time(" reversePoints",function(){reversePointsForReversedEdges(g)});time(" acyclic.undo",function(){acyclic.undo(g)})}
+/*
+ * Copies final layout information from the layout graph back to the input
+ * graph. This process only copies whitelisted attributes from the layout graph
+ * to the input graph, so it serves as a good place to determine what
+ * attributes can influence layout.
+ */function updateInputGraph(inputGraph,layoutGraph){_.each(inputGraph.nodes(),function(v){var inputLabel=inputGraph.node(v),layoutLabel=layoutGraph.node(v);if(inputLabel){inputLabel.x=layoutLabel.x;inputLabel.y=layoutLabel.y;if(layoutGraph.children(v).length){inputLabel.width=layoutLabel.width;inputLabel.height=layoutLabel.height}}});_.each(inputGraph.edges(),function(e){var inputLabel=inputGraph.edge(e),layoutLabel=layoutGraph.edge(e);inputLabel.points=layoutLabel.points;if(_.has(layoutLabel,"x")){inputLabel.x=layoutLabel.x;inputLabel.y=layoutLabel.y}});inputGraph.graph().width=layoutGraph.graph().width;inputGraph.graph().height=layoutGraph.graph().height}var graphNumAttrs=["nodesep","edgesep","ranksep","marginx","marginy"],graphDefaults={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},graphAttrs=["acyclicer","ranker","rankdir","align"],nodeNumAttrs=["width","height"],nodeDefaults={width:0,height:0},edgeNumAttrs=["minlen","weight","width","height","labeloffset"],edgeDefaults={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},edgeAttrs=["labelpos"];
+/*
+ * Constructs a new graph from the input graph, which can be used for layout.
+ * This process copies only whitelisted attributes from the input graph to the
+ * layout graph. Thus this function serves as a good place to determine what
+ * attributes can influence layout.
+ */function buildLayoutGraph(inputGraph){var g=new Graph({multigraph:true,compound:true}),graph=canonicalize(inputGraph.graph());g.setGraph(_.merge({},graphDefaults,selectNumberAttrs(graph,graphNumAttrs),_.pick(graph,graphAttrs)));_.each(inputGraph.nodes(),function(v){var node=canonicalize(inputGraph.node(v));g.setNode(v,_.defaults(selectNumberAttrs(node,nodeNumAttrs),nodeDefaults));g.setParent(v,inputGraph.parent(v))});_.each(inputGraph.edges(),function(e){var edge=canonicalize(inputGraph.edge(e));g.setEdge(e,_.merge({},edgeDefaults,selectNumberAttrs(edge,edgeNumAttrs),_.pick(edge,edgeAttrs)))});return g}
+/*
+ * This idea comes from the Gansner paper: to account for edge labels in our
+ * layout we split each rank in half by doubling minlen and halving ranksep.
+ * Then we can place labels at these mid-points between nodes.
+ *
+ * We also add some minimal padding to the width to push the label for the edge
+ * away from the edge itself a bit.
+ */function makeSpaceForEdgeLabels(g){var graph=g.graph();graph.ranksep/=2;_.each(g.edges(),function(e){var edge=g.edge(e);edge.minlen*=2;if(edge.labelpos.toLowerCase()!=="c"){if(graph.rankdir==="TB"||graph.rankdir==="BT"){edge.width+=edge.labeloffset}else{edge.height+=edge.labeloffset}}})}
+/*
+ * Creates temporary dummy nodes that capture the rank in which each edge's
+ * label is going to, if it has one of non-zero width and height. We do this
+ * so that we can safely remove empty ranks while preserving balance for the
+ * label's position.
+ */function injectEdgeLabelProxies(g){_.each(g.edges(),function(e){var edge=g.edge(e);if(edge.width&&edge.height){var v=g.node(e.v),w=g.node(e.w),label={rank:(w.rank-v.rank)/2+v.rank,e:e};util.addDummyNode(g,"edge-proxy",label,"_ep")}})}function assignRankMinMax(g){var maxRank=0;_.each(g.nodes(),function(v){var node=g.node(v);if(node.borderTop){node.minRank=g.node(node.borderTop).rank;node.maxRank=g.node(node.borderBottom).rank;maxRank=_.max(maxRank,node.maxRank)}});g.graph().maxRank=maxRank}function removeEdgeLabelProxies(g){_.each(g.nodes(),function(v){var node=g.node(v);if(node.dummy==="edge-proxy"){g.edge(node.e).labelRank=node.rank;g.removeNode(v)}})}function translateGraph(g){var minX=Number.POSITIVE_INFINITY,maxX=0,minY=Number.POSITIVE_INFINITY,maxY=0,graphLabel=g.graph(),marginX=graphLabel.marginx||0,marginY=graphLabel.marginy||0;function getExtremes(attrs){var x=attrs.x,y=attrs.y,w=attrs.width,h=attrs.height;minX=Math.min(minX,x-w/2);maxX=Math.max(maxX,x+w/2);minY=Math.min(minY,y-h/2);maxY=Math.max(maxY,y+h/2)}_.each(g.nodes(),function(v){getExtremes(g.node(v))});_.each(g.edges(),function(e){var edge=g.edge(e);if(_.has(edge,"x")){getExtremes(edge)}});minX-=marginX;minY-=marginY;_.each(g.nodes(),function(v){var node=g.node(v);node.x-=minX;node.y-=minY});_.each(g.edges(),function(e){var edge=g.edge(e);_.each(edge.points,function(p){p.x-=minX;p.y-=minY});if(_.has(edge,"x")){edge.x-=minX}if(_.has(edge,"y")){edge.y-=minY}});graphLabel.width=maxX-minX+marginX;graphLabel.height=maxY-minY+marginY}function assignNodeIntersects(g){_.each(g.edges(),function(e){var edge=g.edge(e),nodeV=g.node(e.v),nodeW=g.node(e.w),p1,p2;if(!edge.points){edge.points=[];p1=nodeW;p2=nodeV}else{p1=edge.points[0];p2=edge.points[edge.points.length-1]}edge.points.unshift(util.intersectRect(nodeV,p1));edge.points.push(util.intersectRect(nodeW,p2))})}function fixupEdgeLabelCoords(g){_.each(g.edges(),function(e){var edge=g.edge(e);if(_.has(edge,"x")){if(edge.labelpos==="l"||edge.labelpos==="r"){edge.width-=edge.labeloffset}switch(edge.labelpos){case"l":edge.x-=edge.width/2+edge.labeloffset;break;case"r":edge.x+=edge.width/2+edge.labeloffset;break}}})}function reversePointsForReversedEdges(g){_.each(g.edges(),function(e){var edge=g.edge(e);if(edge.reversed){edge.points.reverse()}})}function removeBorderNodes(g){_.each(g.nodes(),function(v){if(g.children(v).length){var node=g.node(v),t=g.node(node.borderTop),b=g.node(node.borderBottom),l=g.node(_.last(node.borderLeft)),r=g.node(_.last(node.borderRight));node.width=Math.abs(r.x-l.x);node.height=Math.abs(b.y-t.y);node.x=l.x+node.width/2;node.y=t.y+node.height/2}});_.each(g.nodes(),function(v){if(g.node(v).dummy==="border"){g.removeNode(v)}})}function removeSelfEdges(g){_.each(g.edges(),function(e){if(e.v===e.w){var node=g.node(e.v);if(!node.selfEdges){node.selfEdges=[]}node.selfEdges.push({e:e,label:g.edge(e)});g.removeEdge(e)}})}function insertSelfEdges(g){var layers=util.buildLayerMatrix(g);_.each(layers,function(layer){var orderShift=0;_.each(layer,function(v,i){var node=g.node(v);node.order=i+orderShift;_.each(node.selfEdges,function(selfEdge){util.addDummyNode(g,"selfedge",{width:selfEdge.label.width,height:selfEdge.label.height,rank:node.rank,order:i+ ++orderShift,e:selfEdge.e,label:selfEdge.label},"_se")});delete node.selfEdges})})}function positionSelfEdges(g){_.each(g.nodes(),function(v){var node=g.node(v);if(node.dummy==="selfedge"){var selfNode=g.node(node.e.v),x=selfNode.x+selfNode.width/2,y=selfNode.y,dx=node.x-x,dy=selfNode.height/2;g.setEdge(node.e,node.label);g.removeNode(v);node.label.points=[{x:x+2*dx/3,y:y-dy},{x:x+5*dx/6,y:y-dy},{x:x+dx,y:y},{x:x+5*dx/6,y:y+dy},{x:x+2*dx/3,y:y+dy}];node.label.x=node.x;node.label.y=node.y}})}function selectNumberAttrs(obj,attrs){return _.mapValues(_.pick(obj,attrs),Number)}function canonicalize(attrs){var newAttrs={};_.each(attrs,function(v,k){newAttrs[k.toLowerCase()]=v});return newAttrs}},{"./acyclic":30,"./add-border-segments":31,"./coordinate-system":32,"./graphlib":35,"./lodash":38,"./nesting-graph":39,"./normalize":40,"./order":45,"./parent-dummy-chains":50,"./position":52,"./rank":54,"./util":57}],38:[function(require,module,exports){
+/* global window */
+var lodash;if(typeof require==="function"){try{lodash=require("lodash")}catch(e){}}if(!lodash){lodash=window._}module.exports=lodash},{lodash:79}],39:[function(require,module,exports){var _=require("./lodash"),util=require("./util");module.exports={run:run,cleanup:cleanup};
+/*
+ * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,
+ * adds appropriate edges to ensure that all cluster nodes are placed between
+ * these boundries, and ensures that the graph is connected.
+ *
+ * In addition we ensure, through the use of the minlen property, that nodes
+ * and subgraph border nodes to not end up on the same rank.
+ *
+ * Preconditions:
+ *
+ * 1. Input graph is a DAG
+ * 2. Nodes in the input graph has a minlen attribute
+ *
+ * Postconditions:
+ *
+ * 1. Input graph is connected.
+ * 2. Dummy nodes are added for the tops and bottoms of subgraphs.
+ * 3. The minlen attribute for nodes is adjusted to ensure nodes do not
+ * get placed on the same rank as subgraph border nodes.
+ *
+ * The nesting graph idea comes from Sander, "Layout of Compound Directed
+ * Graphs."
+ */function run(g){var root=util.addDummyNode(g,"root",{},"_root"),depths=treeDepths(g),height=_.max(depths)-1,nodeSep=2*height+1;g.graph().nestingRoot=root;
+// Multiply minlen by nodeSep to align nodes on non-border ranks.
+_.each(g.edges(),function(e){g.edge(e).minlen*=nodeSep});
+// Calculate a weight that is sufficient to keep subgraphs vertically compact
+var weight=sumWeights(g)+1;
+// Create border nodes and link them up
+_.each(g.children(),function(child){dfs(g,root,nodeSep,weight,height,depths,child)});
+// Save the multiplier for node layers for later removal of empty border
+// layers.
+g.graph().nodeRankFactor=nodeSep}function dfs(g,root,nodeSep,weight,height,depths,v){var children=g.children(v);if(!children.length){if(v!==root){g.setEdge(root,v,{weight:0,minlen:nodeSep})}return}var top=util.addBorderNode(g,"_bt"),bottom=util.addBorderNode(g,"_bb"),label=g.node(v);g.setParent(top,v);label.borderTop=top;g.setParent(bottom,v);label.borderBottom=bottom;_.each(children,function(child){dfs(g,root,nodeSep,weight,height,depths,child);var childNode=g.node(child),childTop=childNode.borderTop?childNode.borderTop:child,childBottom=childNode.borderBottom?childNode.borderBottom:child,thisWeight=childNode.borderTop?weight:2*weight,minlen=childTop!==childBottom?1:height-depths[v]+1;g.setEdge(top,childTop,{weight:thisWeight,minlen:minlen,nestingEdge:true});g.setEdge(childBottom,bottom,{weight:thisWeight,minlen:minlen,nestingEdge:true})});if(!g.parent(v)){g.setEdge(root,top,{weight:0,minlen:height+depths[v]})}}function treeDepths(g){var depths={};function dfs(v,depth){var children=g.children(v);if(children&&children.length){_.each(children,function(child){dfs(child,depth+1)})}depths[v]=depth}_.each(g.children(),function(v){dfs(v,1)});return depths}function sumWeights(g){return _.reduce(g.edges(),function(acc,e){return acc+g.edge(e).weight},0)}function cleanup(g){var graphLabel=g.graph();g.removeNode(graphLabel.nestingRoot);delete graphLabel.nestingRoot;_.each(g.edges(),function(e){var edge=g.edge(e);if(edge.nestingEdge){g.removeEdge(e)}})}},{"./lodash":38,"./util":57}],40:[function(require,module,exports){"use strict";var _=require("./lodash"),util=require("./util");module.exports={run:run,undo:undo};
+/*
+ * Breaks any long edges in the graph into short segments that span 1 layer
+ * each. This operation is undoable with the denormalize function.
+ *
+ * Pre-conditions:
+ *
+ * 1. The input graph is a DAG.
+ * 2. Each node in the graph has a "rank" property.
+ *
+ * Post-condition:
+ *
+ * 1. All edges in the graph have a length of 1.
+ * 2. Dummy nodes are added where edges have been split into segments.
+ * 3. The graph is augmented with a "dummyChains" attribute which contains
+ * the first dummy in each chain of dummy nodes produced.
+ */function run(g){g.graph().dummyChains=[];_.each(g.edges(),function(edge){normalizeEdge(g,edge)})}function normalizeEdge(g,e){var v=e.v,vRank=g.node(v).rank,w=e.w,wRank=g.node(w).rank,name=e.name,edgeLabel=g.edge(e),labelRank=edgeLabel.labelRank;if(wRank===vRank+1)return;g.removeEdge(e);var dummy,attrs,i;for(i=0,++vRank;vRank<wRank;++i,++vRank){edgeLabel.points=[];attrs={width:0,height:0,edgeLabel:edgeLabel,edgeObj:e,rank:vRank};dummy=util.addDummyNode(g,"edge",attrs,"_d");if(vRank===labelRank){attrs.width=edgeLabel.width;attrs.height=edgeLabel.height;attrs.dummy="edge-label";attrs.labelpos=edgeLabel.labelpos}g.setEdge(v,dummy,{weight:edgeLabel.weight},name);if(i===0){g.graph().dummyChains.push(dummy)}v=dummy}g.setEdge(v,w,{weight:edgeLabel.weight},name)}function undo(g){_.each(g.graph().dummyChains,function(v){var node=g.node(v),origLabel=node.edgeLabel,w;g.setEdge(node.edgeObj,origLabel);while(node.dummy){w=g.successors(v)[0];g.removeNode(v);origLabel.points.push({x:node.x,y:node.y});if(node.dummy==="edge-label"){origLabel.x=node.x;origLabel.y=node.y;origLabel.width=node.width;origLabel.height=node.height}v=w;node=g.node(v)}})}},{"./lodash":38,"./util":57}],41:[function(require,module,exports){var _=require("../lodash");module.exports=addSubgraphConstraints;function addSubgraphConstraints(g,cg,vs){var prev={},rootPrev;_.each(vs,function(v){var child=g.parent(v),parent,prevChild;while(child){parent=g.parent(child);if(parent){prevChild=prev[parent];prev[parent]=child}else{prevChild=rootPrev;rootPrev=child}if(prevChild&&prevChild!==child){cg.setEdge(prevChild,child);return}child=parent}});
+/*
+ function dfs(v) {
+ var children = v ? g.children(v) : g.children();
+ if (children.length) {
+ var min = Number.POSITIVE_INFINITY,
+ subgraphs = [];
+ _.each(children, function(child) {
+ var childMin = dfs(child);
+ if (g.children(child).length) {
+ subgraphs.push({ v: child, order: childMin });
+ }
+ min = Math.min(min, childMin);
+ });
+ _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) {
+ cg.setEdge(prev.v, curr.v);
+ return curr;
+ });
+ return min;
+ }
+ return g.node(v).order;
+ }
+ dfs(undefined);
+ */}},{"../lodash":38}],42:[function(require,module,exports){var _=require("../lodash");module.exports=barycenter;function barycenter(g,movable){return _.map(movable,function(v){var inV=g.inEdges(v);if(!inV.length){return{v:v}}else{var result=_.reduce(inV,function(acc,e){var edge=g.edge(e),nodeU=g.node(e.v);return{sum:acc.sum+edge.weight*nodeU.order,weight:acc.weight+edge.weight}},{sum:0,weight:0});return{v:v,barycenter:result.sum/result.weight,weight:result.weight}}})}},{"../lodash":38}],43:[function(require,module,exports){var _=require("../lodash"),Graph=require("../graphlib").Graph;module.exports=buildLayerGraph;
+/*
+ * Constructs a graph that can be used to sort a layer of nodes. The graph will
+ * contain all base and subgraph nodes from the request layer in their original
+ * hierarchy and any edges that are incident on these nodes and are of the type
+ * requested by the "relationship" parameter.
+ *
+ * Nodes from the requested rank that do not have parents are assigned a root
+ * node in the output graph, which is set in the root graph attribute. This
+ * makes it easy to walk the hierarchy of movable nodes during ordering.
+ *
+ * Pre-conditions:
+ *
+ * 1. Input graph is a DAG
+ * 2. Base nodes in the input graph have a rank attribute
+ * 3. Subgraph nodes in the input graph has minRank and maxRank attributes
+ * 4. Edges have an assigned weight
+ *
+ * Post-conditions:
+ *
+ * 1. Output graph has all nodes in the movable rank with preserved
+ * hierarchy.
+ * 2. Root nodes in the movable layer are made children of the node
+ * indicated by the root attribute of the graph.
+ * 3. Non-movable nodes incident on movable nodes, selected by the
+ * relationship parameter, are included in the graph (without hierarchy).
+ * 4. Edges incident on movable nodes, selected by the relationship
+ * parameter, are added to the output graph.
+ * 5. The weights for copied edges are aggregated as need, since the output
+ * graph is not a multi-graph.
+ */function buildLayerGraph(g,rank,relationship){var root=createRootNode(g),result=new Graph({compound:true}).setGraph({root:root}).setDefaultNodeLabel(function(v){return g.node(v)});_.each(g.nodes(),function(v){var node=g.node(v),parent=g.parent(v);if(node.rank===rank||node.minRank<=rank&&rank<=node.maxRank){result.setNode(v);result.setParent(v,parent||root);
+// This assumes we have only short edges!
+_.each(g[relationship](v),function(e){var u=e.v===v?e.w:e.v,edge=result.edge(u,v),weight=!_.isUndefined(edge)?edge.weight:0;result.setEdge(u,v,{weight:g.edge(e).weight+weight})});if(_.has(node,"minRank")){result.setNode(v,{borderLeft:node.borderLeft[rank],borderRight:node.borderRight[rank]})}}});return result}function createRootNode(g){var v;while(g.hasNode(v=_.uniqueId("_root")));return v}},{"../graphlib":35,"../lodash":38}],44:[function(require,module,exports){"use strict";var _=require("../lodash");module.exports=crossCount;
+/*
+ * A function that takes a layering (an array of layers, each with an array of
+ * ordererd nodes) and a graph and returns a weighted crossing count.
+ *
+ * Pre-conditions:
+ *
+ * 1. Input graph must be simple (not a multigraph), directed, and include
+ * only simple edges.
+ * 2. Edges in the input graph must have assigned weights.
+ *
+ * Post-conditions:
+ *
+ * 1. The graph and layering matrix are left unchanged.
+ *
+ * This algorithm is derived from Barth, et al., "Bilayer Cross Counting."
+ */function crossCount(g,layering){var cc=0;for(var i=1;i<layering.length;++i){cc+=twoLayerCrossCount(g,layering[i-1],layering[i])}return cc}function twoLayerCrossCount(g,northLayer,southLayer){
+// Sort all of the edges between the north and south layers by their position
+// in the north layer and then the south. Map these edges to the position of
+// their head in the south layer.
+var southPos=_.zipObject(southLayer,_.map(southLayer,function(v,i){return i}));var southEntries=_.flatten(_.map(northLayer,function(v){return _.chain(g.outEdges(v)).map(function(e){return{pos:southPos[e.w],weight:g.edge(e).weight}}).sortBy("pos").value()}),true);
+// Build the accumulator tree
+var firstIndex=1;while(firstIndex<southLayer.length)firstIndex<<=1;var treeSize=2*firstIndex-1;firstIndex-=1;var tree=_.map(new Array(treeSize),function(){return 0});
+// Calculate the weighted crossings
+var cc=0;_.each(southEntries.forEach(function(entry){var index=entry.pos+firstIndex;tree[index]+=entry.weight;var weightSum=0;while(index>0){if(index%2){weightSum+=tree[index+1]}index=index-1>>1;tree[index]+=entry.weight}cc+=entry.weight*weightSum}));return cc}},{"../lodash":38}],45:[function(require,module,exports){"use strict";var _=require("../lodash"),initOrder=require("./init-order"),crossCount=require("./cross-count"),sortSubgraph=require("./sort-subgraph"),buildLayerGraph=require("./build-layer-graph"),addSubgraphConstraints=require("./add-subgraph-constraints"),Graph=require("../graphlib").Graph,util=require("../util");module.exports=order;
+/*
+ * Applies heuristics to minimize edge crossings in the graph and sets the best
+ * order solution as an order attribute on each node.
+ *
+ * Pre-conditions:
+ *
+ * 1. Graph must be DAG
+ * 2. Graph nodes must be objects with a "rank" attribute
+ * 3. Graph edges must have the "weight" attribute
+ *
+ * Post-conditions:
+ *
+ * 1. Graph nodes will have an "order" attribute based on the results of the
+ * algorithm.
+ */function order(g){var maxRank=util.maxRank(g),downLayerGraphs=buildLayerGraphs(g,_.range(1,maxRank+1),"inEdges"),upLayerGraphs=buildLayerGraphs(g,_.range(maxRank-1,-1,-1),"outEdges");var layering=initOrder(g);assignOrder(g,layering);var bestCC=Number.POSITIVE_INFINITY,best;for(var i=0,lastBest=0;lastBest<4;++i,++lastBest){sweepLayerGraphs(i%2?downLayerGraphs:upLayerGraphs,i%4>=2);layering=util.buildLayerMatrix(g);var cc=crossCount(g,layering);if(cc<bestCC){lastBest=0;best=_.cloneDeep(layering);bestCC=cc}}assignOrder(g,best)}function buildLayerGraphs(g,ranks,relationship){return _.map(ranks,function(rank){return buildLayerGraph(g,rank,relationship)})}function sweepLayerGraphs(layerGraphs,biasRight){var cg=new Graph;_.each(layerGraphs,function(lg){var root=lg.graph().root;var sorted=sortSubgraph(lg,root,cg,biasRight);_.each(sorted.vs,function(v,i){lg.node(v).order=i});addSubgraphConstraints(lg,cg,sorted.vs)})}function assignOrder(g,layering){_.each(layering,function(layer){_.each(layer,function(v,i){g.node(v).order=i})})}},{"../graphlib":35,"../lodash":38,"../util":57,"./add-subgraph-constraints":41,"./build-layer-graph":43,"./cross-count":44,"./init-order":46,"./sort-subgraph":48}],46:[function(require,module,exports){"use strict";var _=require("../lodash");module.exports=initOrder;
+/*
+ * Assigns an initial order value for each node by performing a DFS search
+ * starting from nodes in the first rank. Nodes are assigned an order in their
+ * rank as they are first visited.
+ *
+ * This approach comes from Gansner, et al., "A Technique for Drawing Directed
+ * Graphs."
+ *
+ * Returns a layering matrix with an array per layer and each layer sorted by
+ * the order of its nodes.
+ */function initOrder(g){var visited={},simpleNodes=_.filter(g.nodes(),function(v){return!g.children(v).length}),maxRank=_.max(_.map(simpleNodes,function(v){return g.node(v).rank})),layers=_.map(_.range(maxRank+1),function(){return[]});function dfs(v){if(_.has(visited,v))return;visited[v]=true;var node=g.node(v);layers[node.rank].push(v);_.each(g.successors(v),dfs)}var orderedVs=_.sortBy(simpleNodes,function(v){return g.node(v).rank});_.each(orderedVs,dfs);return layers}},{"../lodash":38}],47:[function(require,module,exports){"use strict";var _=require("../lodash");module.exports=resolveConflicts;
+/*
+ * Given a list of entries of the form {v, barycenter, weight} and a
+ * constraint graph this function will resolve any conflicts between the
+ * constraint graph and the barycenters for the entries. If the barycenters for
+ * an entry would violate a constraint in the constraint graph then we coalesce
+ * the nodes in the conflict into a new node that respects the contraint and
+ * aggregates barycenter and weight information.
+ *
+ * This implementation is based on the description in Forster, "A Fast and
+ * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it
+ * differs in some specific details.
+ *
+ * Pre-conditions:
+ *
+ * 1. Each entry has the form {v, barycenter, weight}, or if the node has
+ * no barycenter, then {v}.
+ *
+ * Returns:
+ *
+ * A new list of entries of the form {vs, i, barycenter, weight}. The list
+ * `vs` may either be a singleton or it may be an aggregation of nodes
+ * ordered such that they do not violate constraints from the constraint
+ * graph. The property `i` is the lowest original index of any of the
+ * elements in `vs`.
+ */function resolveConflicts(entries,cg){var mappedEntries={};_.each(entries,function(entry,i){var tmp=mappedEntries[entry.v]={indegree:0,in:[],out:[],vs:[entry.v],i:i};if(!_.isUndefined(entry.barycenter)){tmp.barycenter=entry.barycenter;tmp.weight=entry.weight}});_.each(cg.edges(),function(e){var entryV=mappedEntries[e.v],entryW=mappedEntries[e.w];if(!_.isUndefined(entryV)&&!_.isUndefined(entryW)){entryW.indegree++;entryV.out.push(mappedEntries[e.w])}});var sourceSet=_.filter(mappedEntries,function(entry){return!entry.indegree});return doResolveConflicts(sourceSet)}function doResolveConflicts(sourceSet){var entries=[];function handleIn(vEntry){return function(uEntry){if(uEntry.merged){return}if(_.isUndefined(uEntry.barycenter)||_.isUndefined(vEntry.barycenter)||uEntry.barycenter>=vEntry.barycenter){mergeEntries(vEntry,uEntry)}}}function handleOut(vEntry){return function(wEntry){wEntry["in"].push(vEntry);if(--wEntry.indegree===0){sourceSet.push(wEntry)}}}while(sourceSet.length){var entry=sourceSet.pop();entries.push(entry);_.each(entry["in"].reverse(),handleIn(entry));_.each(entry.out,handleOut(entry))}return _.chain(entries).filter(function(entry){return!entry.merged}).map(function(entry){return _.pick(entry,["vs","i","barycenter","weight"])}).value()}function mergeEntries(target,source){var sum=0,weight=0;if(target.weight){sum+=target.barycenter*target.weight;weight+=target.weight}if(source.weight){sum+=source.barycenter*source.weight;weight+=source.weight}target.vs=source.vs.concat(target.vs);target.barycenter=sum/weight;target.weight=weight;target.i=Math.min(source.i,target.i);source.merged=true}},{"../lodash":38}],48:[function(require,module,exports){var _=require("../lodash"),barycenter=require("./barycenter"),resolveConflicts=require("./resolve-conflicts"),sort=require("./sort");module.exports=sortSubgraph;function sortSubgraph(g,v,cg,biasRight){var movable=g.children(v),node=g.node(v),bl=node?node.borderLeft:undefined,br=node?node.borderRight:undefined,subgraphs={};if(bl){movable=_.filter(movable,function(w){return w!==bl&&w!==br})}var barycenters=barycenter(g,movable);_.each(barycenters,function(entry){if(g.children(entry.v).length){var subgraphResult=sortSubgraph(g,entry.v,cg,biasRight);subgraphs[entry.v]=subgraphResult;if(_.has(subgraphResult,"barycenter")){mergeBarycenters(entry,subgraphResult)}}});var entries=resolveConflicts(barycenters,cg);expandSubgraphs(entries,subgraphs);var result=sort(entries,biasRight);if(bl){result.vs=_.flatten([bl,result.vs,br],true);if(g.predecessors(bl).length){var blPred=g.node(g.predecessors(bl)[0]),brPred=g.node(g.predecessors(br)[0]);if(!_.has(result,"barycenter")){result.barycenter=0;result.weight=0}result.barycenter=(result.barycenter*result.weight+blPred.order+brPred.order)/(result.weight+2);result.weight+=2}}return result}function expandSubgraphs(entries,subgraphs){_.each(entries,function(entry){entry.vs=_.flatten(entry.vs.map(function(v){if(subgraphs[v]){return subgraphs[v].vs}return v}),true)})}function mergeBarycenters(target,other){if(!_.isUndefined(target.barycenter)){target.barycenter=(target.barycenter*target.weight+other.barycenter*other.weight)/(target.weight+other.weight);target.weight+=other.weight}else{target.barycenter=other.barycenter;target.weight=other.weight}}},{"../lodash":38,"./barycenter":42,"./resolve-conflicts":47,"./sort":49}],49:[function(require,module,exports){var _=require("../lodash"),util=require("../util");module.exports=sort;function sort(entries,biasRight){var parts=util.partition(entries,function(entry){return _.has(entry,"barycenter")});var sortable=parts.lhs,unsortable=_.sortBy(parts.rhs,function(entry){return-entry.i}),vs=[],sum=0,weight=0,vsIndex=0;sortable.sort(compareWithBias(!!biasRight));vsIndex=consumeUnsortable(vs,unsortable,vsIndex);_.each(sortable,function(entry){vsIndex+=entry.vs.length;vs.push(entry.vs);sum+=entry.barycenter*entry.weight;weight+=entry.weight;vsIndex=consumeUnsortable(vs,unsortable,vsIndex)});var result={vs:_.flatten(vs,true)};if(weight){result.barycenter=sum/weight;result.weight=weight}return result}function consumeUnsortable(vs,unsortable,index){var last;while(unsortable.length&&(last=_.last(unsortable)).i<=index){unsortable.pop();vs.push(last.vs);index++}return index}function compareWithBias(bias){return function(entryV,entryW){if(entryV.barycenter<entryW.barycenter){return-1}else if(entryV.barycenter>entryW.barycenter){return 1}return!bias?entryV.i-entryW.i:entryW.i-entryV.i}}},{"../lodash":38,"../util":57}],50:[function(require,module,exports){var _=require("./lodash");module.exports=parentDummyChains;function parentDummyChains(g){var postorderNums=postorder(g);_.each(g.graph().dummyChains,function(v){var node=g.node(v),edgeObj=node.edgeObj,pathData=findPath(g,postorderNums,edgeObj.v,edgeObj.w),path=pathData.path,lca=pathData.lca,pathIdx=0,pathV=path[pathIdx],ascending=true;while(v!==edgeObj.w){node=g.node(v);if(ascending){while((pathV=path[pathIdx])!==lca&&g.node(pathV).maxRank<node.rank){pathIdx++}if(pathV===lca){ascending=false}}if(!ascending){while(pathIdx<path.length-1&&g.node(pathV=path[pathIdx+1]).minRank<=node.rank){pathIdx++}pathV=path[pathIdx]}g.setParent(v,pathV);v=g.successors(v)[0]}})}
+// Find a path from v to w through the lowest common ancestor (LCA). Return the
+// full path and the LCA.
+function findPath(g,postorderNums,v,w){var vPath=[],wPath=[],low=Math.min(postorderNums[v].low,postorderNums[w].low),lim=Math.max(postorderNums[v].lim,postorderNums[w].lim),parent,lca;
+// Traverse up from v to find the LCA
+parent=v;do{parent=g.parent(parent);vPath.push(parent)}while(parent&&(postorderNums[parent].low>low||lim>postorderNums[parent].lim));lca=parent;
+// Traverse from w to LCA
+parent=w;while((parent=g.parent(parent))!==lca){wPath.push(parent)}return{path:vPath.concat(wPath.reverse()),lca:lca}}function postorder(g){var result={},lim=0;function dfs(v){var low=lim;_.each(g.children(v),dfs);result[v]={low:low,lim:lim++}}_.each(g.children(),dfs);return result}},{"./lodash":38}],51:[function(require,module,exports){"use strict";var _=require("../lodash"),Graph=require("../graphlib").Graph,util=require("../util");
+/*
+ * This module provides coordinate assignment based on Brandes and Köpf, "Fast
+ * and Simple Horizontal Coordinate Assignment."
+ */module.exports={positionX:positionX,findType1Conflicts:findType1Conflicts,findType2Conflicts:findType2Conflicts,addConflict:addConflict,hasConflict:hasConflict,verticalAlignment:verticalAlignment,horizontalCompaction:horizontalCompaction,alignCoordinates:alignCoordinates,findSmallestWidthAlignment:findSmallestWidthAlignment,balance:balance};
+/*
+ * Marks all edges in the graph with a type-1 conflict with the "type1Conflict"
+ * property. A type-1 conflict is one where a non-inner segment crosses an
+ * inner segment. An inner segment is an edge with both incident nodes marked
+ * with the "dummy" property.
+ *
+ * This algorithm scans layer by layer, starting with the second, for type-1
+ * conflicts between the current layer and the previous layer. For each layer
+ * it scans the nodes from left to right until it reaches one that is incident
+ * on an inner segment. It then scans predecessors to determine if they have
+ * edges that cross that inner segment. At the end a final scan is done for all
+ * nodes on the current rank to see if they cross the last visited inner
+ * segment.
+ *
+ * This algorithm (safely) assumes that a dummy node will only be incident on a
+ * single node in the layers being scanned.
+ */function findType1Conflicts(g,layering){var conflicts={};function visitLayer(prevLayer,layer){var
+// last visited node in the previous layer that is incident on an inner
+// segment.
+k0=0,
+// Tracks the last node in this layer scanned for crossings with a type-1
+// segment.
+scanPos=0,prevLayerLength=prevLayer.length,lastNode=_.last(layer);_.each(layer,function(v,i){var w=findOtherInnerSegmentNode(g,v),k1=w?g.node(w).order:prevLayerLength;if(w||v===lastNode){_.each(layer.slice(scanPos,i+1),function(scanNode){_.each(g.predecessors(scanNode),function(u){var uLabel=g.node(u),uPos=uLabel.order;if((uPos<k0||k1<uPos)&&!(uLabel.dummy&&g.node(scanNode).dummy)){addConflict(conflicts,u,scanNode)}})});scanPos=i+1;k0=k1}});return layer}_.reduce(layering,visitLayer);return conflicts}function findType2Conflicts(g,layering){var conflicts={};function scan(south,southPos,southEnd,prevNorthBorder,nextNorthBorder){var v;_.each(_.range(southPos,southEnd),function(i){v=south[i];if(g.node(v).dummy){_.each(g.predecessors(v),function(u){var uNode=g.node(u);if(uNode.dummy&&(uNode.order<prevNorthBorder||uNode.order>nextNorthBorder)){addConflict(conflicts,u,v)}})}})}function visitLayer(north,south){var prevNorthPos=-1,nextNorthPos,southPos=0;_.each(south,function(v,southLookahead){if(g.node(v).dummy==="border"){var predecessors=g.predecessors(v);if(predecessors.length){nextNorthPos=g.node(predecessors[0]).order;scan(south,southPos,southLookahead,prevNorthPos,nextNorthPos);southPos=southLookahead;prevNorthPos=nextNorthPos}}scan(south,southPos,south.length,nextNorthPos,north.length)});return south}_.reduce(layering,visitLayer);return conflicts}function findOtherInnerSegmentNode(g,v){if(g.node(v).dummy){return _.find(g.predecessors(v),function(u){return g.node(u).dummy})}}function addConflict(conflicts,v,w){if(v>w){var tmp=v;v=w;w=tmp}var conflictsV=conflicts[v];if(!conflictsV){conflicts[v]=conflictsV={}}conflictsV[w]=true}function hasConflict(conflicts,v,w){if(v>w){var tmp=v;v=w;w=tmp}return _.has(conflicts[v],w)}
+/*
+ * Try to align nodes into vertical "blocks" where possible. This algorithm
+ * attempts to align a node with one of its median neighbors. If the edge
+ * connecting a neighbor is a type-1 conflict then we ignore that possibility.
+ * If a previous node has already formed a block with a node after the node
+ * we're trying to form a block with, we also ignore that possibility - our
+ * blocks would be split in that scenario.
+ */function verticalAlignment(g,layering,conflicts,neighborFn){var root={},align={},pos={};
+// We cache the position here based on the layering because the graph and
+// layering may be out of sync. The layering matrix is manipulated to
+// generate different extreme alignments.
+_.each(layering,function(layer){_.each(layer,function(v,order){root[v]=v;align[v]=v;pos[v]=order})});_.each(layering,function(layer){var prevIdx=-1;_.each(layer,function(v){var ws=neighborFn(v);if(ws.length){ws=_.sortBy(ws,function(w){return pos[w]});var mp=(ws.length-1)/2;for(var i=Math.floor(mp),il=Math.ceil(mp);i<=il;++i){var w=ws[i];if(align[v]===v&&prevIdx<pos[w]&&!hasConflict(conflicts,v,w)){align[w]=v;align[v]=root[v]=root[w];prevIdx=pos[w]}}}})});return{root:root,align:align}}function horizontalCompaction(g,layering,root,align,reverseSep){
+// This portion of the algorithm differs from BK due to a number of problems.
+// Instead of their algorithm we construct a new block graph and do two
+// sweeps. The first sweep places blocks with the smallest possible
+// coordinates. The second sweep removes unused space by moving blocks to the
+// greatest coordinates without violating separation.
+var xs={},blockG=buildBlockGraph(g,layering,root,reverseSep);
+// First pass, assign smallest coordinates via DFS
+var visited={};function pass1(v){if(!_.has(visited,v)){visited[v]=true;xs[v]=_.reduce(blockG.inEdges(v),function(max,e){pass1(e.v);return Math.max(max,xs[e.v]+blockG.edge(e))},0)}}_.each(blockG.nodes(),pass1);var borderType=reverseSep?"borderLeft":"borderRight";function pass2(v){if(visited[v]!==2){visited[v]++;var node=g.node(v);var min=_.reduce(blockG.outEdges(v),function(min,e){pass2(e.w);return Math.min(min,xs[e.w]-blockG.edge(e))},Number.POSITIVE_INFINITY);if(min!==Number.POSITIVE_INFINITY&&node.borderType!==borderType){xs[v]=Math.max(xs[v],min)}}}_.each(blockG.nodes(),pass2);
+// Assign x coordinates to all nodes
+_.each(align,function(v){xs[v]=xs[root[v]]});return xs}function buildBlockGraph(g,layering,root,reverseSep){var blockGraph=new Graph,graphLabel=g.graph(),sepFn=sep(graphLabel.nodesep,graphLabel.edgesep,reverseSep);_.each(layering,function(layer){var u;_.each(layer,function(v){var vRoot=root[v];blockGraph.setNode(vRoot);if(u){var uRoot=root[u],prevMax=blockGraph.edge(uRoot,vRoot);blockGraph.setEdge(uRoot,vRoot,Math.max(sepFn(g,v,u),prevMax||0))}u=v})});return blockGraph}
+/*
+ * Returns the alignment that has the smallest width of the given alignments.
+ */function findSmallestWidthAlignment(g,xss){return _.min(xss,function(xs){var min=_.min(xs,function(x,v){return x-width(g,v)/2}),max=_.max(xs,function(x,v){return x+width(g,v)/2});return max-min})}
+/*
+ * Align the coordinates of each of the layout alignments such that
+ * left-biased alignments have their minimum coordinate at the same point as
+ * the minimum coordinate of the smallest width alignment and right-biased
+ * alignments have their maximum coordinate at the same point as the maximum
+ * coordinate of the smallest width alignment.
+ */function alignCoordinates(xss,alignTo){var alignToMin=_.min(alignTo),alignToMax=_.max(alignTo);_.each(["u","d"],function(vert){_.each(["l","r"],function(horiz){var alignment=vert+horiz,xs=xss[alignment],delta;if(xs===alignTo)return;delta=horiz==="l"?alignToMin-_.min(xs):alignToMax-_.max(xs);if(delta){xss[alignment]=_.mapValues(xs,function(x){return x+delta})}})})}function balance(xss,align){return _.mapValues(xss.ul,function(ignore,v){if(align){return xss[align.toLowerCase()][v]}else{var xs=_.sortBy(_.pluck(xss,v));return(xs[1]+xs[2])/2}})}function positionX(g){var layering=util.buildLayerMatrix(g),conflicts=_.merge(findType1Conflicts(g,layering),findType2Conflicts(g,layering));var xss={},adjustedLayering;_.each(["u","d"],function(vert){adjustedLayering=vert==="u"?layering:_.values(layering).reverse();_.each(["l","r"],function(horiz){if(horiz==="r"){adjustedLayering=_.map(adjustedLayering,function(inner){return _.values(inner).reverse()})}var neighborFn=_.bind(vert==="u"?g.predecessors:g.successors,g);var align=verticalAlignment(g,adjustedLayering,conflicts,neighborFn);var xs=horizontalCompaction(g,adjustedLayering,align.root,align.align,horiz==="r");if(horiz==="r"){xs=_.mapValues(xs,function(x){return-x})}xss[vert+horiz]=xs})});var smallestWidth=findSmallestWidthAlignment(g,xss);alignCoordinates(xss,smallestWidth);return balance(xss,g.graph().align)}function sep(nodeSep,edgeSep,reverseSep){return function(g,v,w){var vLabel=g.node(v),wLabel=g.node(w),sum=0,delta;sum+=vLabel.width/2;if(_.has(vLabel,"labelpos")){switch(vLabel.labelpos.toLowerCase()){case"l":delta=-vLabel.width/2;break;case"r":delta=vLabel.width/2;break}}if(delta){sum+=reverseSep?delta:-delta}delta=0;sum+=(vLabel.dummy?edgeSep:nodeSep)/2;sum+=(wLabel.dummy?edgeSep:nodeSep)/2;sum+=wLabel.width/2;if(_.has(wLabel,"labelpos")){switch(wLabel.labelpos.toLowerCase()){case"l":delta=wLabel.width/2;break;case"r":delta=-wLabel.width/2;break}}if(delta){sum+=reverseSep?delta:-delta}delta=0;return sum}}function width(g,v){return g.node(v).width}},{"../graphlib":35,"../lodash":38,"../util":57}],52:[function(require,module,exports){"use strict";var _=require("../lodash"),util=require("../util"),positionX=require("./bk").positionX;module.exports=position;function position(g){g=util.asNonCompoundGraph(g);positionY(g);_.each(positionX(g),function(x,v){g.node(v).x=x})}function positionY(g){var layering=util.buildLayerMatrix(g),rankSep=g.graph().ranksep,prevY=0;_.each(layering,function(layer){var maxHeight=_.max(_.map(layer,function(v){return g.node(v).height}));_.each(layer,function(v){g.node(v).y=prevY+maxHeight/2});prevY+=maxHeight+rankSep})}},{"../lodash":38,"../util":57,"./bk":51}],53:[function(require,module,exports){"use strict";var _=require("../lodash"),Graph=require("../graphlib").Graph,slack=require("./util").slack;module.exports=feasibleTree;
+/*
+ * Constructs a spanning tree with tight edges and adjusted the input node's
+ * ranks to achieve this. A tight edge is one that is has a length that matches
+ * its "minlen" attribute.
+ *
+ * The basic structure for this function is derived from Gansner, et al., "A
+ * Technique for Drawing Directed Graphs."
+ *
+ * Pre-conditions:
+ *
+ * 1. Graph must be a DAG.
+ * 2. Graph must be connected.
+ * 3. Graph must have at least one node.
+ * 5. Graph nodes must have been previously assigned a "rank" property that
+ * respects the "minlen" property of incident edges.
+ * 6. Graph edges must have a "minlen" property.
+ *
+ * Post-conditions:
+ *
+ * - Graph nodes will have their rank adjusted to ensure that all edges are
+ * tight.
+ *
+ * Returns a tree (undirected graph) that is constructed using only "tight"
+ * edges.
+ */function feasibleTree(g){var t=new Graph({directed:false});
+// Choose arbitrary node from which to start our tree
+var start=g.nodes()[0],size=g.nodeCount();t.setNode(start,{});var edge,delta;while(tightTree(t,g)<size){edge=findMinSlackEdge(t,g);delta=t.hasNode(edge.v)?slack(g,edge):-slack(g,edge);shiftRanks(t,g,delta)}return t}
+/*
+ * Finds a maximal tree of tight edges and returns the number of nodes in the
+ * tree.
+ */function tightTree(t,g){function dfs(v){_.each(g.nodeEdges(v),function(e){var edgeV=e.v,w=v===edgeV?e.w:edgeV;if(!t.hasNode(w)&&!slack(g,e)){t.setNode(w,{});t.setEdge(v,w,{});dfs(w)}})}_.each(t.nodes(),dfs);return t.nodeCount()}
+/*
+ * Finds the edge with the smallest slack that is incident on tree and returns
+ * it.
+ */function findMinSlackEdge(t,g){return _.min(g.edges(),function(e){if(t.hasNode(e.v)!==t.hasNode(e.w)){return slack(g,e)}})}function shiftRanks(t,g,delta){_.each(t.nodes(),function(v){g.node(v).rank+=delta})}},{"../graphlib":35,"../lodash":38,"./util":56}],54:[function(require,module,exports){"use strict";var rankUtil=require("./util"),longestPath=rankUtil.longestPath,feasibleTree=require("./feasible-tree"),networkSimplex=require("./network-simplex");module.exports=rank;
+/*
+ * Assigns a rank to each node in the input graph that respects the "minlen"
+ * constraint specified on edges between nodes.
+ *
+ * This basic structure is derived from Gansner, et al., "A Technique for
+ * Drawing Directed Graphs."
+ *
+ * Pre-conditions:
+ *
+ * 1. Graph must be a connected DAG
+ * 2. Graph nodes must be objects
+ * 3. Graph edges must have "weight" and "minlen" attributes
+ *
+ * Post-conditions:
+ *
+ * 1. Graph nodes will have a "rank" attribute based on the results of the
+ * algorithm. Ranks can start at any index (including negative), we'll
+ * fix them up later.
+ */function rank(g){switch(g.graph().ranker){case"network-simplex":networkSimplexRanker(g);break;case"tight-tree":tightTreeRanker(g);break;case"longest-path":longestPathRanker(g);break;default:networkSimplexRanker(g)}}
+// A fast and simple ranker, but results are far from optimal.
+var longestPathRanker=longestPath;function tightTreeRanker(g){longestPath(g);feasibleTree(g)}function networkSimplexRanker(g){networkSimplex(g)}},{"./feasible-tree":53,"./network-simplex":55,"./util":56}],55:[function(require,module,exports){"use strict";var _=require("../lodash"),feasibleTree=require("./feasible-tree"),slack=require("./util").slack,initRank=require("./util").longestPath,preorder=require("../graphlib").alg.preorder,postorder=require("../graphlib").alg.postorder,simplify=require("../util").simplify;module.exports=networkSimplex;
+// Expose some internals for testing purposes
+networkSimplex.initLowLimValues=initLowLimValues;networkSimplex.initCutValues=initCutValues;networkSimplex.calcCutValue=calcCutValue;networkSimplex.leaveEdge=leaveEdge;networkSimplex.enterEdge=enterEdge;networkSimplex.exchangeEdges=exchangeEdges;
+/*
+ * The network simplex algorithm assigns ranks to each node in the input graph
+ * and iteratively improves the ranking to reduce the length of edges.
+ *
+ * Preconditions:
+ *
+ * 1. The input graph must be a DAG.
+ * 2. All nodes in the graph must have an object value.
+ * 3. All edges in the graph must have "minlen" and "weight" attributes.
+ *
+ * Postconditions:
+ *
+ * 1. All nodes in the graph will have an assigned "rank" attribute that has
+ * been optimized by the network simplex algorithm. Ranks start at 0.
+ *
+ *
+ * A rough sketch of the algorithm is as follows:
+ *
+ * 1. Assign initial ranks to each node. We use the longest path algorithm,
+ * which assigns ranks to the lowest position possible. In general this
+ * leads to very wide bottom ranks and unnecessarily long edges.
+ * 2. Construct a feasible tight tree. A tight tree is one such that all
+ * edges in the tree have no slack (difference between length of edge
+ * and minlen for the edge). This by itself greatly improves the assigned
+ * rankings by shorting edges.
+ * 3. Iteratively find edges that have negative cut values. Generally a
+ * negative cut value indicates that the edge could be removed and a new
+ * tree edge could be added to produce a more compact graph.
+ *
+ * Much of the algorithms here are derived from Gansner, et al., "A Technique
+ * for Drawing Directed Graphs." The structure of the file roughly follows the
+ * structure of the overall algorithm.
+ */function networkSimplex(g){g=simplify(g);initRank(g);var t=feasibleTree(g);initLowLimValues(t);initCutValues(t,g);var e,f;while(e=leaveEdge(t)){f=enterEdge(t,g,e);exchangeEdges(t,g,e,f)}}
+/*
+ * Initializes cut values for all edges in the tree.
+ */function initCutValues(t,g){var vs=postorder(t,t.nodes());vs=vs.slice(0,vs.length-1);_.each(vs,function(v){assignCutValue(t,g,v)})}function assignCutValue(t,g,child){var childLab=t.node(child),parent=childLab.parent;t.edge(child,parent).cutvalue=calcCutValue(t,g,child)}
+/*
+ * Given the tight tree, its graph, and a child in the graph calculate and
+ * return the cut value for the edge between the child and its parent.
+ */function calcCutValue(t,g,child){var childLab=t.node(child),parent=childLab.parent,
+// True if the child is on the tail end of the edge in the directed graph
+childIsTail=true,
+// The graph's view of the tree edge we're inspecting
+graphEdge=g.edge(child,parent),
+// The accumulated cut value for the edge between this node and its parent
+cutValue=0;if(!graphEdge){childIsTail=false;graphEdge=g.edge(parent,child)}cutValue=graphEdge.weight;_.each(g.nodeEdges(child),function(e){var isOutEdge=e.v===child,other=isOutEdge?e.w:e.v;if(other!==parent){var pointsToHead=isOutEdge===childIsTail,otherWeight=g.edge(e).weight;cutValue+=pointsToHead?otherWeight:-otherWeight;if(isTreeEdge(t,child,other)){var otherCutValue=t.edge(child,other).cutvalue;cutValue+=pointsToHead?-otherCutValue:otherCutValue}}});return cutValue}function initLowLimValues(tree,root){if(arguments.length<2){root=tree.nodes()[0]}dfsAssignLowLim(tree,{},1,root)}function dfsAssignLowLim(tree,visited,nextLim,v,parent){var low=nextLim,label=tree.node(v);visited[v]=true;_.each(tree.neighbors(v),function(w){if(!_.has(visited,w)){nextLim=dfsAssignLowLim(tree,visited,nextLim,w,v)}});label.low=low;label.lim=nextLim++;if(parent){label.parent=parent}else{
+// TODO should be able to remove this when we incrementally update low lim
+delete label.parent}return nextLim}function leaveEdge(tree){return _.find(tree.edges(),function(e){return tree.edge(e).cutvalue<0})}function enterEdge(t,g,edge){var v=edge.v,w=edge.w;
+// For the rest of this function we assume that v is the tail and w is the
+// head, so if we don't have this edge in the graph we should flip it to
+// match the correct orientation.
+if(!g.hasEdge(v,w)){v=edge.w;w=edge.v}var vLabel=t.node(v),wLabel=t.node(w),tailLabel=vLabel,flip=false;
+// If the root is in the tail of the edge then we need to flip the logic that
+// checks for the head and tail nodes in the candidates function below.
+if(vLabel.lim>wLabel.lim){tailLabel=wLabel;flip=true}var candidates=_.filter(g.edges(),function(edge){return flip===isDescendant(t,t.node(edge.v),tailLabel)&&flip!==isDescendant(t,t.node(edge.w),tailLabel)});return _.min(candidates,function(edge){return slack(g,edge)})}function exchangeEdges(t,g,e,f){var v=e.v,w=e.w;t.removeEdge(v,w);t.setEdge(f.v,f.w,{});initLowLimValues(t);initCutValues(t,g);updateRanks(t,g)}function updateRanks(t,g){var root=_.find(t.nodes(),function(v){return!g.node(v).parent}),vs=preorder(t,root);vs=vs.slice(1);_.each(vs,function(v){var parent=t.node(v).parent,edge=g.edge(v,parent),flipped=false;if(!edge){edge=g.edge(parent,v);flipped=true}g.node(v).rank=g.node(parent).rank+(flipped?edge.minlen:-edge.minlen)})}
+/*
+ * Returns true if the edge is in the tree.
+ */function isTreeEdge(tree,u,v){return tree.hasEdge(u,v)}
+/*
+ * Returns true if the specified node is descendant of the root node per the
+ * assigned low and lim attributes in the tree.
+ */function isDescendant(tree,vLabel,rootLabel){return rootLabel.low<=vLabel.lim&&vLabel.lim<=rootLabel.lim}},{"../graphlib":35,"../lodash":38,"../util":57,"./feasible-tree":53,"./util":56}],56:[function(require,module,exports){"use strict";var _=require("../lodash");module.exports={longestPath:longestPath,slack:slack};
+/*
+ * Initializes ranks for the input graph using the longest path algorithm. This
+ * algorithm scales well and is fast in practice, it yields rather poor
+ * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom
+ * ranks wide and leaving edges longer than necessary. However, due to its
+ * speed, this algorithm is good for getting an initial ranking that can be fed
+ * into other algorithms.
+ *
+ * This algorithm does not normalize layers because it will be used by other
+ * algorithms in most cases. If using this algorithm directly, be sure to
+ * run normalize at the end.
+ *
+ * Pre-conditions:
+ *
+ * 1. Input graph is a DAG.
+ * 2. Input graph node labels can be assigned properties.
+ *
+ * Post-conditions:
+ *
+ * 1. Each node will be assign an (unnormalized) "rank" property.
+ */function longestPath(g){var visited={};function dfs(v){var label=g.node(v);if(_.has(visited,v)){return label.rank}visited[v]=true;var rank=_.min(_.map(g.outEdges(v),function(e){return dfs(e.w)-g.edge(e).minlen}));if(rank===Number.POSITIVE_INFINITY){rank=0}return label.rank=rank}_.each(g.sources(),dfs)}
+/*
+ * Returns the amount of slack for the given edge. The slack is defined as the
+ * difference between the length of the edge and its minimum length.
+ */function slack(g,e){return g.node(e.w).rank-g.node(e.v).rank-g.edge(e).minlen}},{"../lodash":38}],57:[function(require,module,exports){"use strict";var _=require("./lodash"),Graph=require("./graphlib").Graph;module.exports={addDummyNode:addDummyNode,simplify:simplify,asNonCompoundGraph:asNonCompoundGraph,successorWeights:successorWeights,predecessorWeights:predecessorWeights,intersectRect:intersectRect,buildLayerMatrix:buildLayerMatrix,normalizeRanks:normalizeRanks,removeEmptyRanks:removeEmptyRanks,addBorderNode:addBorderNode,maxRank:maxRank,partition:partition,time:time,notime:notime};
+/*
+ * Adds a dummy node to the graph and return v.
+ */function addDummyNode(g,type,attrs,name){var v;do{v=_.uniqueId(name)}while(g.hasNode(v));attrs.dummy=type;g.setNode(v,attrs);return v}
+/*
+ * Returns a new graph with only simple edges. Handles aggregation of data
+ * associated with multi-edges.
+ */function simplify(g){var simplified=(new Graph).setGraph(g.graph());_.each(g.nodes(),function(v){simplified.setNode(v,g.node(v))});_.each(g.edges(),function(e){var simpleLabel=simplified.edge(e.v,e.w)||{weight:0,minlen:1},label=g.edge(e);simplified.setEdge(e.v,e.w,{weight:simpleLabel.weight+label.weight,minlen:Math.max(simpleLabel.minlen,label.minlen)})});return simplified}function asNonCompoundGraph(g){var simplified=new Graph({multigraph:g.isMultigraph()}).setGraph(g.graph());_.each(g.nodes(),function(v){if(!g.children(v).length){simplified.setNode(v,g.node(v))}});_.each(g.edges(),function(e){simplified.setEdge(e,g.edge(e))});return simplified}function successorWeights(g){var weightMap=_.map(g.nodes(),function(v){var sucs={};_.each(g.outEdges(v),function(e){sucs[e.w]=(sucs[e.w]||0)+g.edge(e).weight});return sucs});return _.zipObject(g.nodes(),weightMap)}function predecessorWeights(g){var weightMap=_.map(g.nodes(),function(v){var preds={};_.each(g.inEdges(v),function(e){preds[e.v]=(preds[e.v]||0)+g.edge(e).weight});return preds});return _.zipObject(g.nodes(),weightMap)}
+/*
+ * Finds where a line starting at point ({x, y}) would intersect a rectangle
+ * ({x, y, width, height}) if it were pointing at the rectangle's center.
+ */function intersectRect(rect,point){var x=rect.x;var y=rect.y;
+// Rectangle intersection algorithm from:
+// http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes
+var dx=point.x-x;var dy=point.y-y;var w=rect.width/2;var h=rect.height/2;if(!dx&&!dy){throw new Error("Not possible to find intersection inside of the rectangle")}var sx,sy;if(Math.abs(dy)*w>Math.abs(dx)*h){
+// Intersection is top or bottom of rect.
+if(dy<0){h=-h}sx=h*dx/dy;sy=h}else{
+// Intersection is left or right of rect.
+if(dx<0){w=-w}sx=w;sy=w*dy/dx}return{x:x+sx,y:y+sy}}
+/*
+ * Given a DAG with each node assigned "rank" and "order" properties, this
+ * function will produce a matrix with the ids of each node.
+ */function buildLayerMatrix(g){var layering=_.map(_.range(maxRank(g)+1),function(){return[]});_.each(g.nodes(),function(v){var node=g.node(v),rank=node.rank;if(!_.isUndefined(rank)){layering[rank][node.order]=v}});return layering}
+/*
+ * Adjusts the ranks for all nodes in the graph such that all nodes v have
+ * rank(v) >= 0 and at least one node w has rank(w) = 0.
+ */function normalizeRanks(g){var min=_.min(_.map(g.nodes(),function(v){return g.node(v).rank}));_.each(g.nodes(),function(v){var node=g.node(v);if(_.has(node,"rank")){node.rank-=min}})}function removeEmptyRanks(g){
+// Ranks may not start at 0, so we need to offset them
+var offset=_.min(_.map(g.nodes(),function(v){return g.node(v).rank}));var layers=[];_.each(g.nodes(),function(v){var rank=g.node(v).rank-offset;if(!layers[rank]){layers[rank]=[]}layers[rank].push(v)});var delta=0,nodeRankFactor=g.graph().nodeRankFactor;_.each(layers,function(vs,i){if(_.isUndefined(vs)&&i%nodeRankFactor!==0){--delta}else if(delta){_.each(vs,function(v){g.node(v).rank+=delta})}})}function addBorderNode(g,prefix,rank,order){var node={width:0,height:0};if(arguments.length>=4){node.rank=rank;node.order=order}return addDummyNode(g,"border",node,prefix)}function maxRank(g){return _.max(_.map(g.nodes(),function(v){var rank=g.node(v).rank;if(!_.isUndefined(rank)){return rank}}))}
+/*
+ * Partition a collection into two groups: `lhs` and `rhs`. If the supplied
+ * function returns true for an entry it goes into `lhs`. Otherwise it goes
+ * into `rhs.
+ */function partition(collection,fn){var result={lhs:[],rhs:[]};_.each(collection,function(value){if(fn(value)){result.lhs.push(value)}else{result.rhs.push(value)}});return result}
+/*
+ * Returns a new function that wraps `fn` with a timer. The wrapper logs the
+ * time it takes to execute the function.
+ */function time(name,fn){var start=_.now();try{return fn()}finally{console.log(name+" time: "+(_.now()-start)+"ms")}}function notime(name,fn){return fn()}},{"./graphlib":35,"./lodash":38}],58:[function(require,module,exports){module.exports="0.7.4"},{}],59:[function(require,module,exports){
+/**
+ * Copyright (c) 2014, Chris Pettitt
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+var lib=require("./lib");module.exports={Graph:lib.Graph,json:require("./lib/json"),alg:require("./lib/alg"),version:lib.version}},{"./lib":75,"./lib/alg":66,"./lib/json":76}],60:[function(require,module,exports){var _=require("../lodash");module.exports=components;function components(g){var visited={},cmpts=[],cmpt;function dfs(v){if(_.has(visited,v))return;visited[v]=true;cmpt.push(v);_.each(g.successors(v),dfs);_.each(g.predecessors(v),dfs)}_.each(g.nodes(),function(v){cmpt=[];dfs(v);if(cmpt.length){cmpts.push(cmpt)}});return cmpts}},{"../lodash":77}],61:[function(require,module,exports){var _=require("../lodash");module.exports=dfs;
+/*
+ * A helper that preforms a pre- or post-order traversal on the input graph
+ * and returns the nodes in the order they were visited. This algorithm treats
+ * the input as undirected.
+ *
+ * Order must be one of "pre" or "post".
+ */function dfs(g,vs,order){if(!_.isArray(vs)){vs=[vs]}var acc=[],visited={};_.each(vs,function(v){if(!g.hasNode(v)){throw new Error("Graph does not have node: "+v)}doDfs(g,v,order==="post",visited,acc)});return acc}function doDfs(g,v,postorder,visited,acc){if(!_.has(visited,v)){visited[v]=true;if(!postorder){acc.push(v)}_.each(g.neighbors(v),function(w){doDfs(g,w,postorder,visited,acc)});if(postorder){acc.push(v)}}}},{"../lodash":77}],62:[function(require,module,exports){var dijkstra=require("./dijkstra"),_=require("../lodash");module.exports=dijkstraAll;function dijkstraAll(g,weightFunc,edgeFunc){return _.transform(g.nodes(),function(acc,v){acc[v]=dijkstra(g,v,weightFunc,edgeFunc)},{})}},{"../lodash":77,"./dijkstra":63}],63:[function(require,module,exports){var _=require("../lodash"),PriorityQueue=require("../data/priority-queue");module.exports=dijkstra;var DEFAULT_WEIGHT_FUNC=_.constant(1);function dijkstra(g,source,weightFn,edgeFn){return runDijkstra(g,String(source),weightFn||DEFAULT_WEIGHT_FUNC,edgeFn||function(v){return g.outEdges(v)})}function runDijkstra(g,source,weightFn,edgeFn){var results={},pq=new PriorityQueue,v,vEntry;var updateNeighbors=function(edge){var w=edge.v!==v?edge.v:edge.w,wEntry=results[w],weight=weightFn(edge),distance=vEntry.distance+weight;if(weight<0){throw new Error("dijkstra does not allow negative edge weights. "+"Bad edge: "+edge+" Weight: "+weight)}if(distance<wEntry.distance){wEntry.distance=distance;wEntry.predecessor=v;pq.decrease(w,distance)}};g.nodes().forEach(function(v){var distance=v===source?0:Number.POSITIVE_INFINITY;results[v]={distance:distance};pq.add(v,distance)});while(pq.size()>0){v=pq.removeMin();vEntry=results[v];if(vEntry.distance===Number.POSITIVE_INFINITY){break}edgeFn(v).forEach(updateNeighbors)}return results}},{"../data/priority-queue":73,"../lodash":77}],64:[function(require,module,exports){var _=require("../lodash"),tarjan=require("./tarjan");module.exports=findCycles;function findCycles(g){return _.filter(tarjan(g),function(cmpt){return cmpt.length>1||cmpt.length===1&&g.hasEdge(cmpt[0],cmpt[0])})}},{"../lodash":77,"./tarjan":71}],65:[function(require,module,exports){var _=require("../lodash");module.exports=floydWarshall;var DEFAULT_WEIGHT_FUNC=_.constant(1);function floydWarshall(g,weightFn,edgeFn){return runFloydWarshall(g,weightFn||DEFAULT_WEIGHT_FUNC,edgeFn||function(v){return g.outEdges(v)})}function runFloydWarshall(g,weightFn,edgeFn){var results={},nodes=g.nodes();nodes.forEach(function(v){results[v]={};results[v][v]={distance:0};nodes.forEach(function(w){if(v!==w){results[v][w]={distance:Number.POSITIVE_INFINITY}}});edgeFn(v).forEach(function(edge){var w=edge.v===v?edge.w:edge.v,d=weightFn(edge);results[v][w]={distance:d,predecessor:v}})});nodes.forEach(function(k){var rowK=results[k];nodes.forEach(function(i){var rowI=results[i];nodes.forEach(function(j){var ik=rowI[k];var kj=rowK[j];var ij=rowI[j];var altDistance=ik.distance+kj.distance;if(altDistance<ij.distance){ij.distance=altDistance;ij.predecessor=kj.predecessor}})})});return results}},{"../lodash":77}],66:[function(require,module,exports){module.exports={components:require("./components"),dijkstra:require("./dijkstra"),dijkstraAll:require("./dijkstra-all"),findCycles:require("./find-cycles"),floydWarshall:require("./floyd-warshall"),isAcyclic:require("./is-acyclic"),postorder:require("./postorder"),preorder:require("./preorder"),prim:require("./prim"),tarjan:require("./tarjan"),topsort:require("./topsort")}},{"./components":60,"./dijkstra":63,"./dijkstra-all":62,"./find-cycles":64,"./floyd-warshall":65,"./is-acyclic":67,"./postorder":68,"./preorder":69,"./prim":70,"./tarjan":71,"./topsort":72}],67:[function(require,module,exports){var topsort=require("./topsort");module.exports=isAcyclic;function isAcyclic(g){try{topsort(g)}catch(e){if(e instanceof topsort.CycleException){return false}throw e}return true}},{"./topsort":72}],68:[function(require,module,exports){var dfs=require("./dfs");module.exports=postorder;function postorder(g,vs){return dfs(g,vs,"post")}},{"./dfs":61}],69:[function(require,module,exports){var dfs=require("./dfs");module.exports=preorder;function preorder(g,vs){return dfs(g,vs,"pre")}},{"./dfs":61}],70:[function(require,module,exports){var _=require("../lodash"),Graph=require("../graph"),PriorityQueue=require("../data/priority-queue");module.exports=prim;function prim(g,weightFunc){var result=new Graph,parents={},pq=new PriorityQueue,v;function updateNeighbors(edge){var w=edge.v===v?edge.w:edge.v,pri=pq.priority(w);if(pri!==undefined){var edgeWeight=weightFunc(edge);if(edgeWeight<pri){parents[w]=v;pq.decrease(w,edgeWeight)}}}if(g.nodeCount()===0){return result}_.each(g.nodes(),function(v){pq.add(v,Number.POSITIVE_INFINITY);result.setNode(v)});
+// Start from an arbitrary node
+pq.decrease(g.nodes()[0],0);var init=false;while(pq.size()>0){v=pq.removeMin();if(_.has(parents,v)){result.setEdge(v,parents[v])}else if(init){throw new Error("Input graph is not connected: "+g)}else{init=true}g.nodeEdges(v).forEach(updateNeighbors)}return result}},{"../data/priority-queue":73,"../graph":74,"../lodash":77}],71:[function(require,module,exports){var _=require("../lodash");module.exports=tarjan;function tarjan(g){var index=0,stack=[],visited={},// node id -> { onStack, lowlink, index }
+results=[];function dfs(v){var entry=visited[v]={onStack:true,lowlink:index,index:index++};stack.push(v);g.successors(v).forEach(function(w){if(!_.has(visited,w)){dfs(w);entry.lowlink=Math.min(entry.lowlink,visited[w].lowlink)}else if(visited[w].onStack){entry.lowlink=Math.min(entry.lowlink,visited[w].index)}});if(entry.lowlink===entry.index){var cmpt=[],w;do{w=stack.pop();visited[w].onStack=false;cmpt.push(w)}while(v!==w);results.push(cmpt)}}g.nodes().forEach(function(v){if(!_.has(visited,v)){dfs(v)}});return results}},{"../lodash":77}],72:[function(require,module,exports){var _=require("../lodash");module.exports=topsort;topsort.CycleException=CycleException;function topsort(g){var visited={},stack={},results=[];function visit(node){if(_.has(stack,node)){throw new CycleException}if(!_.has(visited,node)){stack[node]=true;visited[node]=true;_.each(g.predecessors(node),visit);delete stack[node];results.push(node)}}_.each(g.sinks(),visit);if(_.size(visited)!==g.nodeCount()){throw new CycleException}return results}function CycleException(){}},{"../lodash":77}],73:[function(require,module,exports){var _=require("../lodash");module.exports=PriorityQueue;
+/**
+ * A min-priority queue data structure. This algorithm is derived from Cormen,
+ * et al., "Introduction to Algorithms". The basic idea of a min-priority
+ * queue is that you can efficiently (in O(1) time) get the smallest key in
+ * the queue. Adding and removing elements takes O(log n) time. A key can
+ * have its priority decreased in O(log n) time.
+ */function PriorityQueue(){this._arr=[];this._keyIndices={}}
+/**
+ * Returns the number of elements in the queue. Takes `O(1)` time.
+ */PriorityQueue.prototype.size=function(){return this._arr.length};
+/**
+ * Returns the keys that are in the queue. Takes `O(n)` time.
+ */PriorityQueue.prototype.keys=function(){return this._arr.map(function(x){return x.key})};
+/**
+ * Returns `true` if **key** is in the queue and `false` if not.
+ */PriorityQueue.prototype.has=function(key){return _.has(this._keyIndices,key)};
+/**
+ * Returns the priority for **key**. If **key** is not present in the queue
+ * then this function returns `undefined`. Takes `O(1)` time.
+ *
+ * @param {Object} key
+ */PriorityQueue.prototype.priority=function(key){var index=this._keyIndices[key];if(index!==undefined){return this._arr[index].priority}};
+/**
+ * Returns the key for the minimum element in this queue. If the queue is
+ * empty this function throws an Error. Takes `O(1)` time.
+ */PriorityQueue.prototype.min=function(){if(this.size()===0){throw new Error("Queue underflow")}return this._arr[0].key};
+/**
+ * Inserts a new key into the priority queue. If the key already exists in
+ * the queue this function returns `false`; otherwise it will return `true`.
+ * Takes `O(n)` time.
+ *
+ * @param {Object} key the key to add
+ * @param {Number} priority the initial priority for the key
+ */PriorityQueue.prototype.add=function(key,priority){var keyIndices=this._keyIndices;key=String(key);if(!_.has(keyIndices,key)){var arr=this._arr;var index=arr.length;keyIndices[key]=index;arr.push({key:key,priority:priority});this._decrease(index);return true}return false};
+/**
+ * Removes and returns the smallest key in the queue. Takes `O(log n)` time.
+ */PriorityQueue.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var min=this._arr.pop();delete this._keyIndices[min.key];this._heapify(0);return min.key};
+/**
+ * Decreases the priority for **key** to **priority**. If the new priority is
+ * greater than the previous priority, this function will throw an Error.
+ *
+ * @param {Object} key the key for which to raise priority
+ * @param {Number} priority the new priority for the key
+ */PriorityQueue.prototype.decrease=function(key,priority){var index=this._keyIndices[key];if(priority>this._arr[index].priority){throw new Error("New priority is greater than current priority. "+"Key: "+key+" Old: "+this._arr[index].priority+" New: "+priority)}this._arr[index].priority=priority;this._decrease(index)};PriorityQueue.prototype._heapify=function(i){var arr=this._arr;var l=2*i,r=l+1,largest=i;if(l<arr.length){largest=arr[l].priority<arr[largest].priority?l:largest;if(r<arr.length){largest=arr[r].priority<arr[largest].priority?r:largest}if(largest!==i){this._swap(i,largest);this._heapify(largest)}}};PriorityQueue.prototype._decrease=function(index){var arr=this._arr;var priority=arr[index].priority;var parent;while(index!==0){parent=index>>1;if(arr[parent].priority<priority){break}this._swap(index,parent);index=parent}};PriorityQueue.prototype._swap=function(i,j){var arr=this._arr;var keyIndices=this._keyIndices;var origArrI=arr[i];var origArrJ=arr[j];arr[i]=origArrJ;arr[j]=origArrI;keyIndices[origArrJ.key]=i;keyIndices[origArrI.key]=j}},{"../lodash":77}],74:[function(require,module,exports){"use strict";var _=require("./lodash");module.exports=Graph;var DEFAULT_EDGE_NAME="\0",GRAPH_NODE="\0",EDGE_KEY_DELIM="";
+// Implementation notes:
+//
+// * Node id query functions should return string ids for the nodes
+// * Edge id query functions should return an "edgeObj", edge object, that is
+// composed of enough information to uniquely identify an edge: {v, w, name}.
+// * Internally we use an "edgeId", a stringified form of the edgeObj, to
+// reference edges. This is because we need a performant way to look these
+// edges up and, object properties, which have string keys, are the closest
+// we're going to get to a performant hashtable in JavaScript.
+function Graph(opts){this._isDirected=_.has(opts,"directed")?opts.directed:true;this._isMultigraph=_.has(opts,"multigraph")?opts.multigraph:false;this._isCompound=_.has(opts,"compound")?opts.compound:false;
+// Label for the graph itself
+this._label=undefined;
+// Defaults to be set when creating a new node
+this._defaultNodeLabelFn=_.constant(undefined);
+// Defaults to be set when creating a new edge
+this._defaultEdgeLabelFn=_.constant(undefined);
+// v -> label
+this._nodes={};if(this._isCompound){
+// v -> parent
+this._parent={};
+// v -> children
+this._children={};this._children[GRAPH_NODE]={}}
+// v -> edgeObj
+this._in={};
+// u -> v -> Number
+this._preds={};
+// v -> edgeObj
+this._out={};
+// v -> w -> Number
+this._sucs={};
+// e -> edgeObj
+this._edgeObjs={};
+// e -> label
+this._edgeLabels={}}
+/* Number of nodes in the graph. Should only be changed by the implementation. */Graph.prototype._nodeCount=0;
+/* Number of edges in the graph. Should only be changed by the implementation. */Graph.prototype._edgeCount=0;
+/* === Graph functions ========= */Graph.prototype.isDirected=function(){return this._isDirected};Graph.prototype.isMultigraph=function(){return this._isMultigraph};Graph.prototype.isCompound=function(){return this._isCompound};Graph.prototype.setGraph=function(label){this._label=label;return this};Graph.prototype.graph=function(){return this._label};
+/* === Node functions ========== */Graph.prototype.setDefaultNodeLabel=function(newDefault){if(!_.isFunction(newDefault)){newDefault=_.constant(newDefault)}this._defaultNodeLabelFn=newDefault;return this};Graph.prototype.nodeCount=function(){return this._nodeCount};Graph.prototype.nodes=function(){return _.keys(this._nodes)};Graph.prototype.sources=function(){return _.filter(this.nodes(),function(v){return _.isEmpty(this._in[v])},this)};Graph.prototype.sinks=function(){return _.filter(this.nodes(),function(v){return _.isEmpty(this._out[v])},this)};Graph.prototype.setNodes=function(vs,value){var args=arguments;_.each(vs,function(v){if(args.length>1){this.setNode(v,value)}else{this.setNode(v)}},this);return this};Graph.prototype.setNode=function(v,value){if(_.has(this._nodes,v)){if(arguments.length>1){this._nodes[v]=value}return this}this._nodes[v]=arguments.length>1?value:this._defaultNodeLabelFn(v);if(this._isCompound){this._parent[v]=GRAPH_NODE;this._children[v]={};this._children[GRAPH_NODE][v]=true}this._in[v]={};this._preds[v]={};this._out[v]={};this._sucs[v]={};++this._nodeCount;return this};Graph.prototype.node=function(v){return this._nodes[v]};Graph.prototype.hasNode=function(v){return _.has(this._nodes,v)};Graph.prototype.removeNode=function(v){var self=this;if(_.has(this._nodes,v)){var removeEdge=function(e){self.removeEdge(self._edgeObjs[e])};delete this._nodes[v];if(this._isCompound){this._removeFromParentsChildList(v);delete this._parent[v];_.each(this.children(v),function(child){this.setParent(child)},this);delete this._children[v]}_.each(_.keys(this._in[v]),removeEdge);delete this._in[v];delete this._preds[v];_.each(_.keys(this._out[v]),removeEdge);delete this._out[v];delete this._sucs[v];--this._nodeCount}return this};Graph.prototype.setParent=function(v,parent){if(!this._isCompound){throw new Error("Cannot set parent in a non-compound graph")}if(_.isUndefined(parent)){parent=GRAPH_NODE}else{
+// Coerce parent to string
+parent+="";for(var ancestor=parent;!_.isUndefined(ancestor);ancestor=this.parent(ancestor)){if(ancestor===v){throw new Error("Setting "+parent+" as parent of "+v+" would create create a cycle")}}this.setNode(parent)}this.setNode(v);this._removeFromParentsChildList(v);this._parent[v]=parent;this._children[parent][v]=true;return this};Graph.prototype._removeFromParentsChildList=function(v){delete this._children[this._parent[v]][v]};Graph.prototype.parent=function(v){if(this._isCompound){var parent=this._parent[v];if(parent!==GRAPH_NODE){return parent}}};Graph.prototype.children=function(v){if(_.isUndefined(v)){v=GRAPH_NODE}if(this._isCompound){var children=this._children[v];if(children){return _.keys(children)}}else if(v===GRAPH_NODE){return this.nodes()}else if(this.hasNode(v)){return[]}};Graph.prototype.predecessors=function(v){var predsV=this._preds[v];if(predsV){return _.keys(predsV)}};Graph.prototype.successors=function(v){var sucsV=this._sucs[v];if(sucsV){return _.keys(sucsV)}};Graph.prototype.neighbors=function(v){var preds=this.predecessors(v);if(preds){return _.union(preds,this.successors(v))}};Graph.prototype.filterNodes=function(filter){var copy=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});copy.setGraph(this.graph());_.each(this._nodes,function(value,v){if(filter(v)){copy.setNode(v,value)}},this);_.each(this._edgeObjs,function(e){if(copy.hasNode(e.v)&&copy.hasNode(e.w)){copy.setEdge(e,this.edge(e))}},this);var self=this;var parents={};function findParent(v){var parent=self.parent(v);if(parent===undefined||copy.hasNode(parent)){parents[v]=parent;return parent}else if(parent in parents){return parents[parent]}else{return findParent(parent)}}if(this._isCompound){_.each(copy.nodes(),function(v){copy.setParent(v,findParent(v))})}return copy};
+/* === Edge functions ========== */Graph.prototype.setDefaultEdgeLabel=function(newDefault){if(!_.isFunction(newDefault)){newDefault=_.constant(newDefault)}this._defaultEdgeLabelFn=newDefault;return this};Graph.prototype.edgeCount=function(){return this._edgeCount};Graph.prototype.edges=function(){return _.values(this._edgeObjs)};Graph.prototype.setPath=function(vs,value){var self=this,args=arguments;_.reduce(vs,function(v,w){if(args.length>1){self.setEdge(v,w,value)}else{self.setEdge(v,w)}return w});return this};
+/*
+ * setEdge(v, w, [value, [name]])
+ * setEdge({ v, w, [name] }, [value])
+ */Graph.prototype.setEdge=function(){var v,w,name,value,valueSpecified=false,arg0=arguments[0];if(typeof arg0==="object"&&arg0!==null&&"v"in arg0){v=arg0.v;w=arg0.w;name=arg0.name;if(arguments.length===2){value=arguments[1];valueSpecified=true}}else{v=arg0;w=arguments[1];name=arguments[3];if(arguments.length>2){value=arguments[2];valueSpecified=true}}v=""+v;w=""+w;if(!_.isUndefined(name)){name=""+name}var e=edgeArgsToId(this._isDirected,v,w,name);if(_.has(this._edgeLabels,e)){if(valueSpecified){this._edgeLabels[e]=value}return this}if(!_.isUndefined(name)&&!this._isMultigraph){throw new Error("Cannot set a named edge when isMultigraph = false")}
+// It didn't exist, so we need to create it.
+// First ensure the nodes exist.
+this.setNode(v);this.setNode(w);this._edgeLabels[e]=valueSpecified?value:this._defaultEdgeLabelFn(v,w,name);var edgeObj=edgeArgsToObj(this._isDirected,v,w,name);
+// Ensure we add undirected edges in a consistent way.
+v=edgeObj.v;w=edgeObj.w;Object.freeze(edgeObj);this._edgeObjs[e]=edgeObj;incrementOrInitEntry(this._preds[w],v);incrementOrInitEntry(this._sucs[v],w);this._in[w][e]=edgeObj;this._out[v][e]=edgeObj;this._edgeCount++;return this};Graph.prototype.edge=function(v,w,name){var e=arguments.length===1?edgeObjToId(this._isDirected,arguments[0]):edgeArgsToId(this._isDirected,v,w,name);return this._edgeLabels[e]};Graph.prototype.hasEdge=function(v,w,name){var e=arguments.length===1?edgeObjToId(this._isDirected,arguments[0]):edgeArgsToId(this._isDirected,v,w,name);return _.has(this._edgeLabels,e)};Graph.prototype.removeEdge=function(v,w,name){var e=arguments.length===1?edgeObjToId(this._isDirected,arguments[0]):edgeArgsToId(this._isDirected,v,w,name),edge=this._edgeObjs[e];if(edge){v=edge.v;w=edge.w;delete this._edgeLabels[e];delete this._edgeObjs[e];decrementOrRemoveEntry(this._preds[w],v);decrementOrRemoveEntry(this._sucs[v],w);delete this._in[w][e];delete this._out[v][e];this._edgeCount--}return this};Graph.prototype.inEdges=function(v,u){var inV=this._in[v];if(inV){var edges=_.values(inV);if(!u){return edges}return _.filter(edges,function(edge){return edge.v===u})}};Graph.prototype.outEdges=function(v,w){var outV=this._out[v];if(outV){var edges=_.values(outV);if(!w){return edges}return _.filter(edges,function(edge){return edge.w===w})}};Graph.prototype.nodeEdges=function(v,w){var inEdges=this.inEdges(v,w);if(inEdges){return inEdges.concat(this.outEdges(v,w))}};function incrementOrInitEntry(map,k){if(map[k]){map[k]++}else{map[k]=1}}function decrementOrRemoveEntry(map,k){if(!--map[k]){delete map[k]}}function edgeArgsToId(isDirected,v_,w_,name){var v=""+v_;var w=""+w_;if(!isDirected&&v>w){var tmp=v;v=w;w=tmp}return v+EDGE_KEY_DELIM+w+EDGE_KEY_DELIM+(_.isUndefined(name)?DEFAULT_EDGE_NAME:name)}function edgeArgsToObj(isDirected,v_,w_,name){var v=""+v_;var w=""+w_;if(!isDirected&&v>w){var tmp=v;v=w;w=tmp}var edgeObj={v:v,w:w};if(name){edgeObj.name=name}return edgeObj}function edgeObjToId(isDirected,edgeObj){return edgeArgsToId(isDirected,edgeObj.v,edgeObj.w,edgeObj.name)}},{"./lodash":77}],75:[function(require,module,exports){
+// Includes only the "core" of graphlib
+module.exports={Graph:require("./graph"),version:require("./version")}},{"./graph":74,"./version":78}],76:[function(require,module,exports){var _=require("./lodash"),Graph=require("./graph");module.exports={write:write,read:read};function write(g){var json={options:{directed:g.isDirected(),multigraph:g.isMultigraph(),compound:g.isCompound()},nodes:writeNodes(g),edges:writeEdges(g)};if(!_.isUndefined(g.graph())){json.value=_.clone(g.graph())}return json}function writeNodes(g){return _.map(g.nodes(),function(v){var nodeValue=g.node(v),parent=g.parent(v),node={v:v};if(!_.isUndefined(nodeValue)){node.value=nodeValue}if(!_.isUndefined(parent)){node.parent=parent}return node})}function writeEdges(g){return _.map(g.edges(),function(e){var edgeValue=g.edge(e),edge={v:e.v,w:e.w};if(!_.isUndefined(e.name)){edge.name=e.name}if(!_.isUndefined(edgeValue)){edge.value=edgeValue}return edge})}function read(json){var g=new Graph(json.options).setGraph(json.value);_.each(json.nodes,function(entry){g.setNode(entry.v,entry.value);if(entry.parent){g.setParent(entry.v,entry.parent)}});_.each(json.edges,function(entry){g.setEdge({v:entry.v,w:entry.w,name:entry.name},entry.value)});return g}},{"./graph":74,"./lodash":77}],77:[function(require,module,exports){arguments[4][38][0].apply(exports,arguments)},{dup:38,lodash:79}],78:[function(require,module,exports){module.exports="1.0.7"},{}],79:[function(require,module,exports){(function(global){(function(){
+/** Used as a safe reference for `undefined` in pre-ES5 environments. */
+var undefined;
+/** Used as the semantic version number. */var VERSION="3.10.1";
+/** Used to compose bitmasks for wrapper metadata. */var BIND_FLAG=1,BIND_KEY_FLAG=2,CURRY_BOUND_FLAG=4,CURRY_FLAG=8,CURRY_RIGHT_FLAG=16,PARTIAL_FLAG=32,PARTIAL_RIGHT_FLAG=64,ARY_FLAG=128,REARG_FLAG=256;
+/** Used as default options for `_.trunc`. */var DEFAULT_TRUNC_LENGTH=30,DEFAULT_TRUNC_OMISSION="...";
+/** Used to detect when a function becomes hot. */var HOT_COUNT=150,HOT_SPAN=16;
+/** Used as the size to enable large array optimizations. */var LARGE_ARRAY_SIZE=200;
+/** Used to indicate the type of lazy iteratees. */var LAZY_FILTER_FLAG=1,LAZY_MAP_FLAG=2;
+/** Used as the `TypeError` message for "Functions" methods. */var FUNC_ERROR_TEXT="Expected a function";
+/** Used as the internal argument placeholder. */var PLACEHOLDER="__lodash_placeholder__";
+/** `Object#toString` result references. */var argsTag="[object Arguments]",arrayTag="[object Array]",boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",funcTag="[object Function]",mapTag="[object Map]",numberTag="[object Number]",objectTag="[object Object]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",weakMapTag="[object WeakMap]";var arrayBufferTag="[object ArrayBuffer]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]";
+/** Used to match empty string literals in compiled template source. */var reEmptyStringLeading=/\b__p \+= '';/g,reEmptyStringMiddle=/\b(__p \+=) '' \+/g,reEmptyStringTrailing=/(__e\(.*?\)|\b__t\)) \+\n'';/g;
+/** Used to match HTML entities and HTML characters. */var reEscapedHtml=/&(?:amp|lt|gt|quot|#39|#96);/g,reUnescapedHtml=/[&<>"'`]/g,reHasEscapedHtml=RegExp(reEscapedHtml.source),reHasUnescapedHtml=RegExp(reUnescapedHtml.source);
+/** Used to match template delimiters. */var reEscape=/<%-([\s\S]+?)%>/g,reEvaluate=/<%([\s\S]+?)%>/g,reInterpolate=/<%=([\s\S]+?)%>/g;
+/** Used to match property names within property paths. */var reIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,reIsPlainProp=/^\w*$/,rePropName=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g;
+/**
+ * Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns)
+ * and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern).
+ */var reRegExpChars=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,reHasRegExpChars=RegExp(reRegExpChars.source);
+/** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */var reComboMark=/[\u0300-\u036f\ufe20-\ufe23]/g;
+/** Used to match backslashes in property paths. */var reEscapeChar=/\\(\\)?/g;
+/** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */var reEsTemplate=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+/** Used to match `RegExp` flags from their coerced string values. */var reFlags=/\w*$/;
+/** Used to detect hexadecimal string values. */var reHasHexPrefix=/^0[xX]/;
+/** Used to detect host constructors (Safari > 5). */var reIsHostCtor=/^\[object .+?Constructor\]$/;
+/** Used to detect unsigned integer values. */var reIsUint=/^\d+$/;
+/** Used to match latin-1 supplementary letters (excluding mathematical operators). */var reLatin1=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g;
+/** Used to ensure capturing order of template delimiters. */var reNoMatch=/($^)/;
+/** Used to match unescaped characters in compiled string literals. */var reUnescapedString=/['\n\r\u2028\u2029\\]/g;
+/** Used to match words to create compound words. */var reWords=function(){var upper="[A-Z\\xc0-\\xd6\\xd8-\\xde]",lower="[a-z\\xdf-\\xf6\\xf8-\\xff]+";return RegExp(upper+"+(?="+upper+lower+")|"+upper+"?"+lower+"|"+upper+"+|[0-9]+","g")}();
+/** Used to assign default `context` object properties. */var contextProps=["Array","ArrayBuffer","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Math","Number","Object","RegExp","Set","String","_","clearTimeout","isFinite","parseFloat","parseInt","setTimeout","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap"];
+/** Used to make template sourceURLs easier to identify. */var templateCounter=-1;
+/** Used to identify `toStringTag` values of typed arrays. */var typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=true;typedArrayTags[argsTag]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag]=typedArrayTags[boolTag]=typedArrayTags[dateTag]=typedArrayTags[errorTag]=typedArrayTags[funcTag]=typedArrayTags[mapTag]=typedArrayTags[numberTag]=typedArrayTags[objectTag]=typedArrayTags[regexpTag]=typedArrayTags[setTag]=typedArrayTags[stringTag]=typedArrayTags[weakMapTag]=false;
+/** Used to identify `toStringTag` values supported by `_.clone`. */var cloneableTags={};cloneableTags[argsTag]=cloneableTags[arrayTag]=cloneableTags[arrayBufferTag]=cloneableTags[boolTag]=cloneableTags[dateTag]=cloneableTags[float32Tag]=cloneableTags[float64Tag]=cloneableTags[int8Tag]=cloneableTags[int16Tag]=cloneableTags[int32Tag]=cloneableTags[numberTag]=cloneableTags[objectTag]=cloneableTags[regexpTag]=cloneableTags[stringTag]=cloneableTags[uint8Tag]=cloneableTags[uint8ClampedTag]=cloneableTags[uint16Tag]=cloneableTags[uint32Tag]=true;cloneableTags[errorTag]=cloneableTags[funcTag]=cloneableTags[mapTag]=cloneableTags[setTag]=cloneableTags[weakMapTag]=false;
+/** Used to map latin-1 supplementary letters to basic latin letters. */var deburredLetters={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"};
+/** Used to map characters to HTML entities. */var htmlEscapes={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"};
+/** Used to map HTML entities to characters. */var htmlUnescapes={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"};
+/** Used to determine if values are of the language type `Object`. */var objectTypes={function:true,object:true};
+/** Used to escape characters for inclusion in compiled regexes. */var regexpEscapes={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"};
+/** Used to escape characters for inclusion in compiled string literals. */var stringEscapes={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"};
+/** Detect free variable `exports`. */var freeExports=objectTypes[typeof exports]&&exports&&!exports.nodeType&&exports;
+/** Detect free variable `module`. */var freeModule=objectTypes[typeof module]&&module&&!module.nodeType&&module;
+/** Detect free variable `global` from Node.js. */var freeGlobal=freeExports&&freeModule&&typeof global=="object"&&global&&global.Object&&global;
+/** Detect free variable `self`. */var freeSelf=objectTypes[typeof self]&&self&&self.Object&&self;
+/** Detect free variable `window`. */var freeWindow=objectTypes[typeof window]&&window&&window.Object&&window;
+/** Detect the popular CommonJS extension `module.exports`. */var moduleExports=freeModule&&freeModule.exports===freeExports&&freeExports;
+/**
+ * Used as a reference to the global object.
+ *
+ * The `this` value is used if it's the global object to avoid Greasemonkey's
+ * restricted `window` object, otherwise the `window` object is used.
+ */var root=freeGlobal||freeWindow!==(this&&this.window)&&freeWindow||freeSelf||this;
+/*--------------------------------------------------------------------------*/
+/**
+ * The base implementation of `compareAscending` which compares values and
+ * sorts them in ascending order without guaranteeing a stable sort.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {number} Returns the sort order indicator for `value`.
+ */function baseCompareAscending(value,other){if(value!==other){var valIsNull=value===null,valIsUndef=value===undefined,valIsReflexive=value===value;var othIsNull=other===null,othIsUndef=other===undefined,othIsReflexive=other===other;if(value>other&&!othIsNull||!valIsReflexive||valIsNull&&!othIsUndef&&othIsReflexive||valIsUndef&&othIsReflexive){return 1}if(value<other&&!valIsNull||!othIsReflexive||othIsNull&&!valIsUndef&&valIsReflexive||othIsUndef&&valIsReflexive){return-1}}return 0}
+/**
+ * The base implementation of `_.findIndex` and `_.findLastIndex` without
+ * support for callback shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */function baseFindIndex(array,predicate,fromRight){var length=array.length,index=fromRight?length:-1;while(fromRight?index--:++index<length){if(predicate(array[index],index,array)){return index}}return-1}
+/**
+ * The base implementation of `_.indexOf` without support for binary searches.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {number} fromIndex The index to search from.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */function baseIndexOf(array,value,fromIndex){if(value!==value){return indexOfNaN(array,fromIndex)}var index=fromIndex-1,length=array.length;while(++index<length){if(array[index]===value){return index}}return-1}
+/**
+ * The base implementation of `_.isFunction` without support for environments
+ * with incorrect `typeof` results.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ */function baseIsFunction(value){
+// Avoid a Chakra JIT bug in compatibility modes of IE 11.
+// See https://github.com/jashkenas/underscore/issues/1621 for more details.
+return typeof value=="function"||false}
+/**
+ * Converts `value` to a string if it's not one. An empty string is returned
+ * for `null` or `undefined` values.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {string} Returns the string.
+ */function baseToString(value){return value==null?"":value+""}
+/**
+ * Used by `_.trim` and `_.trimLeft` to get the index of the first character
+ * of `string` that is not found in `chars`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @param {string} chars The characters to find.
+ * @returns {number} Returns the index of the first character not found in `chars`.
+ */function charsLeftIndex(string,chars){var index=-1,length=string.length;while(++index<length&&chars.indexOf(string.charAt(index))>-1){}return index}
+/**
+ * Used by `_.trim` and `_.trimRight` to get the index of the last character
+ * of `string` that is not found in `chars`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @param {string} chars The characters to find.
+ * @returns {number} Returns the index of the last character not found in `chars`.
+ */function charsRightIndex(string,chars){var index=string.length;while(index--&&chars.indexOf(string.charAt(index))>-1){}return index}
+/**
+ * Used by `_.sortBy` to compare transformed elements of a collection and stable
+ * sort them in ascending order.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @returns {number} Returns the sort order indicator for `object`.
+ */function compareAscending(object,other){return baseCompareAscending(object.criteria,other.criteria)||object.index-other.index}
+/**
+ * Used by `_.sortByOrder` to compare multiple properties of a value to another
+ * and stable sort them.
+ *
+ * If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise,
+ * a value is sorted in ascending order if its corresponding order is "asc", and
+ * descending if "desc".
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {boolean[]} orders The order to sort by for each property.
+ * @returns {number} Returns the sort order indicator for `object`.
+ */function compareMultiple(object,other,orders){var index=-1,objCriteria=object.criteria,othCriteria=other.criteria,length=objCriteria.length,ordersLength=orders.length;while(++index<length){var result=baseCompareAscending(objCriteria[index],othCriteria[index]);if(result){if(index>=ordersLength){return result}var order=orders[index];return result*(order==="asc"||order===true?1:-1)}}
+// Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
+// that causes it, under certain circumstances, to provide the same value for
+// `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
+// for more details.
+//
+// This also ensures a stable sort in V8 and other engines.
+// See https://code.google.com/p/v8/issues/detail?id=90 for more details.
+return object.index-other.index}
+/**
+ * Used by `_.deburr` to convert latin-1 supplementary letters to basic latin letters.
+ *
+ * @private
+ * @param {string} letter The matched letter to deburr.
+ * @returns {string} Returns the deburred letter.
+ */function deburrLetter(letter){return deburredLetters[letter]}
+/**
+ * Used by `_.escape` to convert characters to HTML entities.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */function escapeHtmlChar(chr){return htmlEscapes[chr]}
+/**
+ * Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @param {string} leadingChar The capture group for a leading character.
+ * @param {string} whitespaceChar The capture group for a whitespace character.
+ * @returns {string} Returns the escaped character.
+ */function escapeRegExpChar(chr,leadingChar,whitespaceChar){if(leadingChar){chr=regexpEscapes[chr]}else if(whitespaceChar){chr=stringEscapes[chr]}return"\\"+chr}
+/**
+ * Used by `_.template` to escape characters for inclusion in compiled string literals.
+ *
+ * @private
+ * @param {string} chr The matched character to escape.
+ * @returns {string} Returns the escaped character.
+ */function escapeStringChar(chr){return"\\"+stringEscapes[chr]}
+/**
+ * Gets the index at which the first occurrence of `NaN` is found in `array`.
+ *
+ * @private
+ * @param {Array} array The array to search.
+ * @param {number} fromIndex The index to search from.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {number} Returns the index of the matched `NaN`, else `-1`.
+ */function indexOfNaN(array,fromIndex,fromRight){var length=array.length,index=fromIndex+(fromRight?0:-1);while(fromRight?index--:++index<length){var other=array[index];if(other!==other){return index}}return-1}
+/**
+ * Checks if `value` is object-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ */function isObjectLike(value){return!!value&&typeof value=="object"}
+/**
+ * Used by `trimmedLeftIndex` and `trimmedRightIndex` to determine if a
+ * character code is whitespace.
+ *
+ * @private
+ * @param {number} charCode The character code to inspect.
+ * @returns {boolean} Returns `true` if `charCode` is whitespace, else `false`.
+ */function isSpace(charCode){return charCode<=160&&(charCode>=9&&charCode<=13)||charCode==32||charCode==160||charCode==5760||charCode==6158||charCode>=8192&&(charCode<=8202||charCode==8232||charCode==8233||charCode==8239||charCode==8287||charCode==12288||charCode==65279)}
+/**
+ * Replaces all `placeholder` elements in `array` with an internal placeholder
+ * and returns an array of their indexes.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {*} placeholder The placeholder to replace.
+ * @returns {Array} Returns the new array of placeholder indexes.
+ */function replaceHolders(array,placeholder){var index=-1,length=array.length,resIndex=-1,result=[];while(++index<length){if(array[index]===placeholder){array[index]=PLACEHOLDER;result[++resIndex]=index}}return result}
+/**
+ * An implementation of `_.uniq` optimized for sorted arrays without support
+ * for callback shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The function invoked per iteration.
+ * @returns {Array} Returns the new duplicate-value-free array.
+ */function sortedUniq(array,iteratee){var seen,index=-1,length=array.length,resIndex=-1,result=[];while(++index<length){var value=array[index],computed=iteratee?iteratee(value,index,array):value;if(!index||seen!==computed){seen=computed;result[++resIndex]=value}}return result}
+/**
+ * Used by `_.trim` and `_.trimLeft` to get the index of the first non-whitespace
+ * character of `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the index of the first non-whitespace character.
+ */function trimmedLeftIndex(string){var index=-1,length=string.length;while(++index<length&&isSpace(string.charCodeAt(index))){}return index}
+/**
+ * Used by `_.trim` and `_.trimRight` to get the index of the last non-whitespace
+ * character of `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the index of the last non-whitespace character.
+ */function trimmedRightIndex(string){var index=string.length;while(index--&&isSpace(string.charCodeAt(index))){}return index}
+/**
+ * Used by `_.unescape` to convert HTML entities to characters.
+ *
+ * @private
+ * @param {string} chr The matched character to unescape.
+ * @returns {string} Returns the unescaped character.
+ */function unescapeHtmlChar(chr){return htmlUnescapes[chr]}
+/*--------------------------------------------------------------------------*/
+/**
+ * Create a new pristine `lodash` function using the given `context` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Object} [context=root] The context object.
+ * @returns {Function} Returns a new `lodash` function.
+ * @example
+ *
+ * _.mixin({ 'foo': _.constant('foo') });
+ *
+ * var lodash = _.runInContext();
+ * lodash.mixin({ 'bar': lodash.constant('bar') });
+ *
+ * _.isFunction(_.foo);
+ * // => true
+ * _.isFunction(_.bar);
+ * // => false
+ *
+ * lodash.isFunction(lodash.foo);
+ * // => false
+ * lodash.isFunction(lodash.bar);
+ * // => true
+ *
+ * // using `context` to mock `Date#getTime` use in `_.now`
+ * var mock = _.runInContext({
+ * 'Date': function() {
+ * return { 'getTime': getTimeMock };
+ * }
+ * });
+ *
+ * // or creating a suped-up `defer` in Node.js
+ * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
+ */function runInContext(context){
+// Avoid issues with some ES3 environments that attempt to use values, named
+// after built-in constructors like `Object`, for the creation of literals.
+// ES5 clears this up by stating that literals must use built-in constructors.
+// See https://es5.github.io/#x11.1.5 for more details.
+context=context?_.defaults(root.Object(),context,_.pick(root,contextProps)):root;
+/** Native constructor references. */var Array=context.Array,Date=context.Date,Error=context.Error,Function=context.Function,Math=context.Math,Number=context.Number,Object=context.Object,RegExp=context.RegExp,String=context.String,TypeError=context.TypeError;
+/** Used for native method references. */var arrayProto=Array.prototype,objectProto=Object.prototype,stringProto=String.prototype;
+/** Used to resolve the decompiled source of functions. */var fnToString=Function.prototype.toString;
+/** Used to check objects for own properties. */var hasOwnProperty=objectProto.hasOwnProperty;
+/** Used to generate unique IDs. */var idCounter=0;
+/**
+ * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
+ * of values.
+ */var objToString=objectProto.toString;
+/** Used to restore the original `_` reference in `_.noConflict`. */var oldDash=root._;
+/** Used to detect if a method is native. */var reIsNative=RegExp("^"+fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");
+/** Native method references. */var ArrayBuffer=context.ArrayBuffer,clearTimeout=context.clearTimeout,parseFloat=context.parseFloat,pow=Math.pow,propertyIsEnumerable=objectProto.propertyIsEnumerable,Set=getNative(context,"Set"),setTimeout=context.setTimeout,splice=arrayProto.splice,Uint8Array=context.Uint8Array,WeakMap=getNative(context,"WeakMap");
+/* Native method references for those with the same name as other `lodash` methods. */var nativeCeil=Math.ceil,nativeCreate=getNative(Object,"create"),nativeFloor=Math.floor,nativeIsArray=getNative(Array,"isArray"),nativeIsFinite=context.isFinite,nativeKeys=getNative(Object,"keys"),nativeMax=Math.max,nativeMin=Math.min,nativeNow=getNative(Date,"now"),nativeParseInt=context.parseInt,nativeRandom=Math.random;
+/** Used as references for `-Infinity` and `Infinity`. */var NEGATIVE_INFINITY=Number.NEGATIVE_INFINITY,POSITIVE_INFINITY=Number.POSITIVE_INFINITY;
+/** Used as references for the maximum length and index of an array. */var MAX_ARRAY_LENGTH=4294967295,MAX_ARRAY_INDEX=MAX_ARRAY_LENGTH-1,HALF_MAX_ARRAY_LENGTH=MAX_ARRAY_LENGTH>>>1;
+/**
+ * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
+ * of an array-like value.
+ */var MAX_SAFE_INTEGER=9007199254740991;
+/** Used to store function metadata. */var metaMap=WeakMap&&new WeakMap;
+/** Used to lookup unminified function names. */var realNames={};
+/*------------------------------------------------------------------------*/
+/**
+ * Creates a `lodash` object which wraps `value` to enable implicit chaining.
+ * Methods that operate on and return arrays, collections, and functions can
+ * be chained together. Methods that retrieve a single value or may return a
+ * primitive value will automatically end the chain returning the unwrapped
+ * value. Explicit chaining may be enabled using `_.chain`. The execution of
+ * chained methods is lazy, that is, execution is deferred until `_#value`
+ * is implicitly or explicitly called.
+ *
+ * Lazy evaluation allows several methods to support shortcut fusion. Shortcut
+ * fusion is an optimization strategy which merge iteratee calls; this can help
+ * to avoid the creation of intermediate data structures and greatly reduce the
+ * number of iteratee executions.
+ *
+ * Chaining is supported in custom builds as long as the `_#value` method is
+ * directly or indirectly included in the build.
+ *
+ * In addition to lodash methods, wrappers have `Array` and `String` methods.
+ *
+ * The wrapper `Array` methods are:
+ * `concat`, `join`, `pop`, `push`, `reverse`, `shift`, `slice`, `sort`,
+ * `splice`, and `unshift`
+ *
+ * The wrapper `String` methods are:
+ * `replace` and `split`
+ *
+ * The wrapper methods that support shortcut fusion are:
+ * `compact`, `drop`, `dropRight`, `dropRightWhile`, `dropWhile`, `filter`,
+ * `first`, `initial`, `last`, `map`, `pluck`, `reject`, `rest`, `reverse`,
+ * `slice`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, `toArray`,
+ * and `where`
+ *
+ * The chainable wrapper methods are:
+ * `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`,
+ * `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`,
+ * `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`,
+ * `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`,
+ * `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`,
+ * `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
+ * `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
+ * `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`,
+ * `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`,
+ * `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`,
+ * `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`,
+ * `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`,
+ * `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`,
+ * `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`,
+ * `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`,
+ * `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`,
+ * `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith`
+ *
+ * The wrapper methods that are **not** chainable by default are:
+ * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`,
+ * `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`,
+ * `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`,
+ * `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`,
+ * `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
+ * `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`,
+ * `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`,
+ * `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`,
+ * `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`,
+ * `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`,
+ * `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`,
+ * `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`,
+ * `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`,
+ * `unescape`, `uniqueId`, `value`, and `words`
+ *
+ * The wrapper method `sample` will return a wrapped value when `n` is provided,
+ * otherwise an unwrapped value is returned.
+ *
+ * @name _
+ * @constructor
+ * @category Chain
+ * @param {*} value The value to wrap in a `lodash` instance.
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var wrapped = _([1, 2, 3]);
+ *
+ * // returns an unwrapped value
+ * wrapped.reduce(function(total, n) {
+ * return total + n;
+ * });
+ * // => 6
+ *
+ * // returns a wrapped value
+ * var squares = wrapped.map(function(n) {
+ * return n * n;
+ * });
+ *
+ * _.isArray(squares);
+ * // => false
+ *
+ * _.isArray(squares.value());
+ * // => true
+ */function lodash(value){if(isObjectLike(value)&&!isArray(value)&&!(value instanceof LazyWrapper)){if(value instanceof LodashWrapper){return value}if(hasOwnProperty.call(value,"__chain__")&&hasOwnProperty.call(value,"__wrapped__")){return wrapperClone(value)}}return new LodashWrapper(value)}
+/**
+ * The function whose prototype all chaining wrappers inherit from.
+ *
+ * @private
+ */function baseLodash(){
+// No operation performed.
+}
+/**
+ * The base constructor for creating `lodash` wrapper objects.
+ *
+ * @private
+ * @param {*} value The value to wrap.
+ * @param {boolean} [chainAll] Enable chaining for all wrapper methods.
+ * @param {Array} [actions=[]] Actions to peform to resolve the unwrapped value.
+ */function LodashWrapper(value,chainAll,actions){this.__wrapped__=value;this.__actions__=actions||[];this.__chain__=!!chainAll}
+/**
+ * An object environment feature flags.
+ *
+ * @static
+ * @memberOf _
+ * @type Object
+ */var support=lodash.support={};
+/**
+ * By default, the template delimiters used by lodash are like those in
+ * embedded Ruby (ERB). Change the following template settings to use
+ * alternative delimiters.
+ *
+ * @static
+ * @memberOf _
+ * @type Object
+ */lodash.templateSettings={
+/**
+ * Used to detect `data` property values to be HTML-escaped.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+escape:reEscape,
+/**
+ * Used to detect code to be evaluated.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+evaluate:reEvaluate,
+/**
+ * Used to detect `data` property values to inject.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+interpolate:reInterpolate,
+/**
+ * Used to reference the data object in the template text.
+ *
+ * @memberOf _.templateSettings
+ * @type string
+ */
+variable:"",
+/**
+ * Used to import variables into the compiled template.
+ *
+ * @memberOf _.templateSettings
+ * @type Object
+ */
+imports:{
+/**
+ * A reference to the `lodash` function.
+ *
+ * @memberOf _.templateSettings.imports
+ * @type Function
+ */
+_:lodash}};
+/*------------------------------------------------------------------------*/
+/**
+ * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
+ *
+ * @private
+ * @param {*} value The value to wrap.
+ */function LazyWrapper(value){this.__wrapped__=value;this.__actions__=[];this.__dir__=1;this.__filtered__=false;this.__iteratees__=[];this.__takeCount__=POSITIVE_INFINITY;this.__views__=[]}
+/**
+ * Creates a clone of the lazy wrapper object.
+ *
+ * @private
+ * @name clone
+ * @memberOf LazyWrapper
+ * @returns {Object} Returns the cloned `LazyWrapper` object.
+ */function lazyClone(){var result=new LazyWrapper(this.__wrapped__);result.__actions__=arrayCopy(this.__actions__);result.__dir__=this.__dir__;result.__filtered__=this.__filtered__;result.__iteratees__=arrayCopy(this.__iteratees__);result.__takeCount__=this.__takeCount__;result.__views__=arrayCopy(this.__views__);return result}
+/**
+ * Reverses the direction of lazy iteration.
+ *
+ * @private
+ * @name reverse
+ * @memberOf LazyWrapper
+ * @returns {Object} Returns the new reversed `LazyWrapper` object.
+ */function lazyReverse(){if(this.__filtered__){var result=new LazyWrapper(this);result.__dir__=-1;result.__filtered__=true}else{result=this.clone();result.__dir__*=-1}return result}
+/**
+ * Extracts the unwrapped value from its lazy wrapper.
+ *
+ * @private
+ * @name value
+ * @memberOf LazyWrapper
+ * @returns {*} Returns the unwrapped value.
+ */function lazyValue(){var array=this.__wrapped__.value(),dir=this.__dir__,isArr=isArray(array),isRight=dir<0,arrLength=isArr?array.length:0,view=getView(0,arrLength,this.__views__),start=view.start,end=view.end,length=end-start,index=isRight?end:start-1,iteratees=this.__iteratees__,iterLength=iteratees.length,resIndex=0,takeCount=nativeMin(length,this.__takeCount__);if(!isArr||arrLength<LARGE_ARRAY_SIZE||arrLength==length&&takeCount==length){return baseWrapperValue(isRight&&isArr?array.reverse():array,this.__actions__)}var result=[];outer:while(length--&&resIndex<takeCount){index+=dir;var iterIndex=-1,value=array[index];while(++iterIndex<iterLength){var data=iteratees[iterIndex],iteratee=data.iteratee,type=data.type,computed=iteratee(value);if(type==LAZY_MAP_FLAG){value=computed}else if(!computed){if(type==LAZY_FILTER_FLAG){continue outer}else{break outer}}}result[resIndex++]=value}return result}
+/*------------------------------------------------------------------------*/
+/**
+ * Creates a cache object to store key/value pairs.
+ *
+ * @private
+ * @static
+ * @name Cache
+ * @memberOf _.memoize
+ */function MapCache(){this.__data__={}}
+/**
+ * Removes `key` and its value from the cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf _.memoize.Cache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed successfully, else `false`.
+ */function mapDelete(key){return this.has(key)&&delete this.__data__[key]}
+/**
+ * Gets the cached value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf _.memoize.Cache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the cached value.
+ */function mapGet(key){return key=="__proto__"?undefined:this.__data__[key]}
+/**
+ * Checks if a cached value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf _.memoize.Cache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */function mapHas(key){return key!="__proto__"&&hasOwnProperty.call(this.__data__,key)}
+/**
+ * Sets `value` to `key` of the cache.
+ *
+ * @private
+ * @name set
+ * @memberOf _.memoize.Cache
+ * @param {string} key The key of the value to cache.
+ * @param {*} value The value to cache.
+ * @returns {Object} Returns the cache object.
+ */function mapSet(key,value){if(key!="__proto__"){this.__data__[key]=value}return this}
+/*------------------------------------------------------------------------*/
+/**
+ *
+ * Creates a cache object to store unique values.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ */function SetCache(values){var length=values?values.length:0;this.data={hash:nativeCreate(null),set:new Set};while(length--){this.push(values[length])}}
+/**
+ * Checks if `value` is in `cache` mimicking the return signature of
+ * `_.indexOf` by returning `0` if the value is found, else `-1`.
+ *
+ * @private
+ * @param {Object} cache The cache to search.
+ * @param {*} value The value to search for.
+ * @returns {number} Returns `0` if `value` is found, else `-1`.
+ */function cacheIndexOf(cache,value){var data=cache.data,result=typeof value=="string"||isObject(value)?data.set.has(value):data.hash[value];return result?0:-1}
+/**
+ * Adds `value` to the cache.
+ *
+ * @private
+ * @name push
+ * @memberOf SetCache
+ * @param {*} value The value to cache.
+ */function cachePush(value){var data=this.data;if(typeof value=="string"||isObject(value)){data.set.add(value)}else{data.hash[value]=true}}
+/*------------------------------------------------------------------------*/
+/**
+ * Creates a new array joining `array` with `other`.
+ *
+ * @private
+ * @param {Array} array The array to join.
+ * @param {Array} other The other array to join.
+ * @returns {Array} Returns the new concatenated array.
+ */function arrayConcat(array,other){var index=-1,length=array.length,othIndex=-1,othLength=other.length,result=Array(length+othLength);while(++index<length){result[index]=array[index]}while(++othIndex<othLength){result[index++]=other[othIndex]}return result}
+/**
+ * Copies the values of `source` to `array`.
+ *
+ * @private
+ * @param {Array} source The array to copy values from.
+ * @param {Array} [array=[]] The array to copy values to.
+ * @returns {Array} Returns `array`.
+ */function arrayCopy(source,array){var index=-1,length=source.length;array||(array=Array(length));while(++index<length){array[index]=source[index]}return array}
+/**
+ * A specialized version of `_.forEach` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */function arrayEach(array,iteratee){var index=-1,length=array.length;while(++index<length){if(iteratee(array[index],index,array)===false){break}}return array}
+/**
+ * A specialized version of `_.forEachRight` for arrays without support for
+ * callback shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */function arrayEachRight(array,iteratee){var length=array.length;while(length--){if(iteratee(array[length],length,array)===false){break}}return array}
+/**
+ * A specialized version of `_.every` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
+ * else `false`.
+ */function arrayEvery(array,predicate){var index=-1,length=array.length;while(++index<length){if(!predicate(array[index],index,array)){return false}}return true}
+/**
+ * A specialized version of `baseExtremum` for arrays which invokes `iteratee`
+ * with one argument: (value).
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} comparator The function used to compare values.
+ * @param {*} exValue The initial extremum value.
+ * @returns {*} Returns the extremum value.
+ */function arrayExtremum(array,iteratee,comparator,exValue){var index=-1,length=array.length,computed=exValue,result=computed;while(++index<length){var value=array[index],current=+iteratee(value);if(comparator(current,computed)){computed=current;result=value}}return result}
+/**
+ * A specialized version of `_.filter` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ */function arrayFilter(array,predicate){var index=-1,length=array.length,resIndex=-1,result=[];while(++index<length){var value=array[index];if(predicate(value,index,array)){result[++resIndex]=value}}return result}
+/**
+ * A specialized version of `_.map` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */function arrayMap(array,iteratee){var index=-1,length=array.length,result=Array(length);while(++index<length){result[index]=iteratee(array[index],index,array)}return result}
+/**
+ * Appends the elements of `values` to `array`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to append.
+ * @returns {Array} Returns `array`.
+ */function arrayPush(array,values){var index=-1,length=values.length,offset=array.length;while(++index<length){array[offset+index]=values[index]}return array}
+/**
+ * A specialized version of `_.reduce` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {boolean} [initFromArray] Specify using the first element of `array`
+ * as the initial value.
+ * @returns {*} Returns the accumulated value.
+ */function arrayReduce(array,iteratee,accumulator,initFromArray){var index=-1,length=array.length;if(initFromArray&&length){accumulator=array[++index]}while(++index<length){accumulator=iteratee(accumulator,array[index],index,array)}return accumulator}
+/**
+ * A specialized version of `_.reduceRight` for arrays without support for
+ * callback shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {boolean} [initFromArray] Specify using the last element of `array`
+ * as the initial value.
+ * @returns {*} Returns the accumulated value.
+ */function arrayReduceRight(array,iteratee,accumulator,initFromArray){var length=array.length;if(initFromArray&&length){accumulator=array[--length]}while(length--){accumulator=iteratee(accumulator,array[length],length,array)}return accumulator}
+/**
+ * A specialized version of `_.some` for arrays without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ */function arraySome(array,predicate){var index=-1,length=array.length;while(++index<length){if(predicate(array[index],index,array)){return true}}return false}
+/**
+ * A specialized version of `_.sum` for arrays without support for callback
+ * shorthands and `this` binding..
+ *
+ * @private
+ * @param {Array} array The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {number} Returns the sum.
+ */function arraySum(array,iteratee){var length=array.length,result=0;while(length--){result+=+iteratee(array[length])||0}return result}
+/**
+ * Used by `_.defaults` to customize its `_.assign` use.
+ *
+ * @private
+ * @param {*} objectValue The destination object property value.
+ * @param {*} sourceValue The source object property value.
+ * @returns {*} Returns the value to assign to the destination object.
+ */function assignDefaults(objectValue,sourceValue){return objectValue===undefined?sourceValue:objectValue}
+/**
+ * Used by `_.template` to customize its `_.assign` use.
+ *
+ * **Note:** This function is like `assignDefaults` except that it ignores
+ * inherited property values when checking if a property is `undefined`.
+ *
+ * @private
+ * @param {*} objectValue The destination object property value.
+ * @param {*} sourceValue The source object property value.
+ * @param {string} key The key associated with the object and source values.
+ * @param {Object} object The destination object.
+ * @returns {*} Returns the value to assign to the destination object.
+ */function assignOwnDefaults(objectValue,sourceValue,key,object){return objectValue===undefined||!hasOwnProperty.call(object,key)?sourceValue:objectValue}
+/**
+ * A specialized version of `_.assign` for customizing assigned values without
+ * support for argument juggling, multiple sources, and `this` binding `customizer`
+ * functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {Function} customizer The function to customize assigned values.
+ * @returns {Object} Returns `object`.
+ */function assignWith(object,source,customizer){var index=-1,props=keys(source),length=props.length;while(++index<length){var key=props[index],value=object[key],result=customizer(value,source[key],key,object,source);if((result===result?result!==value:value===value)||value===undefined&&!(key in object)){object[key]=result}}return object}
+/**
+ * The base implementation of `_.assign` without support for argument juggling,
+ * multiple sources, and `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */function baseAssign(object,source){return source==null?object:baseCopy(source,keys(source),object)}
+/**
+ * The base implementation of `_.at` without support for string collections
+ * and individual key arguments.
+ *
+ * @private
+ * @param {Array|Object} collection The collection to iterate over.
+ * @param {number[]|string[]} props The property names or indexes of elements to pick.
+ * @returns {Array} Returns the new array of picked elements.
+ */function baseAt(collection,props){var index=-1,isNil=collection==null,isArr=!isNil&&isArrayLike(collection),length=isArr?collection.length:0,propsLength=props.length,result=Array(propsLength);while(++index<propsLength){var key=props[index];if(isArr){result[index]=isIndex(key,length)?collection[key]:undefined}else{result[index]=isNil?undefined:collection[key]}}return result}
+/**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property names to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @returns {Object} Returns `object`.
+ */function baseCopy(source,props,object){object||(object={});var index=-1,length=props.length;while(++index<length){var key=props[index];object[key]=source[key]}return object}
+/**
+ * The base implementation of `_.callback` which supports specifying the
+ * number of arguments to provide to `func`.
+ *
+ * @private
+ * @param {*} [func=_.identity] The value to convert to a callback.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {number} [argCount] The number of arguments to provide to `func`.
+ * @returns {Function} Returns the callback.
+ */function baseCallback(func,thisArg,argCount){var type=typeof func;if(type=="function"){return thisArg===undefined?func:bindCallback(func,thisArg,argCount)}if(func==null){return identity}if(type=="object"){return baseMatches(func)}return thisArg===undefined?property(func):baseMatchesProperty(func,thisArg)}
+/**
+ * The base implementation of `_.clone` without support for argument juggling
+ * and `this` binding `customizer` functions.
+ *
+ * @private
+ * @param {*} value The value to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @param {Function} [customizer] The function to customize cloning values.
+ * @param {string} [key] The key of `value`.
+ * @param {Object} [object] The object `value` belongs to.
+ * @param {Array} [stackA=[]] Tracks traversed source objects.
+ * @param {Array} [stackB=[]] Associates clones with source counterparts.
+ * @returns {*} Returns the cloned value.
+ */function baseClone(value,isDeep,customizer,key,object,stackA,stackB){var result;if(customizer){result=object?customizer(value,key,object):customizer(value)}if(result!==undefined){return result}if(!isObject(value)){return value}var isArr=isArray(value);if(isArr){result=initCloneArray(value);if(!isDeep){return arrayCopy(value,result)}}else{var tag=objToString.call(value),isFunc=tag==funcTag;if(tag==objectTag||tag==argsTag||isFunc&&!object){result=initCloneObject(isFunc?{}:value);if(!isDeep){return baseAssign(result,value)}}else{return cloneableTags[tag]?initCloneByTag(value,tag,isDeep):object?value:{}}}
+// Check for circular references and return its corresponding clone.
+stackA||(stackA=[]);stackB||(stackB=[]);var length=stackA.length;while(length--){if(stackA[length]==value){return stackB[length]}}
+// Add the source value to the stack of traversed objects and associate it with its clone.
+stackA.push(value);stackB.push(result);
+// Recursively populate clone (susceptible to call stack limits).
+// Recursively populate clone (susceptible to call stack limits).
+(isArr?arrayEach:baseForOwn)(value,function(subValue,key){result[key]=baseClone(subValue,isDeep,customizer,key,value,stackA,stackB)});return result}
+/**
+ * The base implementation of `_.create` without support for assigning
+ * properties to the created object.
+ *
+ * @private
+ * @param {Object} prototype The object to inherit from.
+ * @returns {Object} Returns the new object.
+ */var baseCreate=function(){function object(){}return function(prototype){if(isObject(prototype)){object.prototype=prototype;var result=new object;object.prototype=undefined}return result||{}}}();
+/**
+ * The base implementation of `_.delay` and `_.defer` which accepts an index
+ * of where to slice the arguments to provide to `func`.
+ *
+ * @private
+ * @param {Function} func The function to delay.
+ * @param {number} wait The number of milliseconds to delay invocation.
+ * @param {Object} args The arguments provide to `func`.
+ * @returns {number} Returns the timer id.
+ */function baseDelay(func,wait,args){if(typeof func!="function"){throw new TypeError(FUNC_ERROR_TEXT)}return setTimeout(function(){func.apply(undefined,args)},wait)}
+/**
+ * The base implementation of `_.difference` which accepts a single array
+ * of values to exclude.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Array} values The values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ */function baseDifference(array,values){var length=array?array.length:0,result=[];if(!length){return result}var index=-1,indexOf=getIndexOf(),isCommon=indexOf==baseIndexOf,cache=isCommon&&values.length>=LARGE_ARRAY_SIZE?createCache(values):null,valuesLength=values.length;if(cache){indexOf=cacheIndexOf;isCommon=false;values=cache}outer:while(++index<length){var value=array[index];if(isCommon&&value===value){var valuesIndex=valuesLength;while(valuesIndex--){if(values[valuesIndex]===value){continue outer}}result.push(value)}else if(indexOf(values,value,0)<0){result.push(value)}}return result}
+/**
+ * The base implementation of `_.forEach` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array|Object|string} Returns `collection`.
+ */var baseEach=createBaseEach(baseForOwn);
+/**
+ * The base implementation of `_.forEachRight` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array|Object|string} Returns `collection`.
+ */var baseEachRight=createBaseEach(baseForOwnRight,true);
+/**
+ * The base implementation of `_.every` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
+ * else `false`
+ */function baseEvery(collection,predicate){var result=true;baseEach(collection,function(value,index,collection){result=!!predicate(value,index,collection);return result});return result}
+/**
+ * Gets the extremum value of `collection` invoking `iteratee` for each value
+ * in `collection` to generate the criterion by which the value is ranked.
+ * The `iteratee` is invoked with three arguments: (value, index|key, collection).
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} comparator The function used to compare values.
+ * @param {*} exValue The initial extremum value.
+ * @returns {*} Returns the extremum value.
+ */function baseExtremum(collection,iteratee,comparator,exValue){var computed=exValue,result=computed;baseEach(collection,function(value,index,collection){var current=+iteratee(value,index,collection);if(comparator(current,computed)||current===exValue&&current===result){computed=current;result=value}});return result}
+/**
+ * The base implementation of `_.fill` without an iteratee call guard.
+ *
+ * @private
+ * @param {Array} array The array to fill.
+ * @param {*} value The value to fill `array` with.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns `array`.
+ */function baseFill(array,value,start,end){var length=array.length;start=start==null?0:+start||0;if(start<0){start=-start>length?0:length+start}end=end===undefined||end>length?length:+end||0;if(end<0){end+=length}length=start>end?0:end>>>0;start>>>=0;while(start<length){array[start++]=value}return array}
+/**
+ * The base implementation of `_.filter` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Array} Returns the new filtered array.
+ */function baseFilter(collection,predicate){var result=[];baseEach(collection,function(value,index,collection){if(predicate(value,index,collection)){result.push(value)}});return result}
+/**
+ * The base implementation of `_.find`, `_.findLast`, `_.findKey`, and `_.findLastKey`,
+ * without support for callback shorthands and `this` binding, which iterates
+ * over `collection` using the provided `eachFunc`.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {Function} eachFunc The function to iterate over `collection`.
+ * @param {boolean} [retKey] Specify returning the key of the found element
+ * instead of the element itself.
+ * @returns {*} Returns the found element or its key, else `undefined`.
+ */function baseFind(collection,predicate,eachFunc,retKey){var result;eachFunc(collection,function(value,key,collection){if(predicate(value,key,collection)){result=retKey?key:value;return false}});return result}
+/**
+ * The base implementation of `_.flatten` with added support for restricting
+ * flattening and specifying the start index.
+ *
+ * @private
+ * @param {Array} array The array to flatten.
+ * @param {boolean} [isDeep] Specify a deep flatten.
+ * @param {boolean} [isStrict] Restrict flattening to arrays-like objects.
+ * @param {Array} [result=[]] The initial result value.
+ * @returns {Array} Returns the new flattened array.
+ */function baseFlatten(array,isDeep,isStrict,result){result||(result=[]);var index=-1,length=array.length;while(++index<length){var value=array[index];if(isObjectLike(value)&&isArrayLike(value)&&(isStrict||isArray(value)||isArguments(value))){if(isDeep){
+// Recursively flatten arrays (susceptible to call stack limits).
+baseFlatten(value,isDeep,isStrict,result)}else{arrayPush(result,value)}}else if(!isStrict){result[result.length]=value}}return result}
+/**
+ * The base implementation of `baseForIn` and `baseForOwn` which iterates
+ * over `object` properties returned by `keysFunc` invoking `iteratee` for
+ * each property. Iteratee functions may exit iteration early by explicitly
+ * returning `false`.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */var baseFor=createBaseFor();
+/**
+ * This function is like `baseFor` except that it iterates over properties
+ * in the opposite order.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @returns {Object} Returns `object`.
+ */var baseForRight=createBaseFor(true);
+/**
+ * The base implementation of `_.forIn` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */function baseForIn(object,iteratee){return baseFor(object,iteratee,keysIn)}
+/**
+ * The base implementation of `_.forOwn` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */function baseForOwn(object,iteratee){return baseFor(object,iteratee,keys)}
+/**
+ * The base implementation of `_.forOwnRight` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Object} Returns `object`.
+ */function baseForOwnRight(object,iteratee){return baseForRight(object,iteratee,keys)}
+/**
+ * The base implementation of `_.functions` which creates an array of
+ * `object` function property names filtered from those provided.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Array} props The property names to filter.
+ * @returns {Array} Returns the new array of filtered property names.
+ */function baseFunctions(object,props){var index=-1,length=props.length,resIndex=-1,result=[];while(++index<length){var key=props[index];if(isFunction(object[key])){result[++resIndex]=key}}return result}
+/**
+ * The base implementation of `get` without support for string paths
+ * and default values.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} path The path of the property to get.
+ * @param {string} [pathKey] The key representation of path.
+ * @returns {*} Returns the resolved value.
+ */function baseGet(object,path,pathKey){if(object==null){return}if(pathKey!==undefined&&pathKey in toObject(object)){path=[pathKey]}var index=0,length=path.length;while(object!=null&&index<length){object=object[path[index++]]}return index&&index==length?object:undefined}
+/**
+ * The base implementation of `_.isEqual` without support for `this` binding
+ * `customizer` functions.
+ *
+ * @private
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @param {Function} [customizer] The function to customize comparing values.
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
+ * @param {Array} [stackA] Tracks traversed `value` objects.
+ * @param {Array} [stackB] Tracks traversed `other` objects.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ */function baseIsEqual(value,other,customizer,isLoose,stackA,stackB){if(value===other){return true}if(value==null||other==null||!isObject(value)&&!isObjectLike(other)){return value!==value&&other!==other}return baseIsEqualDeep(value,other,baseIsEqual,customizer,isLoose,stackA,stackB)}
+/**
+ * A specialized version of `baseIsEqual` for arrays and objects which performs
+ * deep comparisons and tracks traversed objects enabling objects with circular
+ * references to be compared.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparing objects.
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
+ * @param {Array} [stackA=[]] Tracks traversed `value` objects.
+ * @param {Array} [stackB=[]] Tracks traversed `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */function baseIsEqualDeep(object,other,equalFunc,customizer,isLoose,stackA,stackB){var objIsArr=isArray(object),othIsArr=isArray(other),objTag=arrayTag,othTag=arrayTag;if(!objIsArr){objTag=objToString.call(object);if(objTag==argsTag){objTag=objectTag}else if(objTag!=objectTag){objIsArr=isTypedArray(object)}}if(!othIsArr){othTag=objToString.call(other);if(othTag==argsTag){othTag=objectTag}else if(othTag!=objectTag){othIsArr=isTypedArray(other)}}var objIsObj=objTag==objectTag,othIsObj=othTag==objectTag,isSameTag=objTag==othTag;if(isSameTag&&!(objIsArr||objIsObj)){return equalByTag(object,other,objTag)}if(!isLoose){var objIsWrapped=objIsObj&&hasOwnProperty.call(object,"__wrapped__"),othIsWrapped=othIsObj&&hasOwnProperty.call(other,"__wrapped__");if(objIsWrapped||othIsWrapped){return equalFunc(objIsWrapped?object.value():object,othIsWrapped?other.value():other,customizer,isLoose,stackA,stackB)}}if(!isSameTag){return false}
+// Assume cyclic values are equal.
+// For more information on detecting circular references see https://es5.github.io/#JO.
+stackA||(stackA=[]);stackB||(stackB=[]);var length=stackA.length;while(length--){if(stackA[length]==object){return stackB[length]==other}}
+// Add `object` and `other` to the stack of traversed objects.
+stackA.push(object);stackB.push(other);var result=(objIsArr?equalArrays:equalObjects)(object,other,equalFunc,customizer,isLoose,stackA,stackB);stackA.pop();stackB.pop();return result}
+/**
+ * The base implementation of `_.isMatch` without support for callback
+ * shorthands and `this` binding.
+ *
+ * @private
+ * @param {Object} object The object to inspect.
+ * @param {Array} matchData The propery names, values, and compare flags to match.
+ * @param {Function} [customizer] The function to customize comparing objects.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ */function baseIsMatch(object,matchData,customizer){var index=matchData.length,length=index,noCustomizer=!customizer;if(object==null){return!length}object=toObject(object);while(index--){var data=matchData[index];if(noCustomizer&&data[2]?data[1]!==object[data[0]]:!(data[0]in object)){return false}}while(++index<length){data=matchData[index];var key=data[0],objValue=object[key],srcValue=data[1];if(noCustomizer&&data[2]){if(objValue===undefined&&!(key in object)){return false}}else{var result=customizer?customizer(objValue,srcValue,key):undefined;if(!(result===undefined?baseIsEqual(srcValue,objValue,customizer,true):result)){return false}}}return true}
+/**
+ * The base implementation of `_.map` without support for callback shorthands
+ * and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the new mapped array.
+ */function baseMap(collection,iteratee){var index=-1,result=isArrayLike(collection)?Array(collection.length):[];baseEach(collection,function(value,key,collection){result[++index]=iteratee(value,key,collection)});return result}
+/**
+ * The base implementation of `_.matches` which does not clone `source`.
+ *
+ * @private
+ * @param {Object} source The object of property values to match.
+ * @returns {Function} Returns the new function.
+ */function baseMatches(source){var matchData=getMatchData(source);if(matchData.length==1&&matchData[0][2]){var key=matchData[0][0],value=matchData[0][1];return function(object){if(object==null){return false}return object[key]===value&&(value!==undefined||key in toObject(object))}}return function(object){return baseIsMatch(object,matchData)}}
+/**
+ * The base implementation of `_.matchesProperty` which does not clone `srcValue`.
+ *
+ * @private
+ * @param {string} path The path of the property to get.
+ * @param {*} srcValue The value to compare.
+ * @returns {Function} Returns the new function.
+ */function baseMatchesProperty(path,srcValue){var isArr=isArray(path),isCommon=isKey(path)&&isStrictComparable(srcValue),pathKey=path+"";path=toPath(path);return function(object){if(object==null){return false}var key=pathKey;object=toObject(object);if((isArr||!isCommon)&&!(key in object)){object=path.length==1?object:baseGet(object,baseSlice(path,0,-1));if(object==null){return false}key=last(path);object=toObject(object)}return object[key]===srcValue?srcValue!==undefined||key in object:baseIsEqual(srcValue,object[key],undefined,true)}}
+/**
+ * The base implementation of `_.merge` without support for argument juggling,
+ * multiple sources, and `this` binding `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {Function} [customizer] The function to customize merged values.
+ * @param {Array} [stackA=[]] Tracks traversed source objects.
+ * @param {Array} [stackB=[]] Associates values with source counterparts.
+ * @returns {Object} Returns `object`.
+ */function baseMerge(object,source,customizer,stackA,stackB){if(!isObject(object)){return object}var isSrcArr=isArrayLike(source)&&(isArray(source)||isTypedArray(source)),props=isSrcArr?undefined:keys(source);arrayEach(props||source,function(srcValue,key){if(props){key=srcValue;srcValue=source[key]}if(isObjectLike(srcValue)){stackA||(stackA=[]);stackB||(stackB=[]);baseMergeDeep(object,source,key,baseMerge,customizer,stackA,stackB)}else{var value=object[key],result=customizer?customizer(value,srcValue,key,object,source):undefined,isCommon=result===undefined;if(isCommon){result=srcValue}if((result!==undefined||isSrcArr&&!(key in object))&&(isCommon||(result===result?result!==value:value===value))){object[key]=result}}});return object}
+/**
+ * A specialized version of `baseMerge` for arrays and objects which performs
+ * deep merges and tracks traversed objects enabling objects with circular
+ * references to be merged.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @param {string} key The key of the value to merge.
+ * @param {Function} mergeFunc The function to merge values.
+ * @param {Function} [customizer] The function to customize merged values.
+ * @param {Array} [stackA=[]] Tracks traversed source objects.
+ * @param {Array} [stackB=[]] Associates values with source counterparts.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */function baseMergeDeep(object,source,key,mergeFunc,customizer,stackA,stackB){var length=stackA.length,srcValue=source[key];while(length--){if(stackA[length]==srcValue){object[key]=stackB[length];return}}var value=object[key],result=customizer?customizer(value,srcValue,key,object,source):undefined,isCommon=result===undefined;if(isCommon){result=srcValue;if(isArrayLike(srcValue)&&(isArray(srcValue)||isTypedArray(srcValue))){result=isArray(value)?value:isArrayLike(value)?arrayCopy(value):[]}else if(isPlainObject(srcValue)||isArguments(srcValue)){result=isArguments(value)?toPlainObject(value):isPlainObject(value)?value:{}}else{isCommon=false}}
+// Add the source value to the stack of traversed objects and associate
+// it with its merged value.
+stackA.push(srcValue);stackB.push(result);if(isCommon){
+// Recursively merge objects and arrays (susceptible to call stack limits).
+object[key]=mergeFunc(result,srcValue,customizer,stackA,stackB)}else if(result===result?result!==value:value===value){object[key]=result}}
+/**
+ * The base implementation of `_.property` without support for deep paths.
+ *
+ * @private
+ * @param {string} key The key of the property to get.
+ * @returns {Function} Returns the new function.
+ */function baseProperty(key){return function(object){return object==null?undefined:object[key]}}
+/**
+ * A specialized version of `baseProperty` which supports deep paths.
+ *
+ * @private
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new function.
+ */function basePropertyDeep(path){var pathKey=path+"";path=toPath(path);return function(object){return baseGet(object,path,pathKey)}}
+/**
+ * The base implementation of `_.pullAt` without support for individual
+ * index arguments and capturing the removed elements.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {number[]} indexes The indexes of elements to remove.
+ * @returns {Array} Returns `array`.
+ */function basePullAt(array,indexes){var length=array?indexes.length:0;while(length--){var index=indexes[length];if(index!=previous&&isIndex(index)){var previous=index;splice.call(array,index,1)}}return array}
+/**
+ * The base implementation of `_.random` without support for argument juggling
+ * and returning floating-point numbers.
+ *
+ * @private
+ * @param {number} min The minimum possible value.
+ * @param {number} max The maximum possible value.
+ * @returns {number} Returns the random number.
+ */function baseRandom(min,max){return min+nativeFloor(nativeRandom()*(max-min+1))}
+/**
+ * The base implementation of `_.reduce` and `_.reduceRight` without support
+ * for callback shorthands and `this` binding, which iterates over `collection`
+ * using the provided `eachFunc`.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} accumulator The initial value.
+ * @param {boolean} initFromCollection Specify using the first or last element
+ * of `collection` as the initial value.
+ * @param {Function} eachFunc The function to iterate over `collection`.
+ * @returns {*} Returns the accumulated value.
+ */function baseReduce(collection,iteratee,accumulator,initFromCollection,eachFunc){eachFunc(collection,function(value,index,collection){accumulator=initFromCollection?(initFromCollection=false,value):iteratee(accumulator,value,index,collection)});return accumulator}
+/**
+ * The base implementation of `setData` without support for hot loop detection.
+ *
+ * @private
+ * @param {Function} func The function to associate metadata with.
+ * @param {*} data The metadata.
+ * @returns {Function} Returns `func`.
+ */var baseSetData=!metaMap?identity:function(func,data){metaMap.set(func,data);return func};
+/**
+ * The base implementation of `_.slice` without an iteratee call guard.
+ *
+ * @private
+ * @param {Array} array The array to slice.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the slice of `array`.
+ */function baseSlice(array,start,end){var index=-1,length=array.length;start=start==null?0:+start||0;if(start<0){start=-start>length?0:length+start}end=end===undefined||end>length?length:+end||0;if(end<0){end+=length}length=start>end?0:end-start>>>0;start>>>=0;var result=Array(length);while(++index<length){result[index]=array[index+start]}return result}
+/**
+ * The base implementation of `_.some` without support for callback shorthands
+ * and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ */function baseSome(collection,predicate){var result;baseEach(collection,function(value,index,collection){result=predicate(value,index,collection);return!result});return!!result}
+/**
+ * The base implementation of `_.sortBy` which uses `comparer` to define
+ * the sort order of `array` and replaces criteria objects with their
+ * corresponding values.
+ *
+ * @private
+ * @param {Array} array The array to sort.
+ * @param {Function} comparer The function to define sort order.
+ * @returns {Array} Returns `array`.
+ */function baseSortBy(array,comparer){var length=array.length;array.sort(comparer);while(length--){array[length]=array[length].value}return array}
+/**
+ * The base implementation of `_.sortByOrder` without param guards.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
+ * @param {boolean[]} orders The sort orders of `iteratees`.
+ * @returns {Array} Returns the new sorted array.
+ */function baseSortByOrder(collection,iteratees,orders){var callback=getCallback(),index=-1;iteratees=arrayMap(iteratees,function(iteratee){return callback(iteratee)});var result=baseMap(collection,function(value){var criteria=arrayMap(iteratees,function(iteratee){return iteratee(value)});return{criteria:criteria,index:++index,value:value}});return baseSortBy(result,function(object,other){return compareMultiple(object,other,orders)})}
+/**
+ * The base implementation of `_.sum` without support for callback shorthands
+ * and `this` binding.
+ *
+ * @private
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {number} Returns the sum.
+ */function baseSum(collection,iteratee){var result=0;baseEach(collection,function(value,index,collection){result+=+iteratee(value,index,collection)||0});return result}
+/**
+ * The base implementation of `_.uniq` without support for callback shorthands
+ * and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {Function} [iteratee] The function invoked per iteration.
+ * @returns {Array} Returns the new duplicate-value-free array.
+ */function baseUniq(array,iteratee){var index=-1,indexOf=getIndexOf(),length=array.length,isCommon=indexOf==baseIndexOf,isLarge=isCommon&&length>=LARGE_ARRAY_SIZE,seen=isLarge?createCache():null,result=[];if(seen){indexOf=cacheIndexOf;isCommon=false}else{isLarge=false;seen=iteratee?[]:result}outer:while(++index<length){var value=array[index],computed=iteratee?iteratee(value,index,array):value;if(isCommon&&value===value){var seenIndex=seen.length;while(seenIndex--){if(seen[seenIndex]===computed){continue outer}}if(iteratee){seen.push(computed)}result.push(value)}else if(indexOf(seen,computed,0)<0){if(iteratee||isLarge){seen.push(computed)}result.push(value)}}return result}
+/**
+ * The base implementation of `_.values` and `_.valuesIn` which creates an
+ * array of `object` property values corresponding to the property names
+ * of `props`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array} props The property names to get values for.
+ * @returns {Object} Returns the array of property values.
+ */function baseValues(object,props){var index=-1,length=props.length,result=Array(length);while(++index<length){result[index]=object[props[index]]}return result}
+/**
+ * The base implementation of `_.dropRightWhile`, `_.dropWhile`, `_.takeRightWhile`,
+ * and `_.takeWhile` without support for callback shorthands and `this` binding.
+ *
+ * @private
+ * @param {Array} array The array to query.
+ * @param {Function} predicate The function invoked per iteration.
+ * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Array} Returns the slice of `array`.
+ */function baseWhile(array,predicate,isDrop,fromRight){var length=array.length,index=fromRight?length:-1;while((fromRight?index--:++index<length)&&predicate(array[index],index,array)){}return isDrop?baseSlice(array,fromRight?0:index,fromRight?index+1:length):baseSlice(array,fromRight?index+1:0,fromRight?length:index)}
+/**
+ * The base implementation of `wrapperValue` which returns the result of
+ * performing a sequence of actions on the unwrapped `value`, where each
+ * successive action is supplied the return value of the previous.
+ *
+ * @private
+ * @param {*} value The unwrapped value.
+ * @param {Array} actions Actions to peform to resolve the unwrapped value.
+ * @returns {*} Returns the resolved value.
+ */function baseWrapperValue(value,actions){var result=value;if(result instanceof LazyWrapper){result=result.value()}var index=-1,length=actions.length;while(++index<length){var action=actions[index];result=action.func.apply(action.thisArg,arrayPush([result],action.args))}return result}
+/**
+ * Performs a binary search of `array` to determine the index at which `value`
+ * should be inserted into `array` in order to maintain its sort order.
+ *
+ * @private
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ */function binaryIndex(array,value,retHighest){var low=0,high=array?array.length:low;if(typeof value=="number"&&value===value&&high<=HALF_MAX_ARRAY_LENGTH){while(low<high){var mid=low+high>>>1,computed=array[mid];if((retHighest?computed<=value:computed<value)&&computed!==null){low=mid+1}else{high=mid}}return high}return binaryIndexBy(array,value,identity,retHighest)}
+/**
+ * This function is like `binaryIndex` except that it invokes `iteratee` for
+ * `value` and each element of `array` to compute their sort ranking. The
+ * iteratee is invoked with one argument; (value).
+ *
+ * @private
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ */function binaryIndexBy(array,value,iteratee,retHighest){value=iteratee(value);var low=0,high=array?array.length:0,valIsNaN=value!==value,valIsNull=value===null,valIsUndef=value===undefined;while(low<high){var mid=nativeFloor((low+high)/2),computed=iteratee(array[mid]),isDef=computed!==undefined,isReflexive=computed===computed;if(valIsNaN){var setLow=isReflexive||retHighest}else if(valIsNull){setLow=isReflexive&&isDef&&(retHighest||computed!=null)}else if(valIsUndef){setLow=isReflexive&&(retHighest||isDef)}else if(computed==null){setLow=false}else{setLow=retHighest?computed<=value:computed<value}if(setLow){low=mid+1}else{high=mid}}return nativeMin(high,MAX_ARRAY_INDEX)}
+/**
+ * A specialized version of `baseCallback` which only supports `this` binding
+ * and specifying the number of arguments to provide to `func`.
+ *
+ * @private
+ * @param {Function} func The function to bind.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {number} [argCount] The number of arguments to provide to `func`.
+ * @returns {Function} Returns the callback.
+ */function bindCallback(func,thisArg,argCount){if(typeof func!="function"){return identity}if(thisArg===undefined){return func}switch(argCount){case 1:return function(value){return func.call(thisArg,value)};case 3:return function(value,index,collection){return func.call(thisArg,value,index,collection)};case 4:return function(accumulator,value,index,collection){return func.call(thisArg,accumulator,value,index,collection)};case 5:return function(value,other,key,object,source){return func.call(thisArg,value,other,key,object,source)}}return function(){return func.apply(thisArg,arguments)}}
+/**
+ * Creates a clone of the given array buffer.
+ *
+ * @private
+ * @param {ArrayBuffer} buffer The array buffer to clone.
+ * @returns {ArrayBuffer} Returns the cloned array buffer.
+ */function bufferClone(buffer){var result=new ArrayBuffer(buffer.byteLength),view=new Uint8Array(result);view.set(new Uint8Array(buffer));return result}
+/**
+ * Creates an array that is the composition of partially applied arguments,
+ * placeholders, and provided arguments into a single array of arguments.
+ *
+ * @private
+ * @param {Array|Object} args The provided arguments.
+ * @param {Array} partials The arguments to prepend to those provided.
+ * @param {Array} holders The `partials` placeholder indexes.
+ * @returns {Array} Returns the new array of composed arguments.
+ */function composeArgs(args,partials,holders){var holdersLength=holders.length,argsIndex=-1,argsLength=nativeMax(args.length-holdersLength,0),leftIndex=-1,leftLength=partials.length,result=Array(leftLength+argsLength);while(++leftIndex<leftLength){result[leftIndex]=partials[leftIndex]}while(++argsIndex<holdersLength){result[holders[argsIndex]]=args[argsIndex]}while(argsLength--){result[leftIndex++]=args[argsIndex++]}return result}
+/**
+ * This function is like `composeArgs` except that the arguments composition
+ * is tailored for `_.partialRight`.
+ *
+ * @private
+ * @param {Array|Object} args The provided arguments.
+ * @param {Array} partials The arguments to append to those provided.
+ * @param {Array} holders The `partials` placeholder indexes.
+ * @returns {Array} Returns the new array of composed arguments.
+ */function composeArgsRight(args,partials,holders){var holdersIndex=-1,holdersLength=holders.length,argsIndex=-1,argsLength=nativeMax(args.length-holdersLength,0),rightIndex=-1,rightLength=partials.length,result=Array(argsLength+rightLength);while(++argsIndex<argsLength){result[argsIndex]=args[argsIndex]}var offset=argsIndex;while(++rightIndex<rightLength){result[offset+rightIndex]=partials[rightIndex]}while(++holdersIndex<holdersLength){result[offset+holders[holdersIndex]]=args[argsIndex++]}return result}
+/**
+ * Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function.
+ *
+ * @private
+ * @param {Function} setter The function to set keys and values of the accumulator object.
+ * @param {Function} [initializer] The function to initialize the accumulator object.
+ * @returns {Function} Returns the new aggregator function.
+ */function createAggregator(setter,initializer){return function(collection,iteratee,thisArg){var result=initializer?initializer():{};iteratee=getCallback(iteratee,thisArg,3);if(isArray(collection)){var index=-1,length=collection.length;while(++index<length){var value=collection[index];setter(result,value,iteratee(value,index,collection),collection)}}else{baseEach(collection,function(value,key,collection){setter(result,value,iteratee(value,key,collection),collection)})}return result}}
+/**
+ * Creates a `_.assign`, `_.defaults`, or `_.merge` function.
+ *
+ * @private
+ * @param {Function} assigner The function to assign values.
+ * @returns {Function} Returns the new assigner function.
+ */function createAssigner(assigner){return restParam(function(object,sources){var index=-1,length=object==null?0:sources.length,customizer=length>2?sources[length-2]:undefined,guard=length>2?sources[2]:undefined,thisArg=length>1?sources[length-1]:undefined;if(typeof customizer=="function"){customizer=bindCallback(customizer,thisArg,5);length-=2}else{customizer=typeof thisArg=="function"?thisArg:undefined;length-=customizer?1:0}if(guard&&isIterateeCall(sources[0],sources[1],guard)){customizer=length<3?undefined:customizer;length=1}while(++index<length){var source=sources[index];if(source){assigner(object,source,customizer)}}return object})}
+/**
+ * Creates a `baseEach` or `baseEachRight` function.
+ *
+ * @private
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */function createBaseEach(eachFunc,fromRight){return function(collection,iteratee){var length=collection?getLength(collection):0;if(!isLength(length)){return eachFunc(collection,iteratee)}var index=fromRight?length:-1,iterable=toObject(collection);while(fromRight?index--:++index<length){if(iteratee(iterable[index],index,iterable)===false){break}}return collection}}
+/**
+ * Creates a base function for `_.forIn` or `_.forInRight`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new base function.
+ */function createBaseFor(fromRight){return function(object,iteratee,keysFunc){var iterable=toObject(object),props=keysFunc(object),length=props.length,index=fromRight?length:-1;while(fromRight?index--:++index<length){var key=props[index];if(iteratee(iterable[key],key,iterable)===false){break}}return object}}
+/**
+ * Creates a function that wraps `func` and invokes it with the `this`
+ * binding of `thisArg`.
+ *
+ * @private
+ * @param {Function} func The function to bind.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @returns {Function} Returns the new bound function.
+ */function createBindWrapper(func,thisArg){var Ctor=createCtorWrapper(func);function wrapper(){var fn=this&&this!==root&&this instanceof wrapper?Ctor:func;return fn.apply(thisArg,arguments)}return wrapper}
+/**
+ * Creates a `Set` cache object to optimize linear searches of large arrays.
+ *
+ * @private
+ * @param {Array} [values] The values to cache.
+ * @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`.
+ */function createCache(values){return nativeCreate&&Set?new SetCache(values):null}
+/**
+ * Creates a function that produces compound words out of the words in a
+ * given string.
+ *
+ * @private
+ * @param {Function} callback The function to combine each word.
+ * @returns {Function} Returns the new compounder function.
+ */function createCompounder(callback){return function(string){var index=-1,array=words(deburr(string)),length=array.length,result="";while(++index<length){result=callback(result,array[index],index)}return result}}
+/**
+ * Creates a function that produces an instance of `Ctor` regardless of
+ * whether it was invoked as part of a `new` expression or by `call` or `apply`.
+ *
+ * @private
+ * @param {Function} Ctor The constructor to wrap.
+ * @returns {Function} Returns the new wrapped function.
+ */function createCtorWrapper(Ctor){return function(){
+// Use a `switch` statement to work with class constructors.
+// See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
+// for more details.
+var args=arguments;switch(args.length){case 0:return new Ctor;case 1:return new Ctor(args[0]);case 2:return new Ctor(args[0],args[1]);case 3:return new Ctor(args[0],args[1],args[2]);case 4:return new Ctor(args[0],args[1],args[2],args[3]);case 5:return new Ctor(args[0],args[1],args[2],args[3],args[4]);case 6:return new Ctor(args[0],args[1],args[2],args[3],args[4],args[5]);case 7:return new Ctor(args[0],args[1],args[2],args[3],args[4],args[5],args[6])}var thisBinding=baseCreate(Ctor.prototype),result=Ctor.apply(thisBinding,args);
+// Mimic the constructor's `return` behavior.
+// See https://es5.github.io/#x13.2.2 for more details.
+return isObject(result)?result:thisBinding}}
+/**
+ * Creates a `_.curry` or `_.curryRight` function.
+ *
+ * @private
+ * @param {boolean} flag The curry bit flag.
+ * @returns {Function} Returns the new curry function.
+ */function createCurry(flag){function curryFunc(func,arity,guard){if(guard&&isIterateeCall(func,arity,guard)){arity=undefined}var result=createWrapper(func,flag,undefined,undefined,undefined,undefined,undefined,arity);result.placeholder=curryFunc.placeholder;return result}return curryFunc}
+/**
+ * Creates a `_.defaults` or `_.defaultsDeep` function.
+ *
+ * @private
+ * @param {Function} assigner The function to assign values.
+ * @param {Function} customizer The function to customize assigned values.
+ * @returns {Function} Returns the new defaults function.
+ */function createDefaults(assigner,customizer){return restParam(function(args){var object=args[0];if(object==null){return object}args.push(customizer);return assigner.apply(undefined,args)})}
+/**
+ * Creates a `_.max` or `_.min` function.
+ *
+ * @private
+ * @param {Function} comparator The function used to compare values.
+ * @param {*} exValue The initial extremum value.
+ * @returns {Function} Returns the new extremum function.
+ */function createExtremum(comparator,exValue){return function(collection,iteratee,thisArg){if(thisArg&&isIterateeCall(collection,iteratee,thisArg)){iteratee=undefined}iteratee=getCallback(iteratee,thisArg,3);if(iteratee.length==1){collection=isArray(collection)?collection:toIterable(collection);var result=arrayExtremum(collection,iteratee,comparator,exValue);if(!(collection.length&&result===exValue)){return result}}return baseExtremum(collection,iteratee,comparator,exValue)}}
+/**
+ * Creates a `_.find` or `_.findLast` function.
+ *
+ * @private
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new find function.
+ */function createFind(eachFunc,fromRight){return function(collection,predicate,thisArg){predicate=getCallback(predicate,thisArg,3);if(isArray(collection)){var index=baseFindIndex(collection,predicate,fromRight);return index>-1?collection[index]:undefined}return baseFind(collection,predicate,eachFunc)}}
+/**
+ * Creates a `_.findIndex` or `_.findLastIndex` function.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new find function.
+ */function createFindIndex(fromRight){return function(array,predicate,thisArg){if(!(array&&array.length)){return-1}predicate=getCallback(predicate,thisArg,3);return baseFindIndex(array,predicate,fromRight)}}
+/**
+ * Creates a `_.findKey` or `_.findLastKey` function.
+ *
+ * @private
+ * @param {Function} objectFunc The function to iterate over an object.
+ * @returns {Function} Returns the new find function.
+ */function createFindKey(objectFunc){return function(object,predicate,thisArg){predicate=getCallback(predicate,thisArg,3);return baseFind(object,predicate,objectFunc,true)}}
+/**
+ * Creates a `_.flow` or `_.flowRight` function.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify iterating from right to left.
+ * @returns {Function} Returns the new flow function.
+ */function createFlow(fromRight){return function(){var wrapper,length=arguments.length,index=fromRight?length:-1,leftIndex=0,funcs=Array(length);while(fromRight?index--:++index<length){var func=funcs[leftIndex++]=arguments[index];if(typeof func!="function"){throw new TypeError(FUNC_ERROR_TEXT)}if(!wrapper&&LodashWrapper.prototype.thru&&getFuncName(func)=="wrapper"){wrapper=new LodashWrapper([],true)}}index=wrapper?-1:length;while(++index<length){func=funcs[index];var funcName=getFuncName(func),data=funcName=="wrapper"?getData(func):undefined;if(data&&isLaziable(data[0])&&data[1]==(ARY_FLAG|CURRY_FLAG|PARTIAL_FLAG|REARG_FLAG)&&!data[4].length&&data[9]==1){wrapper=wrapper[getFuncName(data[0])].apply(wrapper,data[3])}else{wrapper=func.length==1&&isLaziable(func)?wrapper[funcName]():wrapper.thru(func)}}return function(){var args=arguments,value=args[0];if(wrapper&&args.length==1&&isArray(value)&&value.length>=LARGE_ARRAY_SIZE){return wrapper.plant(value).value()}var index=0,result=length?funcs[index].apply(this,args):value;while(++index<length){result=funcs[index].call(this,result)}return result}}}
+/**
+ * Creates a function for `_.forEach` or `_.forEachRight`.
+ *
+ * @private
+ * @param {Function} arrayFunc The function to iterate over an array.
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @returns {Function} Returns the new each function.
+ */function createForEach(arrayFunc,eachFunc){return function(collection,iteratee,thisArg){return typeof iteratee=="function"&&thisArg===undefined&&isArray(collection)?arrayFunc(collection,iteratee):eachFunc(collection,bindCallback(iteratee,thisArg,3))}}
+/**
+ * Creates a function for `_.forIn` or `_.forInRight`.
+ *
+ * @private
+ * @param {Function} objectFunc The function to iterate over an object.
+ * @returns {Function} Returns the new each function.
+ */function createForIn(objectFunc){return function(object,iteratee,thisArg){if(typeof iteratee!="function"||thisArg!==undefined){iteratee=bindCallback(iteratee,thisArg,3)}return objectFunc(object,iteratee,keysIn)}}
+/**
+ * Creates a function for `_.forOwn` or `_.forOwnRight`.
+ *
+ * @private
+ * @param {Function} objectFunc The function to iterate over an object.
+ * @returns {Function} Returns the new each function.
+ */function createForOwn(objectFunc){return function(object,iteratee,thisArg){if(typeof iteratee!="function"||thisArg!==undefined){iteratee=bindCallback(iteratee,thisArg,3)}return objectFunc(object,iteratee)}}
+/**
+ * Creates a function for `_.mapKeys` or `_.mapValues`.
+ *
+ * @private
+ * @param {boolean} [isMapKeys] Specify mapping keys instead of values.
+ * @returns {Function} Returns the new map function.
+ */function createObjectMapper(isMapKeys){return function(object,iteratee,thisArg){var result={};iteratee=getCallback(iteratee,thisArg,3);baseForOwn(object,function(value,key,object){var mapped=iteratee(value,key,object);key=isMapKeys?mapped:key;value=isMapKeys?value:mapped;result[key]=value});return result}}
+/**
+ * Creates a function for `_.padLeft` or `_.padRight`.
+ *
+ * @private
+ * @param {boolean} [fromRight] Specify padding from the right.
+ * @returns {Function} Returns the new pad function.
+ */function createPadDir(fromRight){return function(string,length,chars){string=baseToString(string);return(fromRight?string:"")+createPadding(string,length,chars)+(fromRight?"":string)}}
+/**
+ * Creates a `_.partial` or `_.partialRight` function.
+ *
+ * @private
+ * @param {boolean} flag The partial bit flag.
+ * @returns {Function} Returns the new partial function.
+ */function createPartial(flag){var partialFunc=restParam(function(func,partials){var holders=replaceHolders(partials,partialFunc.placeholder);return createWrapper(func,flag,undefined,partials,holders)});return partialFunc}
+/**
+ * Creates a function for `_.reduce` or `_.reduceRight`.
+ *
+ * @private
+ * @param {Function} arrayFunc The function to iterate over an array.
+ * @param {Function} eachFunc The function to iterate over a collection.
+ * @returns {Function} Returns the new each function.
+ */function createReduce(arrayFunc,eachFunc){return function(collection,iteratee,accumulator,thisArg){var initFromArray=arguments.length<3;return typeof iteratee=="function"&&thisArg===undefined&&isArray(collection)?arrayFunc(collection,iteratee,accumulator,initFromArray):baseReduce(collection,getCallback(iteratee,thisArg,4),accumulator,initFromArray,eachFunc)}}
+/**
+ * Creates a function that wraps `func` and invokes it with optional `this`
+ * binding of, partial application, and currying.
+ *
+ * @private
+ * @param {Function|string} func The function or method name to reference.
+ * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {Array} [partials] The arguments to prepend to those provided to the new function.
+ * @param {Array} [holders] The `partials` placeholder indexes.
+ * @param {Array} [partialsRight] The arguments to append to those provided to the new function.
+ * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
+ * @param {Array} [argPos] The argument positions of the new function.
+ * @param {number} [ary] The arity cap of `func`.
+ * @param {number} [arity] The arity of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */function createHybridWrapper(func,bitmask,thisArg,partials,holders,partialsRight,holdersRight,argPos,ary,arity){var isAry=bitmask&ARY_FLAG,isBind=bitmask&BIND_FLAG,isBindKey=bitmask&BIND_KEY_FLAG,isCurry=bitmask&CURRY_FLAG,isCurryBound=bitmask&CURRY_BOUND_FLAG,isCurryRight=bitmask&CURRY_RIGHT_FLAG,Ctor=isBindKey?undefined:createCtorWrapper(func);function wrapper(){
+// Avoid `arguments` object use disqualifying optimizations by
+// converting it to an array before providing it to other functions.
+var length=arguments.length,index=length,args=Array(length);while(index--){args[index]=arguments[index]}if(partials){args=composeArgs(args,partials,holders)}if(partialsRight){args=composeArgsRight(args,partialsRight,holdersRight)}if(isCurry||isCurryRight){var placeholder=wrapper.placeholder,argsHolders=replaceHolders(args,placeholder);length-=argsHolders.length;if(length<arity){var newArgPos=argPos?arrayCopy(argPos):undefined,newArity=nativeMax(arity-length,0),newsHolders=isCurry?argsHolders:undefined,newHoldersRight=isCurry?undefined:argsHolders,newPartials=isCurry?args:undefined,newPartialsRight=isCurry?undefined:args;bitmask|=isCurry?PARTIAL_FLAG:PARTIAL_RIGHT_FLAG;bitmask&=~(isCurry?PARTIAL_RIGHT_FLAG:PARTIAL_FLAG);if(!isCurryBound){bitmask&=~(BIND_FLAG|BIND_KEY_FLAG)}var newData=[func,bitmask,thisArg,newPartials,newsHolders,newPartialsRight,newHoldersRight,newArgPos,ary,newArity],result=createHybridWrapper.apply(undefined,newData);if(isLaziable(func)){setData(result,newData)}result.placeholder=placeholder;return result}}var thisBinding=isBind?thisArg:this,fn=isBindKey?thisBinding[func]:func;if(argPos){args=reorder(args,argPos)}if(isAry&&ary<args.length){args.length=ary}if(this&&this!==root&&this instanceof wrapper){fn=Ctor||createCtorWrapper(func)}return fn.apply(thisBinding,args)}return wrapper}
+/**
+ * Creates the padding required for `string` based on the given `length`.
+ * The `chars` string is truncated if the number of characters exceeds `length`.
+ *
+ * @private
+ * @param {string} string The string to create padding for.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the pad for `string`.
+ */function createPadding(string,length,chars){var strLength=string.length;length=+length;if(strLength>=length||!nativeIsFinite(length)){return""}var padLength=length-strLength;chars=chars==null?" ":chars+"";return repeat(chars,nativeCeil(padLength/chars.length)).slice(0,padLength)}
+/**
+ * Creates a function that wraps `func` and invokes it with the optional `this`
+ * binding of `thisArg` and the `partials` prepended to those provided to
+ * the wrapper.
+ *
+ * @private
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {number} bitmask The bitmask of flags. See `createWrapper` for more details.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {Array} partials The arguments to prepend to those provided to the new function.
+ * @returns {Function} Returns the new bound function.
+ */function createPartialWrapper(func,bitmask,thisArg,partials){var isBind=bitmask&BIND_FLAG,Ctor=createCtorWrapper(func);function wrapper(){
+// Avoid `arguments` object use disqualifying optimizations by
+// converting it to an array before providing it `func`.
+var argsIndex=-1,argsLength=arguments.length,leftIndex=-1,leftLength=partials.length,args=Array(leftLength+argsLength);while(++leftIndex<leftLength){args[leftIndex]=partials[leftIndex]}while(argsLength--){args[leftIndex++]=arguments[++argsIndex]}var fn=this&&this!==root&&this instanceof wrapper?Ctor:func;return fn.apply(isBind?thisArg:this,args)}return wrapper}
+/**
+ * Creates a `_.ceil`, `_.floor`, or `_.round` function.
+ *
+ * @private
+ * @param {string} methodName The name of the `Math` method to use when rounding.
+ * @returns {Function} Returns the new round function.
+ */function createRound(methodName){var func=Math[methodName];return function(number,precision){precision=precision===undefined?0:+precision||0;if(precision){precision=pow(10,precision);return func(number*precision)/precision}return func(number)}}
+/**
+ * Creates a `_.sortedIndex` or `_.sortedLastIndex` function.
+ *
+ * @private
+ * @param {boolean} [retHighest] Specify returning the highest qualified index.
+ * @returns {Function} Returns the new index function.
+ */function createSortedIndex(retHighest){return function(array,value,iteratee,thisArg){var callback=getCallback(iteratee);return iteratee==null&&callback===baseCallback?binaryIndex(array,value,retHighest):binaryIndexBy(array,value,callback(iteratee,thisArg,1),retHighest)}}
+/**
+ * Creates a function that either curries or invokes `func` with optional
+ * `this` binding and partially applied arguments.
+ *
+ * @private
+ * @param {Function|string} func The function or method name to reference.
+ * @param {number} bitmask The bitmask of flags.
+ * The bitmask may be composed of the following flags:
+ * 1 - `_.bind`
+ * 2 - `_.bindKey`
+ * 4 - `_.curry` or `_.curryRight` of a bound function
+ * 8 - `_.curry`
+ * 16 - `_.curryRight`
+ * 32 - `_.partial`
+ * 64 - `_.partialRight`
+ * 128 - `_.rearg`
+ * 256 - `_.ary`
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param {Array} [partials] The arguments to be partially applied.
+ * @param {Array} [holders] The `partials` placeholder indexes.
+ * @param {Array} [argPos] The argument positions of the new function.
+ * @param {number} [ary] The arity cap of `func`.
+ * @param {number} [arity] The arity of `func`.
+ * @returns {Function} Returns the new wrapped function.
+ */function createWrapper(func,bitmask,thisArg,partials,holders,argPos,ary,arity){var isBindKey=bitmask&BIND_KEY_FLAG;if(!isBindKey&&typeof func!="function"){throw new TypeError(FUNC_ERROR_TEXT)}var length=partials?partials.length:0;if(!length){bitmask&=~(PARTIAL_FLAG|PARTIAL_RIGHT_FLAG);partials=holders=undefined}length-=holders?holders.length:0;if(bitmask&PARTIAL_RIGHT_FLAG){var partialsRight=partials,holdersRight=holders;partials=holders=undefined}var data=isBindKey?undefined:getData(func),newData=[func,bitmask,thisArg,partials,holders,partialsRight,holdersRight,argPos,ary,arity];if(data){mergeData(newData,data);bitmask=newData[1];arity=newData[9]}newData[9]=arity==null?isBindKey?0:func.length:nativeMax(arity-length,0)||0;if(bitmask==BIND_FLAG){var result=createBindWrapper(newData[0],newData[2])}else if((bitmask==PARTIAL_FLAG||bitmask==(BIND_FLAG|PARTIAL_FLAG))&&!newData[4].length){result=createPartialWrapper.apply(undefined,newData)}else{result=createHybridWrapper.apply(undefined,newData)}var setter=data?baseSetData:setData;return setter(result,newData)}
+/**
+ * A specialized version of `baseIsEqualDeep` for arrays with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Array} array The array to compare.
+ * @param {Array} other The other array to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparing arrays.
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
+ * @param {Array} [stackA] Tracks traversed `value` objects.
+ * @param {Array} [stackB] Tracks traversed `other` objects.
+ * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
+ */function equalArrays(array,other,equalFunc,customizer,isLoose,stackA,stackB){var index=-1,arrLength=array.length,othLength=other.length;if(arrLength!=othLength&&!(isLoose&&othLength>arrLength)){return false}
+// Ignore non-index properties.
+while(++index<arrLength){var arrValue=array[index],othValue=other[index],result=customizer?customizer(isLoose?othValue:arrValue,isLoose?arrValue:othValue,index):undefined;if(result!==undefined){if(result){continue}return false}
+// Recursively compare arrays (susceptible to call stack limits).
+if(isLoose){if(!arraySome(other,function(othValue){return arrValue===othValue||equalFunc(arrValue,othValue,customizer,isLoose,stackA,stackB)})){return false}}else if(!(arrValue===othValue||equalFunc(arrValue,othValue,customizer,isLoose,stackA,stackB))){return false}}return true}
+/**
+ * A specialized version of `baseIsEqualDeep` for comparing objects of
+ * the same `toStringTag`.
+ *
+ * **Note:** This function only supports comparing values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {string} tag The `toStringTag` of the objects to compare.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */function equalByTag(object,other,tag){switch(tag){case boolTag:case dateTag:
+// Coerce dates and booleans to numbers, dates to milliseconds and booleans
+// to `1` or `0` treating invalid dates coerced to `NaN` as not equal.
+return+object==+other;case errorTag:return object.name==other.name&&object.message==other.message;case numberTag:
+// Treat `NaN` vs. `NaN` as equal.
+return object!=+object?other!=+other:object==+other;case regexpTag:case stringTag:
+// Coerce regexes to strings and treat strings primitives and string
+// objects as equal. See https://es5.github.io/#x15.10.6.4 for more details.
+return object==other+""}return false}
+/**
+ * A specialized version of `baseIsEqualDeep` for objects with support for
+ * partial deep comparisons.
+ *
+ * @private
+ * @param {Object} object The object to compare.
+ * @param {Object} other The other object to compare.
+ * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {Function} [customizer] The function to customize comparing values.
+ * @param {boolean} [isLoose] Specify performing partial comparisons.
+ * @param {Array} [stackA] Tracks traversed `value` objects.
+ * @param {Array} [stackB] Tracks traversed `other` objects.
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
+ */function equalObjects(object,other,equalFunc,customizer,isLoose,stackA,stackB){var objProps=keys(object),objLength=objProps.length,othProps=keys(other),othLength=othProps.length;if(objLength!=othLength&&!isLoose){return false}var index=objLength;while(index--){var key=objProps[index];if(!(isLoose?key in other:hasOwnProperty.call(other,key))){return false}}var skipCtor=isLoose;while(++index<objLength){key=objProps[index];var objValue=object[key],othValue=other[key],result=customizer?customizer(isLoose?othValue:objValue,isLoose?objValue:othValue,key):undefined;
+// Recursively compare objects (susceptible to call stack limits).
+if(!(result===undefined?equalFunc(objValue,othValue,customizer,isLoose,stackA,stackB):result)){return false}skipCtor||(skipCtor=key=="constructor")}if(!skipCtor){var objCtor=object.constructor,othCtor=other.constructor;
+// Non `Object` object instances with different constructors are not equal.
+if(objCtor!=othCtor&&("constructor"in object&&"constructor"in other)&&!(typeof objCtor=="function"&&objCtor instanceof objCtor&&typeof othCtor=="function"&&othCtor instanceof othCtor)){return false}}return true}
+/**
+ * Gets the appropriate "callback" function. If the `_.callback` method is
+ * customized this function returns the custom method, otherwise it returns
+ * the `baseCallback` function. If arguments are provided the chosen function
+ * is invoked with them and its result is returned.
+ *
+ * @private
+ * @returns {Function} Returns the chosen function or its result.
+ */function getCallback(func,thisArg,argCount){var result=lodash.callback||callback;result=result===callback?baseCallback:result;return argCount?result(func,thisArg,argCount):result}
+/**
+ * Gets metadata for `func`.
+ *
+ * @private
+ * @param {Function} func The function to query.
+ * @returns {*} Returns the metadata for `func`.
+ */var getData=!metaMap?noop:function(func){return metaMap.get(func)};
+/**
+ * Gets the name of `func`.
+ *
+ * @private
+ * @param {Function} func The function to query.
+ * @returns {string} Returns the function name.
+ */function getFuncName(func){var result=func.name,array=realNames[result],length=array?array.length:0;while(length--){var data=array[length],otherFunc=data.func;if(otherFunc==null||otherFunc==func){return data.name}}return result}
+/**
+ * Gets the appropriate "indexOf" function. If the `_.indexOf` method is
+ * customized this function returns the custom method, otherwise it returns
+ * the `baseIndexOf` function. If arguments are provided the chosen function
+ * is invoked with them and its result is returned.
+ *
+ * @private
+ * @returns {Function|number} Returns the chosen function or its result.
+ */function getIndexOf(collection,target,fromIndex){var result=lodash.indexOf||indexOf;result=result===indexOf?baseIndexOf:result;return collection?result(collection,target,fromIndex):result}
+/**
+ * Gets the "length" property value of `object`.
+ *
+ * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792)
+ * that affects Safari on at least iOS 8.1-8.3 ARM64.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {*} Returns the "length" value.
+ */var getLength=baseProperty("length");
+/**
+ * Gets the propery names, values, and compare flags of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the match data of `object`.
+ */function getMatchData(object){var result=pairs(object),length=result.length;while(length--){result[length][2]=isStrictComparable(result[length][1])}return result}
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */function getNative(object,key){var value=object==null?undefined:object[key];return isNative(value)?value:undefined}
+/**
+ * Gets the view, applying any `transforms` to the `start` and `end` positions.
+ *
+ * @private
+ * @param {number} start The start of the view.
+ * @param {number} end The end of the view.
+ * @param {Array} transforms The transformations to apply to the view.
+ * @returns {Object} Returns an object containing the `start` and `end`
+ * positions of the view.
+ */function getView(start,end,transforms){var index=-1,length=transforms.length;while(++index<length){var data=transforms[index],size=data.size;switch(data.type){case"drop":start+=size;break;case"dropRight":end-=size;break;case"take":end=nativeMin(end,start+size);break;case"takeRight":start=nativeMax(start,end-size);break}}return{start:start,end:end}}
+/**
+ * Initializes an array clone.
+ *
+ * @private
+ * @param {Array} array The array to clone.
+ * @returns {Array} Returns the initialized clone.
+ */function initCloneArray(array){var length=array.length,result=new array.constructor(length);
+// Add array properties assigned by `RegExp#exec`.
+if(length&&typeof array[0]=="string"&&hasOwnProperty.call(array,"index")){result.index=array.index;result.input=array.input}return result}
+/**
+ * Initializes an object clone.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @returns {Object} Returns the initialized clone.
+ */function initCloneObject(object){var Ctor=object.constructor;if(!(typeof Ctor=="function"&&Ctor instanceof Ctor)){Ctor=Object}return new Ctor}
+/**
+ * Initializes an object clone based on its `toStringTag`.
+ *
+ * **Note:** This function only supports cloning values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @param {string} tag The `toStringTag` of the object to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the initialized clone.
+ */function initCloneByTag(object,tag,isDeep){var Ctor=object.constructor;switch(tag){case arrayBufferTag:return bufferClone(object);case boolTag:case dateTag:return new Ctor(+object);case float32Tag:case float64Tag:case int8Tag:case int16Tag:case int32Tag:case uint8Tag:case uint8ClampedTag:case uint16Tag:case uint32Tag:var buffer=object.buffer;return new Ctor(isDeep?bufferClone(buffer):buffer,object.byteOffset,object.length);case numberTag:case stringTag:return new Ctor(object);case regexpTag:var result=new Ctor(object.source,reFlags.exec(object));result.lastIndex=object.lastIndex}return result}
+/**
+ * Invokes the method at `path` on `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the method to invoke.
+ * @param {Array} args The arguments to invoke the method with.
+ * @returns {*} Returns the result of the invoked method.
+ */function invokePath(object,path,args){if(object!=null&&!isKey(path,object)){path=toPath(path);object=path.length==1?object:baseGet(object,baseSlice(path,0,-1));path=last(path)}var func=object==null?object:object[path];return func==null?undefined:func.apply(object,args)}
+/**
+ * Checks if `value` is array-like.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ */function isArrayLike(value){return value!=null&&isLength(getLength(value))}
+/**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */function isIndex(value,length){value=typeof value=="number"||reIsUint.test(value)?+value:-1;length=length==null?MAX_SAFE_INTEGER:length;return value>-1&&value%1==0&&value<length}
+/**
+ * Checks if the provided arguments are from an iteratee call.
+ *
+ * @private
+ * @param {*} value The potential iteratee value argument.
+ * @param {*} index The potential iteratee index or key argument.
+ * @param {*} object The potential iteratee object argument.
+ * @returns {boolean} Returns `true` if the arguments are from an iteratee call, else `false`.
+ */function isIterateeCall(value,index,object){if(!isObject(object)){return false}var type=typeof index;if(type=="number"?isArrayLike(object)&&isIndex(index,object.length):type=="string"&&index in object){var other=object[index];return value===value?value===other:other!==other}return false}
+/**
+ * Checks if `value` is a property name and not a property path.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {Object} [object] The object to query keys on.
+ * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
+ */function isKey(value,object){var type=typeof value;if(type=="string"&&reIsPlainProp.test(value)||type=="number"){return true}if(isArray(value)){return false}var result=!reIsDeepProp.test(value);return result||object!=null&&value in toObject(object)}
+/**
+ * Checks if `func` has a lazy counterpart.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` has a lazy counterpart, else `false`.
+ */function isLaziable(func){var funcName=getFuncName(func);if(!(funcName in LazyWrapper.prototype)){return false}var other=lodash[funcName];if(func===other){return true}var data=getData(other);return!!data&&func===data[0]}
+/**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ */function isLength(value){return typeof value=="number"&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER}
+/**
+ * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` if suitable for strict
+ * equality comparisons, else `false`.
+ */function isStrictComparable(value){return value===value&&!isObject(value)}
+/**
+ * Merges the function metadata of `source` into `data`.
+ *
+ * Merging metadata reduces the number of wrappers required to invoke a function.
+ * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
+ * may be applied regardless of execution order. Methods like `_.ary` and `_.rearg`
+ * augment function arguments, making the order in which they are executed important,
+ * preventing the merging of metadata. However, we make an exception for a safe
+ * common case where curried functions have `_.ary` and or `_.rearg` applied.
+ *
+ * @private
+ * @param {Array} data The destination metadata.
+ * @param {Array} source The source metadata.
+ * @returns {Array} Returns `data`.
+ */function mergeData(data,source){var bitmask=data[1],srcBitmask=source[1],newBitmask=bitmask|srcBitmask,isCommon=newBitmask<ARY_FLAG;var isCombo=srcBitmask==ARY_FLAG&&bitmask==CURRY_FLAG||srcBitmask==ARY_FLAG&&bitmask==REARG_FLAG&&data[7].length<=source[8]||srcBitmask==(ARY_FLAG|REARG_FLAG)&&bitmask==CURRY_FLAG;
+// Exit early if metadata can't be merged.
+if(!(isCommon||isCombo)){return data}
+// Use source `thisArg` if available.
+if(srcBitmask&BIND_FLAG){data[2]=source[2];
+// Set when currying a bound function.
+newBitmask|=bitmask&BIND_FLAG?0:CURRY_BOUND_FLAG}
+// Compose partial arguments.
+var value=source[3];if(value){var partials=data[3];data[3]=partials?composeArgs(partials,value,source[4]):arrayCopy(value);data[4]=partials?replaceHolders(data[3],PLACEHOLDER):arrayCopy(source[4])}
+// Compose partial right arguments.
+value=source[5];if(value){partials=data[5];data[5]=partials?composeArgsRight(partials,value,source[6]):arrayCopy(value);data[6]=partials?replaceHolders(data[5],PLACEHOLDER):arrayCopy(source[6])}
+// Use source `argPos` if available.
+value=source[7];if(value){data[7]=arrayCopy(value)}
+// Use source `ary` if it's smaller.
+if(srcBitmask&ARY_FLAG){data[8]=data[8]==null?source[8]:nativeMin(data[8],source[8])}
+// Use source `arity` if one is not provided.
+if(data[9]==null){data[9]=source[9]}
+// Use source `func` and merge bitmasks.
+data[0]=source[0];data[1]=newBitmask;return data}
+/**
+ * Used by `_.defaultsDeep` to customize its `_.merge` use.
+ *
+ * @private
+ * @param {*} objectValue The destination object property value.
+ * @param {*} sourceValue The source object property value.
+ * @returns {*} Returns the value to assign to the destination object.
+ */function mergeDefaults(objectValue,sourceValue){return objectValue===undefined?sourceValue:merge(objectValue,sourceValue,mergeDefaults)}
+/**
+ * A specialized version of `_.pick` which picks `object` properties specified
+ * by `props`.
+ *
+ * @private
+ * @param {Object} object The source object.
+ * @param {string[]} props The property names to pick.
+ * @returns {Object} Returns the new object.
+ */function pickByArray(object,props){object=toObject(object);var index=-1,length=props.length,result={};while(++index<length){var key=props[index];if(key in object){result[key]=object[key]}}return result}
+/**
+ * A specialized version of `_.pick` which picks `object` properties `predicate`
+ * returns truthy for.
+ *
+ * @private
+ * @param {Object} object The source object.
+ * @param {Function} predicate The function invoked per iteration.
+ * @returns {Object} Returns the new object.
+ */function pickByCallback(object,predicate){var result={};baseForIn(object,function(value,key,object){if(predicate(value,key,object)){result[key]=value}});return result}
+/**
+ * Reorder `array` according to the specified indexes where the element at
+ * the first index is assigned as the first element, the element at
+ * the second index is assigned as the second element, and so on.
+ *
+ * @private
+ * @param {Array} array The array to reorder.
+ * @param {Array} indexes The arranged array indexes.
+ * @returns {Array} Returns `array`.
+ */function reorder(array,indexes){var arrLength=array.length,length=nativeMin(indexes.length,arrLength),oldArray=arrayCopy(array);while(length--){var index=indexes[length];array[length]=isIndex(index,arrLength)?oldArray[index]:undefined}return array}
+/**
+ * Sets metadata for `func`.
+ *
+ * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
+ * period of time, it will trip its breaker and transition to an identity function
+ * to avoid garbage collection pauses in V8. See [V8 issue 2070](https://code.google.com/p/v8/issues/detail?id=2070)
+ * for more details.
+ *
+ * @private
+ * @param {Function} func The function to associate metadata with.
+ * @param {*} data The metadata.
+ * @returns {Function} Returns `func`.
+ */var setData=function(){var count=0,lastCalled=0;return function(key,value){var stamp=now(),remaining=HOT_SPAN-(stamp-lastCalled);lastCalled=stamp;if(remaining>0){if(++count>=HOT_COUNT){return key}}else{count=0}return baseSetData(key,value)}}();
+/**
+ * A fallback implementation of `Object.keys` which creates an array of the
+ * own enumerable property names of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */function shimKeys(object){var props=keysIn(object),propsLength=props.length,length=propsLength&&object.length;var allowIndexes=!!length&&isLength(length)&&(isArray(object)||isArguments(object));var index=-1,result=[];while(++index<propsLength){var key=props[index];if(allowIndexes&&isIndex(key,length)||hasOwnProperty.call(object,key)){result.push(key)}}return result}
+/**
+ * Converts `value` to an array-like object if it's not one.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {Array|Object} Returns the array-like object.
+ */function toIterable(value){if(value==null){return[]}if(!isArrayLike(value)){return values(value)}return isObject(value)?value:Object(value)}
+/**
+ * Converts `value` to an object if it's not one.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {Object} Returns the object.
+ */function toObject(value){return isObject(value)?value:Object(value)}
+/**
+ * Converts `value` to property path array if it's not one.
+ *
+ * @private
+ * @param {*} value The value to process.
+ * @returns {Array} Returns the property path array.
+ */function toPath(value){if(isArray(value)){return value}var result=[];baseToString(value).replace(rePropName,function(match,number,quote,string){result.push(quote?string.replace(reEscapeChar,"$1"):number||match)});return result}
+/**
+ * Creates a clone of `wrapper`.
+ *
+ * @private
+ * @param {Object} wrapper The wrapper to clone.
+ * @returns {Object} Returns the cloned wrapper.
+ */function wrapperClone(wrapper){return wrapper instanceof LazyWrapper?wrapper.clone():new LodashWrapper(wrapper.__wrapped__,wrapper.__chain__,arrayCopy(wrapper.__actions__))}
+/*------------------------------------------------------------------------*/
+/**
+ * Creates an array of elements split into groups the length of `size`.
+ * If `collection` can't be split evenly, the final chunk will be the remaining
+ * elements.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to process.
+ * @param {number} [size=1] The length of each chunk.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the new array containing chunks.
+ * @example
+ *
+ * _.chunk(['a', 'b', 'c', 'd'], 2);
+ * // => [['a', 'b'], ['c', 'd']]
+ *
+ * _.chunk(['a', 'b', 'c', 'd'], 3);
+ * // => [['a', 'b', 'c'], ['d']]
+ */function chunk(array,size,guard){if(guard?isIterateeCall(array,size,guard):size==null){size=1}else{size=nativeMax(nativeFloor(size)||1,1)}var index=0,length=array?array.length:0,resIndex=-1,result=Array(nativeCeil(length/size));while(index<length){result[++resIndex]=baseSlice(array,index,index+=size)}return result}
+/**
+ * Creates an array with all falsey values removed. The values `false`, `null`,
+ * `0`, `""`, `undefined`, and `NaN` are falsey.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to compact.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.compact([0, 1, false, 2, '', 3]);
+ * // => [1, 2, 3]
+ */function compact(array){var index=-1,length=array?array.length:0,resIndex=-1,result=[];while(++index<length){var value=array[index];if(value){result[++resIndex]=value}}return result}
+/**
+ * Creates an array of unique `array` values not included in the other
+ * provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {...Array} [values] The arrays of values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.difference([1, 2, 3], [4, 2]);
+ * // => [1, 3]
+ */var difference=restParam(function(array,values){return isObjectLike(array)&&isArrayLike(array)?baseDifference(array,baseFlatten(values,false,true)):[]});
+/**
+ * Creates a slice of `array` with `n` elements dropped from the beginning.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to drop.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.drop([1, 2, 3]);
+ * // => [2, 3]
+ *
+ * _.drop([1, 2, 3], 2);
+ * // => [3]
+ *
+ * _.drop([1, 2, 3], 5);
+ * // => []
+ *
+ * _.drop([1, 2, 3], 0);
+ * // => [1, 2, 3]
+ */function drop(array,n,guard){var length=array?array.length:0;if(!length){return[]}if(guard?isIterateeCall(array,n,guard):n==null){n=1}return baseSlice(array,n<0?0:n)}
+/**
+ * Creates a slice of `array` with `n` elements dropped from the end.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to drop.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.dropRight([1, 2, 3]);
+ * // => [1, 2]
+ *
+ * _.dropRight([1, 2, 3], 2);
+ * // => [1]
+ *
+ * _.dropRight([1, 2, 3], 5);
+ * // => []
+ *
+ * _.dropRight([1, 2, 3], 0);
+ * // => [1, 2, 3]
+ */function dropRight(array,n,guard){var length=array?array.length:0;if(!length){return[]}if(guard?isIterateeCall(array,n,guard):n==null){n=1}n=length-(+n||0);return baseSlice(array,0,n<0?0:n)}
+/**
+ * Creates a slice of `array` excluding elements dropped from the end.
+ * Elements are dropped until `predicate` returns falsey. The predicate is
+ * bound to `thisArg` and invoked with three arguments: (value, index, array).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that match the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.dropRightWhile([1, 2, 3], function(n) {
+ * return n > 1;
+ * });
+ * // => [1]
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.pluck(_.dropRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
+ * // => ['barney', 'fred']
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.pluck(_.dropRightWhile(users, 'active', false), 'user');
+ * // => ['barney']
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.dropRightWhile(users, 'active'), 'user');
+ * // => ['barney', 'fred', 'pebbles']
+ */function dropRightWhile(array,predicate,thisArg){return array&&array.length?baseWhile(array,getCallback(predicate,thisArg,3),true,true):[]}
+/**
+ * Creates a slice of `array` excluding elements dropped from the beginning.
+ * Elements are dropped until `predicate` returns falsey. The predicate is
+ * bound to `thisArg` and invoked with three arguments: (value, index, array).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.dropWhile([1, 2, 3], function(n) {
+ * return n < 3;
+ * });
+ * // => [3]
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user');
+ * // => ['fred', 'pebbles']
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.pluck(_.dropWhile(users, 'active', false), 'user');
+ * // => ['pebbles']
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.dropWhile(users, 'active'), 'user');
+ * // => ['barney', 'fred', 'pebbles']
+ */function dropWhile(array,predicate,thisArg){return array&&array.length?baseWhile(array,getCallback(predicate,thisArg,3),true):[]}
+/**
+ * Fills elements of `array` with `value` from `start` up to, but not
+ * including, `end`.
+ *
+ * **Note:** This method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to fill.
+ * @param {*} value The value to fill `array` with.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [1, 2, 3];
+ *
+ * _.fill(array, 'a');
+ * console.log(array);
+ * // => ['a', 'a', 'a']
+ *
+ * _.fill(Array(3), 2);
+ * // => [2, 2, 2]
+ *
+ * _.fill([4, 6, 8], '*', 1, 2);
+ * // => [4, '*', 8]
+ */function fill(array,value,start,end){var length=array?array.length:0;if(!length){return[]}if(start&&typeof start!="number"&&isIterateeCall(array,value,start)){start=0;end=length}return baseFill(array,value,start,end)}
+/**
+ * This method is like `_.find` except that it returns the index of the first
+ * element `predicate` returns truthy for instead of the element itself.
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * _.findIndex(users, function(chr) {
+ * return chr.user == 'barney';
+ * });
+ * // => 0
+ *
+ * // using the `_.matches` callback shorthand
+ * _.findIndex(users, { 'user': 'fred', 'active': false });
+ * // => 1
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.findIndex(users, 'active', false);
+ * // => 0
+ *
+ * // using the `_.property` callback shorthand
+ * _.findIndex(users, 'active');
+ * // => 2
+ */var findIndex=createFindIndex();
+/**
+ * This method is like `_.findIndex` except that it iterates over elements
+ * of `collection` from right to left.
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {number} Returns the index of the found element, else `-1`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * _.findLastIndex(users, function(chr) {
+ * return chr.user == 'pebbles';
+ * });
+ * // => 2
+ *
+ * // using the `_.matches` callback shorthand
+ * _.findLastIndex(users, { 'user': 'barney', 'active': true });
+ * // => 0
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.findLastIndex(users, 'active', false);
+ * // => 2
+ *
+ * // using the `_.property` callback shorthand
+ * _.findLastIndex(users, 'active');
+ * // => 0
+ */var findLastIndex=createFindIndex(true);
+/**
+ * Gets the first element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @alias head
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {*} Returns the first element of `array`.
+ * @example
+ *
+ * _.first([1, 2, 3]);
+ * // => 1
+ *
+ * _.first([]);
+ * // => undefined
+ */function first(array){return array?array[0]:undefined}
+/**
+ * Flattens a nested array. If `isDeep` is `true` the array is recursively
+ * flattened, otherwise it is only flattened a single level.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to flatten.
+ * @param {boolean} [isDeep] Specify a deep flatten.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * _.flatten([1, [2, 3, [4]]]);
+ * // => [1, 2, 3, [4]]
+ *
+ * // using `isDeep`
+ * _.flatten([1, [2, 3, [4]]], true);
+ * // => [1, 2, 3, 4]
+ */function flatten(array,isDeep,guard){var length=array?array.length:0;if(guard&&isIterateeCall(array,isDeep,guard)){isDeep=false}return length?baseFlatten(array,isDeep):[]}
+/**
+ * Recursively flattens a nested array.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to recursively flatten.
+ * @returns {Array} Returns the new flattened array.
+ * @example
+ *
+ * _.flattenDeep([1, [2, 3, [4]]]);
+ * // => [1, 2, 3, 4]
+ */function flattenDeep(array){var length=array?array.length:0;return length?baseFlatten(array,true):[]}
+/**
+ * Gets the index at which the first occurrence of `value` is found in `array`
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons. If `fromIndex` is negative, it is used as the offset
+ * from the end of `array`. If `array` is sorted providing `true` for `fromIndex`
+ * performs a faster binary search.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {boolean|number} [fromIndex=0] The index to search from or `true`
+ * to perform a binary search on a sorted array.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ * @example
+ *
+ * _.indexOf([1, 2, 1, 2], 2);
+ * // => 1
+ *
+ * // using `fromIndex`
+ * _.indexOf([1, 2, 1, 2], 2, 2);
+ * // => 3
+ *
+ * // performing a binary search
+ * _.indexOf([1, 1, 2, 2], 2, true);
+ * // => 2
+ */function indexOf(array,value,fromIndex){var length=array?array.length:0;if(!length){return-1}if(typeof fromIndex=="number"){fromIndex=fromIndex<0?nativeMax(length+fromIndex,0):fromIndex}else if(fromIndex){var index=binaryIndex(array,value);if(index<length&&(value===value?value===array[index]:array[index]!==array[index])){return index}return-1}return baseIndexOf(array,value,fromIndex||0)}
+/**
+ * Gets all but the last element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.initial([1, 2, 3]);
+ * // => [1, 2]
+ */function initial(array){return dropRight(array,1)}
+/**
+ * Creates an array of unique values that are included in all of the provided
+ * arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of shared values.
+ * @example
+ * _.intersection([1, 2], [4, 2], [2, 1]);
+ * // => [2]
+ */var intersection=restParam(function(arrays){var othLength=arrays.length,othIndex=othLength,caches=Array(length),indexOf=getIndexOf(),isCommon=indexOf==baseIndexOf,result=[];while(othIndex--){var value=arrays[othIndex]=isArrayLike(value=arrays[othIndex])?value:[];caches[othIndex]=isCommon&&value.length>=120?createCache(othIndex&&value):null}var array=arrays[0],index=-1,length=array?array.length:0,seen=caches[0];outer:while(++index<length){value=array[index];if((seen?cacheIndexOf(seen,value):indexOf(result,value,0))<0){var othIndex=othLength;while(--othIndex){var cache=caches[othIndex];if((cache?cacheIndexOf(cache,value):indexOf(arrays[othIndex],value,0))<0){continue outer}}if(seen){seen.push(value)}result.push(value)}}return result});
+/**
+ * Gets the last element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {*} Returns the last element of `array`.
+ * @example
+ *
+ * _.last([1, 2, 3]);
+ * // => 3
+ */function last(array){var length=array?array.length:0;return length?array[length-1]:undefined}
+/**
+ * This method is like `_.indexOf` except that it iterates over elements of
+ * `array` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to search.
+ * @param {*} value The value to search for.
+ * @param {boolean|number} [fromIndex=array.length-1] The index to search from
+ * or `true` to perform a binary search on a sorted array.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ * @example
+ *
+ * _.lastIndexOf([1, 2, 1, 2], 2);
+ * // => 3
+ *
+ * // using `fromIndex`
+ * _.lastIndexOf([1, 2, 1, 2], 2, 2);
+ * // => 1
+ *
+ * // performing a binary search
+ * _.lastIndexOf([1, 1, 2, 2], 2, true);
+ * // => 3
+ */function lastIndexOf(array,value,fromIndex){var length=array?array.length:0;if(!length){return-1}var index=length;if(typeof fromIndex=="number"){index=(fromIndex<0?nativeMax(length+fromIndex,0):nativeMin(fromIndex||0,length-1))+1}else if(fromIndex){index=binaryIndex(array,value,true)-1;var other=array[index];if(value===value?value===other:other!==other){return index}return-1}if(value!==value){return indexOfNaN(array,index,true)}while(index--){if(array[index]===value){return index}}return-1}
+/**
+ * Removes all provided values from `array` using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * **Note:** Unlike `_.without`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {...*} [values] The values to remove.
+ * @returns {Array} Returns `array`.
+ * @example
+ *
+ * var array = [1, 2, 3, 1, 2, 3];
+ *
+ * _.pull(array, 2, 3);
+ * console.log(array);
+ * // => [1, 1]
+ */function pull(){var args=arguments,array=args[0];if(!(array&&array.length)){return array}var index=0,indexOf=getIndexOf(),length=args.length;while(++index<length){var fromIndex=0,value=args[index];while((fromIndex=indexOf(array,value,fromIndex))>-1){splice.call(array,fromIndex,1)}}return array}
+/**
+ * Removes elements from `array` corresponding to the given indexes and returns
+ * an array of the removed elements. Indexes may be specified as an array of
+ * indexes or as individual arguments.
+ *
+ * **Note:** Unlike `_.at`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {...(number|number[])} [indexes] The indexes of elements to remove,
+ * specified as individual indexes or arrays of indexes.
+ * @returns {Array} Returns the new array of removed elements.
+ * @example
+ *
+ * var array = [5, 10, 15, 20];
+ * var evens = _.pullAt(array, 1, 3);
+ *
+ * console.log(array);
+ * // => [5, 15]
+ *
+ * console.log(evens);
+ * // => [10, 20]
+ */var pullAt=restParam(function(array,indexes){indexes=baseFlatten(indexes);var result=baseAt(array,indexes);basePullAt(array,indexes.sort(baseCompareAscending));return result});
+/**
+ * Removes all elements from `array` that `predicate` returns truthy for
+ * and returns an array of the removed elements. The predicate is bound to
+ * `thisArg` and invoked with three arguments: (value, index, array).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * **Note:** Unlike `_.filter`, this method mutates `array`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to modify.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the new array of removed elements.
+ * @example
+ *
+ * var array = [1, 2, 3, 4];
+ * var evens = _.remove(array, function(n) {
+ * return n % 2 == 0;
+ * });
+ *
+ * console.log(array);
+ * // => [1, 3]
+ *
+ * console.log(evens);
+ * // => [2, 4]
+ */function remove(array,predicate,thisArg){var result=[];if(!(array&&array.length)){return result}var index=-1,indexes=[],length=array.length;predicate=getCallback(predicate,thisArg,3);while(++index<length){var value=array[index];if(predicate(value,index,array)){result.push(value);indexes.push(index)}}basePullAt(array,indexes);return result}
+/**
+ * Gets all but the first element of `array`.
+ *
+ * @static
+ * @memberOf _
+ * @alias tail
+ * @category Array
+ * @param {Array} array The array to query.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.rest([1, 2, 3]);
+ * // => [2, 3]
+ */function rest(array){return drop(array,1)}
+/**
+ * Creates a slice of `array` from `start` up to, but not including, `end`.
+ *
+ * **Note:** This method is used instead of `Array#slice` to support node
+ * lists in IE < 9 and to ensure dense arrays are returned.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to slice.
+ * @param {number} [start=0] The start position.
+ * @param {number} [end=array.length] The end position.
+ * @returns {Array} Returns the slice of `array`.
+ */function slice(array,start,end){var length=array?array.length:0;if(!length){return[]}if(end&&typeof end!="number"&&isIterateeCall(array,start,end)){start=0;end=length}return baseSlice(array,start,end)}
+/**
+ * Uses a binary search to determine the lowest index at which `value` should
+ * be inserted into `array` in order to maintain its sort order. If an iteratee
+ * function is provided it is invoked for `value` and each element of `array`
+ * to compute their sort ranking. The iteratee is bound to `thisArg` and
+ * invoked with one argument; (value).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * _.sortedIndex([30, 50], 40);
+ * // => 1
+ *
+ * _.sortedIndex([4, 4, 5, 5], 5);
+ * // => 2
+ *
+ * var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } };
+ *
+ * // using an iteratee function
+ * _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) {
+ * return this.data[word];
+ * }, dict);
+ * // => 1
+ *
+ * // using the `_.property` callback shorthand
+ * _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
+ * // => 1
+ */var sortedIndex=createSortedIndex();
+/**
+ * This method is like `_.sortedIndex` except that it returns the highest
+ * index at which `value` should be inserted into `array` in order to
+ * maintain its sort order.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The sorted array to inspect.
+ * @param {*} value The value to evaluate.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {number} Returns the index at which `value` should be inserted
+ * into `array`.
+ * @example
+ *
+ * _.sortedLastIndex([4, 4, 5, 5], 5);
+ * // => 4
+ */var sortedLastIndex=createSortedIndex(true);
+/**
+ * Creates a slice of `array` with `n` elements taken from the beginning.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to take.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.take([1, 2, 3]);
+ * // => [1]
+ *
+ * _.take([1, 2, 3], 2);
+ * // => [1, 2]
+ *
+ * _.take([1, 2, 3], 5);
+ * // => [1, 2, 3]
+ *
+ * _.take([1, 2, 3], 0);
+ * // => []
+ */function take(array,n,guard){var length=array?array.length:0;if(!length){return[]}if(guard?isIterateeCall(array,n,guard):n==null){n=1}return baseSlice(array,0,n<0?0:n)}
+/**
+ * Creates a slice of `array` with `n` elements taken from the end.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {number} [n=1] The number of elements to take.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.takeRight([1, 2, 3]);
+ * // => [3]
+ *
+ * _.takeRight([1, 2, 3], 2);
+ * // => [2, 3]
+ *
+ * _.takeRight([1, 2, 3], 5);
+ * // => [1, 2, 3]
+ *
+ * _.takeRight([1, 2, 3], 0);
+ * // => []
+ */function takeRight(array,n,guard){var length=array?array.length:0;if(!length){return[]}if(guard?isIterateeCall(array,n,guard):n==null){n=1}n=length-(+n||0);return baseSlice(array,n<0?0:n)}
+/**
+ * Creates a slice of `array` with elements taken from the end. Elements are
+ * taken until `predicate` returns falsey. The predicate is bound to `thisArg`
+ * and invoked with three arguments: (value, index, array).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.takeRightWhile([1, 2, 3], function(n) {
+ * return n > 1;
+ * });
+ * // => [2, 3]
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false },
+ * { 'user': 'pebbles', 'active': false }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.pluck(_.takeRightWhile(users, { 'user': 'pebbles', 'active': false }), 'user');
+ * // => ['pebbles']
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.pluck(_.takeRightWhile(users, 'active', false), 'user');
+ * // => ['fred', 'pebbles']
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.takeRightWhile(users, 'active'), 'user');
+ * // => []
+ */function takeRightWhile(array,predicate,thisArg){return array&&array.length?baseWhile(array,getCallback(predicate,thisArg,3),false,true):[]}
+/**
+ * Creates a slice of `array` with elements taken from the beginning. Elements
+ * are taken until `predicate` returns falsey. The predicate is bound to
+ * `thisArg` and invoked with three arguments: (value, index, array).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to query.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the slice of `array`.
+ * @example
+ *
+ * _.takeWhile([1, 2, 3], function(n) {
+ * return n < 3;
+ * });
+ * // => [1, 2]
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false},
+ * { 'user': 'pebbles', 'active': true }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.pluck(_.takeWhile(users, { 'user': 'barney', 'active': false }), 'user');
+ * // => ['barney']
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.pluck(_.takeWhile(users, 'active', false), 'user');
+ * // => ['barney', 'fred']
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.takeWhile(users, 'active'), 'user');
+ * // => []
+ */function takeWhile(array,predicate,thisArg){return array&&array.length?baseWhile(array,getCallback(predicate,thisArg,3)):[]}
+/**
+ * Creates an array of unique values, in order, from all of the provided arrays
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of combined values.
+ * @example
+ *
+ * _.union([1, 2], [4, 2], [2, 1]);
+ * // => [1, 2, 4]
+ */var union=restParam(function(arrays){return baseUniq(baseFlatten(arrays,false,true))});
+/**
+ * Creates a duplicate-free version of an array, using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons, in which only the first occurence of each element
+ * is kept. Providing `true` for `isSorted` performs a faster search algorithm
+ * for sorted arrays. If an iteratee function is provided it is invoked for
+ * each element in the array to generate the criterion by which uniqueness
+ * is computed. The `iteratee` is bound to `thisArg` and invoked with three
+ * arguments: (value, index, array).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias unique
+ * @category Array
+ * @param {Array} array The array to inspect.
+ * @param {boolean} [isSorted] Specify the array is sorted.
+ * @param {Function|Object|string} [iteratee] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array} Returns the new duplicate-value-free array.
+ * @example
+ *
+ * _.uniq([2, 1, 2]);
+ * // => [2, 1]
+ *
+ * // using `isSorted`
+ * _.uniq([1, 1, 2], true);
+ * // => [1, 2]
+ *
+ * // using an iteratee function
+ * _.uniq([1, 2.5, 1.5, 2], function(n) {
+ * return this.floor(n);
+ * }, Math);
+ * // => [1, 2.5]
+ *
+ * // using the `_.property` callback shorthand
+ * _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
+ * // => [{ 'x': 1 }, { 'x': 2 }]
+ */function uniq(array,isSorted,iteratee,thisArg){var length=array?array.length:0;if(!length){return[]}if(isSorted!=null&&typeof isSorted!="boolean"){thisArg=iteratee;iteratee=isIterateeCall(array,isSorted,thisArg)?undefined:isSorted;isSorted=false}var callback=getCallback();if(!(iteratee==null&&callback===baseCallback)){iteratee=callback(iteratee,thisArg,3)}return isSorted&&getIndexOf()==baseIndexOf?sortedUniq(array,iteratee):baseUniq(array,iteratee)}
+/**
+ * This method is like `_.zip` except that it accepts an array of grouped
+ * elements and creates an array regrouping the elements to their pre-zip
+ * configuration.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array of grouped elements to process.
+ * @returns {Array} Returns the new array of regrouped elements.
+ * @example
+ *
+ * var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]);
+ * // => [['fred', 30, true], ['barney', 40, false]]
+ *
+ * _.unzip(zipped);
+ * // => [['fred', 'barney'], [30, 40], [true, false]]
+ */function unzip(array){if(!(array&&array.length)){return[]}var index=-1,length=0;array=arrayFilter(array,function(group){if(isArrayLike(group)){length=nativeMax(group.length,length);return true}});var result=Array(length);while(++index<length){result[index]=arrayMap(array,baseProperty(index))}return result}
+/**
+ * This method is like `_.unzip` except that it accepts an iteratee to specify
+ * how regrouped values should be combined. The `iteratee` is bound to `thisArg`
+ * and invoked with four arguments: (accumulator, value, index, group).
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array of grouped elements to process.
+ * @param {Function} [iteratee] The function to combine regrouped values.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array} Returns the new array of regrouped elements.
+ * @example
+ *
+ * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
+ * // => [[1, 10, 100], [2, 20, 200]]
+ *
+ * _.unzipWith(zipped, _.add);
+ * // => [3, 30, 300]
+ */function unzipWith(array,iteratee,thisArg){var length=array?array.length:0;if(!length){return[]}var result=unzip(array);if(iteratee==null){return result}iteratee=bindCallback(iteratee,thisArg,4);return arrayMap(result,function(group){return arrayReduce(group,iteratee,undefined,true)})}
+/**
+ * Creates an array excluding all provided values using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {Array} array The array to filter.
+ * @param {...*} [values] The values to exclude.
+ * @returns {Array} Returns the new array of filtered values.
+ * @example
+ *
+ * _.without([1, 2, 1, 3], 1, 2);
+ * // => [3]
+ */var without=restParam(function(array,values){return isArrayLike(array)?baseDifference(array,values):[]});
+/**
+ * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
+ * of the provided arrays.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {...Array} [arrays] The arrays to inspect.
+ * @returns {Array} Returns the new array of values.
+ * @example
+ *
+ * _.xor([1, 2], [4, 2]);
+ * // => [1, 4]
+ */function xor(){var index=-1,length=arguments.length;while(++index<length){var array=arguments[index];if(isArrayLike(array)){var result=result?arrayPush(baseDifference(result,array),baseDifference(array,result)):array}}return result?baseUniq(result):[]}
+/**
+ * Creates an array of grouped elements, the first of which contains the first
+ * elements of the given arrays, the second of which contains the second elements
+ * of the given arrays, and so on.
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {...Array} [arrays] The arrays to process.
+ * @returns {Array} Returns the new array of grouped elements.
+ * @example
+ *
+ * _.zip(['fred', 'barney'], [30, 40], [true, false]);
+ * // => [['fred', 30, true], ['barney', 40, false]]
+ */var zip=restParam(unzip);
+/**
+ * The inverse of `_.pairs`; this method returns an object composed from arrays
+ * of property names and values. Provide either a single two dimensional array,
+ * e.g. `[[key1, value1], [key2, value2]]` or two arrays, one of property names
+ * and one of corresponding values.
+ *
+ * @static
+ * @memberOf _
+ * @alias object
+ * @category Array
+ * @param {Array} props The property names.
+ * @param {Array} [values=[]] The property values.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * _.zipObject([['fred', 30], ['barney', 40]]);
+ * // => { 'fred': 30, 'barney': 40 }
+ *
+ * _.zipObject(['fred', 'barney'], [30, 40]);
+ * // => { 'fred': 30, 'barney': 40 }
+ */function zipObject(props,values){var index=-1,length=props?props.length:0,result={};if(length&&!values&&!isArray(props[0])){values=[]}while(++index<length){var key=props[index];if(values){result[key]=values[index]}else if(key){result[key[0]]=key[1]}}return result}
+/**
+ * This method is like `_.zip` except that it accepts an iteratee to specify
+ * how grouped values should be combined. The `iteratee` is bound to `thisArg`
+ * and invoked with four arguments: (accumulator, value, index, group).
+ *
+ * @static
+ * @memberOf _
+ * @category Array
+ * @param {...Array} [arrays] The arrays to process.
+ * @param {Function} [iteratee] The function to combine grouped values.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array} Returns the new array of grouped elements.
+ * @example
+ *
+ * _.zipWith([1, 2], [10, 20], [100, 200], _.add);
+ * // => [111, 222]
+ */var zipWith=restParam(function(arrays){var length=arrays.length,iteratee=length>2?arrays[length-2]:undefined,thisArg=length>1?arrays[length-1]:undefined;if(length>2&&typeof iteratee=="function"){length-=2}else{iteratee=length>1&&typeof thisArg=="function"?(--length,thisArg):undefined;thisArg=undefined}arrays.length=length;return unzipWith(arrays,iteratee,thisArg)});
+/*------------------------------------------------------------------------*/
+/**
+ * Creates a `lodash` object that wraps `value` with explicit method
+ * chaining enabled.
+ *
+ * @static
+ * @memberOf _
+ * @category Chain
+ * @param {*} value The value to wrap.
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 },
+ * { 'user': 'pebbles', 'age': 1 }
+ * ];
+ *
+ * var youngest = _.chain(users)
+ * .sortBy('age')
+ * .map(function(chr) {
+ * return chr.user + ' is ' + chr.age;
+ * })
+ * .first()
+ * .value();
+ * // => 'pebbles is 1'
+ */function chain(value){var result=lodash(value);result.__chain__=true;return result}
+/**
+ * This method invokes `interceptor` and returns `value`. The interceptor is
+ * bound to `thisArg` and invoked with one argument; (value). The purpose of
+ * this method is to "tap into" a method chain in order to perform operations
+ * on intermediate results within the chain.
+ *
+ * @static
+ * @memberOf _
+ * @category Chain
+ * @param {*} value The value to provide to `interceptor`.
+ * @param {Function} interceptor The function to invoke.
+ * @param {*} [thisArg] The `this` binding of `interceptor`.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * _([1, 2, 3])
+ * .tap(function(array) {
+ * array.pop();
+ * })
+ * .reverse()
+ * .value();
+ * // => [2, 1]
+ */function tap(value,interceptor,thisArg){interceptor.call(thisArg,value);return value}
+/**
+ * This method is like `_.tap` except that it returns the result of `interceptor`.
+ *
+ * @static
+ * @memberOf _
+ * @category Chain
+ * @param {*} value The value to provide to `interceptor`.
+ * @param {Function} interceptor The function to invoke.
+ * @param {*} [thisArg] The `this` binding of `interceptor`.
+ * @returns {*} Returns the result of `interceptor`.
+ * @example
+ *
+ * _(' abc ')
+ * .chain()
+ * .trim()
+ * .thru(function(value) {
+ * return [value];
+ * })
+ * .value();
+ * // => ['abc']
+ */function thru(value,interceptor,thisArg){return interceptor.call(thisArg,value)}
+/**
+ * Enables explicit method chaining on the wrapper object.
+ *
+ * @name chain
+ * @memberOf _
+ * @category Chain
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 }
+ * ];
+ *
+ * // without explicit chaining
+ * _(users).first();
+ * // => { 'user': 'barney', 'age': 36 }
+ *
+ * // with explicit chaining
+ * _(users).chain()
+ * .first()
+ * .pick('user')
+ * .value();
+ * // => { 'user': 'barney' }
+ */function wrapperChain(){return chain(this)}
+/**
+ * Executes the chained sequence and returns the wrapped result.
+ *
+ * @name commit
+ * @memberOf _
+ * @category Chain
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var array = [1, 2];
+ * var wrapped = _(array).push(3);
+ *
+ * console.log(array);
+ * // => [1, 2]
+ *
+ * wrapped = wrapped.commit();
+ * console.log(array);
+ * // => [1, 2, 3]
+ *
+ * wrapped.last();
+ * // => 3
+ *
+ * console.log(array);
+ * // => [1, 2, 3]
+ */function wrapperCommit(){return new LodashWrapper(this.value(),this.__chain__)}
+/**
+ * Creates a new array joining a wrapped array with any additional arrays
+ * and/or values.
+ *
+ * @name concat
+ * @memberOf _
+ * @category Chain
+ * @param {...*} [values] The values to concatenate.
+ * @returns {Array} Returns the new concatenated array.
+ * @example
+ *
+ * var array = [1];
+ * var wrapped = _(array).concat(2, [3], [[4]]);
+ *
+ * console.log(wrapped.value());
+ * // => [1, 2, 3, [4]]
+ *
+ * console.log(array);
+ * // => [1]
+ */var wrapperConcat=restParam(function(values){values=baseFlatten(values);return this.thru(function(array){return arrayConcat(isArray(array)?array:[toObject(array)],values)})});
+/**
+ * Creates a clone of the chained sequence planting `value` as the wrapped value.
+ *
+ * @name plant
+ * @memberOf _
+ * @category Chain
+ * @returns {Object} Returns the new `lodash` wrapper instance.
+ * @example
+ *
+ * var array = [1, 2];
+ * var wrapped = _(array).map(function(value) {
+ * return Math.pow(value, 2);
+ * });
+ *
+ * var other = [3, 4];
+ * var otherWrapped = wrapped.plant(other);
+ *
+ * otherWrapped.value();
+ * // => [9, 16]
+ *
+ * wrapped.value();
+ * // => [1, 4]
+ */function wrapperPlant(value){var result,parent=this;while(parent instanceof baseLodash){var clone=wrapperClone(parent);if(result){previous.__wrapped__=clone}else{result=clone}var previous=clone;parent=parent.__wrapped__}previous.__wrapped__=value;return result}
+/**
+ * Reverses the wrapped array so the first element becomes the last, the
+ * second element becomes the second to last, and so on.
+ *
+ * **Note:** This method mutates the wrapped array.
+ *
+ * @name reverse
+ * @memberOf _
+ * @category Chain
+ * @returns {Object} Returns the new reversed `lodash` wrapper instance.
+ * @example
+ *
+ * var array = [1, 2, 3];
+ *
+ * _(array).reverse().value()
+ * // => [3, 2, 1]
+ *
+ * console.log(array);
+ * // => [3, 2, 1]
+ */function wrapperReverse(){var value=this.__wrapped__;var interceptor=function(value){return wrapped&&wrapped.__dir__<0?value:value.reverse()};if(value instanceof LazyWrapper){var wrapped=value;if(this.__actions__.length){wrapped=new LazyWrapper(this)}wrapped=wrapped.reverse();wrapped.__actions__.push({func:thru,args:[interceptor],thisArg:undefined});return new LodashWrapper(wrapped,this.__chain__)}return this.thru(interceptor)}
+/**
+ * Produces the result of coercing the unwrapped value to a string.
+ *
+ * @name toString
+ * @memberOf _
+ * @category Chain
+ * @returns {string} Returns the coerced string value.
+ * @example
+ *
+ * _([1, 2, 3]).toString();
+ * // => '1,2,3'
+ */function wrapperToString(){return this.value()+""}
+/**
+ * Executes the chained sequence to extract the unwrapped value.
+ *
+ * @name value
+ * @memberOf _
+ * @alias run, toJSON, valueOf
+ * @category Chain
+ * @returns {*} Returns the resolved unwrapped value.
+ * @example
+ *
+ * _([1, 2, 3]).value();
+ * // => [1, 2, 3]
+ */function wrapperValue(){return baseWrapperValue(this.__wrapped__,this.__actions__)}
+/*------------------------------------------------------------------------*/
+/**
+ * Creates an array of elements corresponding to the given keys, or indexes,
+ * of `collection`. Keys may be specified as individual arguments or as arrays
+ * of keys.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {...(number|number[]|string|string[])} [props] The property names
+ * or indexes of elements to pick, specified individually or in arrays.
+ * @returns {Array} Returns the new array of picked elements.
+ * @example
+ *
+ * _.at(['a', 'b', 'c'], [0, 2]);
+ * // => ['a', 'c']
+ *
+ * _.at(['barney', 'fred', 'pebbles'], 0, 2);
+ * // => ['barney', 'pebbles']
+ */var at=restParam(function(collection,props){return baseAt(collection,baseFlatten(props))});
+/**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` through `iteratee`. The corresponding value
+ * of each key is the number of times the key was returned by `iteratee`.
+ * The `iteratee` is bound to `thisArg` and invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * _.countBy([4.3, 6.1, 6.4], function(n) {
+ * return Math.floor(n);
+ * });
+ * // => { '4': 1, '6': 2 }
+ *
+ * _.countBy([4.3, 6.1, 6.4], function(n) {
+ * return this.floor(n);
+ * }, Math);
+ * // => { '4': 1, '6': 2 }
+ *
+ * _.countBy(['one', 'two', 'three'], 'length');
+ * // => { '3': 2, '5': 1 }
+ */var countBy=createAggregator(function(result,value,key){hasOwnProperty.call(result,key)?++result[key]:result[key]=1});
+/**
+ * Checks if `predicate` returns truthy for **all** elements of `collection`.
+ * The predicate is bound to `thisArg` and invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias all
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {boolean} Returns `true` if all elements pass the predicate check,
+ * else `false`.
+ * @example
+ *
+ * _.every([true, 1, null, 'yes'], Boolean);
+ * // => false
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': false },
+ * { 'user': 'fred', 'active': false }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.every(users, { 'user': 'barney', 'active': false });
+ * // => false
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.every(users, 'active', false);
+ * // => true
+ *
+ * // using the `_.property` callback shorthand
+ * _.every(users, 'active');
+ * // => false
+ */function every(collection,predicate,thisArg){var func=isArray(collection)?arrayEvery:baseEvery;if(thisArg&&isIterateeCall(collection,predicate,thisArg)){predicate=undefined}if(typeof predicate!="function"||thisArg!==undefined){predicate=getCallback(predicate,thisArg,3)}return func(collection,predicate)}
+/**
+ * Iterates over elements of `collection`, returning an array of all elements
+ * `predicate` returns truthy for. The predicate is bound to `thisArg` and
+ * invoked with three arguments: (value, index|key, collection).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias select
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the new filtered array.
+ * @example
+ *
+ * _.filter([4, 5, 6], function(n) {
+ * return n % 2 == 0;
+ * });
+ * // => [4, 6]
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user');
+ * // => ['barney']
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.pluck(_.filter(users, 'active', false), 'user');
+ * // => ['fred']
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.filter(users, 'active'), 'user');
+ * // => ['barney']
+ */function filter(collection,predicate,thisArg){var func=isArray(collection)?arrayFilter:baseFilter;predicate=getCallback(predicate,thisArg,3);return func(collection,predicate)}
+/**
+ * Iterates over elements of `collection`, returning the first element
+ * `predicate` returns truthy for. The predicate is bound to `thisArg` and
+ * invoked with three arguments: (value, index|key, collection).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias detect
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false },
+ * { 'user': 'pebbles', 'age': 1, 'active': true }
+ * ];
+ *
+ * _.result(_.find(users, function(chr) {
+ * return chr.age < 40;
+ * }), 'user');
+ * // => 'barney'
+ *
+ * // using the `_.matches` callback shorthand
+ * _.result(_.find(users, { 'age': 1, 'active': true }), 'user');
+ * // => 'pebbles'
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.result(_.find(users, 'active', false), 'user');
+ * // => 'fred'
+ *
+ * // using the `_.property` callback shorthand
+ * _.result(_.find(users, 'active'), 'user');
+ * // => 'barney'
+ */var find=createFind(baseEach);
+/**
+ * This method is like `_.find` except that it iterates over elements of
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * _.findLast([1, 2, 3, 4], function(n) {
+ * return n % 2 == 1;
+ * });
+ * // => 3
+ */var findLast=createFind(baseEachRight,true);
+/**
+ * Performs a deep comparison between each element in `collection` and the
+ * source object, returning the first element that has equivalent property
+ * values.
+ *
+ * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+ * numbers, `Object` objects, regexes, and strings. Objects are compared by
+ * their own, not inherited, enumerable properties. For comparing a single
+ * own or inherited property value see `_.matchesProperty`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {Object} source The object of property values to match.
+ * @returns {*} Returns the matched element, else `undefined`.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false }
+ * ];
+ *
+ * _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user');
+ * // => 'barney'
+ *
+ * _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user');
+ * // => 'fred'
+ */function findWhere(collection,source){return find(collection,baseMatches(source))}
+/**
+ * Iterates over elements of `collection` invoking `iteratee` for each element.
+ * The `iteratee` is bound to `thisArg` and invoked with three arguments:
+ * (value, index|key, collection). Iteratee functions may exit iteration early
+ * by explicitly returning `false`.
+ *
+ * **Note:** As with other "Collections" methods, objects with a "length" property
+ * are iterated like arrays. To avoid this behavior `_.forIn` or `_.forOwn`
+ * may be used for object iteration.
+ *
+ * @static
+ * @memberOf _
+ * @alias each
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array|Object|string} Returns `collection`.
+ * @example
+ *
+ * _([1, 2]).forEach(function(n) {
+ * console.log(n);
+ * }).value();
+ * // => logs each value from left to right and returns the array
+ *
+ * _.forEach({ 'a': 1, 'b': 2 }, function(n, key) {
+ * console.log(n, key);
+ * });
+ * // => logs each value-key pair and returns the object (iteration order is not guaranteed)
+ */var forEach=createForEach(arrayEach,baseEach);
+/**
+ * This method is like `_.forEach` except that it iterates over elements of
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @alias eachRight
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array|Object|string} Returns `collection`.
+ * @example
+ *
+ * _([1, 2]).forEachRight(function(n) {
+ * console.log(n);
+ * }).value();
+ * // => logs each value from right to left and returns the array
+ */var forEachRight=createForEach(arrayEachRight,baseEachRight);
+/**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` through `iteratee`. The corresponding value
+ * of each key is an array of the elements responsible for generating the key.
+ * The `iteratee` is bound to `thisArg` and invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * _.groupBy([4.2, 6.1, 6.4], function(n) {
+ * return Math.floor(n);
+ * });
+ * // => { '4': [4.2], '6': [6.1, 6.4] }
+ *
+ * _.groupBy([4.2, 6.1, 6.4], function(n) {
+ * return this.floor(n);
+ * }, Math);
+ * // => { '4': [4.2], '6': [6.1, 6.4] }
+ *
+ * // using the `_.property` callback shorthand
+ * _.groupBy(['one', 'two', 'three'], 'length');
+ * // => { '3': ['one', 'two'], '5': ['three'] }
+ */var groupBy=createAggregator(function(result,value,key){if(hasOwnProperty.call(result,key)){result[key].push(value)}else{result[key]=[value]}});
+/**
+ * Checks if `value` is in `collection` using
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
+ * for equality comparisons. If `fromIndex` is negative, it is used as the offset
+ * from the end of `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @alias contains, include
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {*} target The value to search for.
+ * @param {number} [fromIndex=0] The index to search from.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
+ * @returns {boolean} Returns `true` if a matching element is found, else `false`.
+ * @example
+ *
+ * _.includes([1, 2, 3], 1);
+ * // => true
+ *
+ * _.includes([1, 2, 3], 1, 2);
+ * // => false
+ *
+ * _.includes({ 'user': 'fred', 'age': 40 }, 'fred');
+ * // => true
+ *
+ * _.includes('pebbles', 'eb');
+ * // => true
+ */function includes(collection,target,fromIndex,guard){var length=collection?getLength(collection):0;if(!isLength(length)){collection=values(collection);length=collection.length}if(typeof fromIndex!="number"||guard&&isIterateeCall(target,fromIndex,guard)){fromIndex=0}else{fromIndex=fromIndex<0?nativeMax(length+fromIndex,0):fromIndex||0}return typeof collection=="string"||!isArray(collection)&&isString(collection)?fromIndex<=length&&collection.indexOf(target,fromIndex)>-1:!!length&&getIndexOf(collection,target,fromIndex)>-1}
+/**
+ * Creates an object composed of keys generated from the results of running
+ * each element of `collection` through `iteratee`. The corresponding value
+ * of each key is the last element responsible for generating the key. The
+ * iteratee function is bound to `thisArg` and invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns the composed aggregate object.
+ * @example
+ *
+ * var keyData = [
+ * { 'dir': 'left', 'code': 97 },
+ * { 'dir': 'right', 'code': 100 }
+ * ];
+ *
+ * _.indexBy(keyData, 'dir');
+ * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
+ *
+ * _.indexBy(keyData, function(object) {
+ * return String.fromCharCode(object.code);
+ * });
+ * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
+ *
+ * _.indexBy(keyData, function(object) {
+ * return this.fromCharCode(object.code);
+ * }, String);
+ * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
+ */var indexBy=createAggregator(function(result,value,key){result[key]=value});
+/**
+ * Invokes the method at `path` of each element in `collection`, returning
+ * an array of the results of each invoked method. Any additional arguments
+ * are provided to each invoked method. If `methodName` is a function it is
+ * invoked for, and `this` bound to, each element in `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Array|Function|string} path The path of the method to invoke or
+ * the function invoked per iteration.
+ * @param {...*} [args] The arguments to invoke the method with.
+ * @returns {Array} Returns the array of results.
+ * @example
+ *
+ * _.invoke([[5, 1, 7], [3, 2, 1]], 'sort');
+ * // => [[1, 5, 7], [1, 2, 3]]
+ *
+ * _.invoke([123, 456], String.prototype.split, '');
+ * // => [['1', '2', '3'], ['4', '5', '6']]
+ */var invoke=restParam(function(collection,path,args){var index=-1,isFunc=typeof path=="function",isProp=isKey(path),result=isArrayLike(collection)?Array(collection.length):[];baseEach(collection,function(value){var func=isFunc?path:isProp&&value!=null?value[path]:undefined;result[++index]=func?func.apply(value,args):invokePath(value,path,args)});return result});
+/**
+ * Creates an array of values by running each element in `collection` through
+ * `iteratee`. The `iteratee` is bound to `thisArg` and invoked with three
+ * arguments: (value, index|key, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * Many lodash methods are guarded to work as iteratees for methods like
+ * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
+ *
+ * The guarded methods are:
+ * `ary`, `callback`, `chunk`, `clone`, `create`, `curry`, `curryRight`,
+ * `drop`, `dropRight`, `every`, `fill`, `flatten`, `invert`, `max`, `min`,
+ * `parseInt`, `slice`, `sortBy`, `take`, `takeRight`, `template`, `trim`,
+ * `trimLeft`, `trimRight`, `trunc`, `random`, `range`, `sample`, `some`,
+ * `sum`, `uniq`, and `words`
+ *
+ * @static
+ * @memberOf _
+ * @alias collect
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array} Returns the new mapped array.
+ * @example
+ *
+ * function timesThree(n) {
+ * return n * 3;
+ * }
+ *
+ * _.map([1, 2], timesThree);
+ * // => [3, 6]
+ *
+ * _.map({ 'a': 1, 'b': 2 }, timesThree);
+ * // => [3, 6] (iteration order is not guaranteed)
+ *
+ * var users = [
+ * { 'user': 'barney' },
+ * { 'user': 'fred' }
+ * ];
+ *
+ * // using the `_.property` callback shorthand
+ * _.map(users, 'user');
+ * // => ['barney', 'fred']
+ */function map(collection,iteratee,thisArg){var func=isArray(collection)?arrayMap:baseMap;iteratee=getCallback(iteratee,thisArg,3);return func(collection,iteratee)}
+/**
+ * Creates an array of elements split into two groups, the first of which
+ * contains elements `predicate` returns truthy for, while the second of which
+ * contains elements `predicate` returns falsey for. The predicate is bound
+ * to `thisArg` and invoked with three arguments: (value, index|key, collection).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the array of grouped elements.
+ * @example
+ *
+ * _.partition([1, 2, 3], function(n) {
+ * return n % 2;
+ * });
+ * // => [[1, 3], [2]]
+ *
+ * _.partition([1.2, 2.3, 3.4], function(n) {
+ * return this.floor(n) % 2;
+ * }, Math);
+ * // => [[1.2, 3.4], [2.3]]
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': false },
+ * { 'user': 'fred', 'age': 40, 'active': true },
+ * { 'user': 'pebbles', 'age': 1, 'active': false }
+ * ];
+ *
+ * var mapper = function(array) {
+ * return _.pluck(array, 'user');
+ * };
+ *
+ * // using the `_.matches` callback shorthand
+ * _.map(_.partition(users, { 'age': 1, 'active': false }), mapper);
+ * // => [['pebbles'], ['barney', 'fred']]
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.map(_.partition(users, 'active', false), mapper);
+ * // => [['barney', 'pebbles'], ['fred']]
+ *
+ * // using the `_.property` callback shorthand
+ * _.map(_.partition(users, 'active'), mapper);
+ * // => [['fred'], ['barney', 'pebbles']]
+ */var partition=createAggregator(function(result,value,key){result[key?0:1].push(value)},function(){return[[],[]]});
+/**
+ * Gets the property value of `path` from all elements in `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Array|string} path The path of the property to pluck.
+ * @returns {Array} Returns the property values.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 }
+ * ];
+ *
+ * _.pluck(users, 'user');
+ * // => ['barney', 'fred']
+ *
+ * var userIndex = _.indexBy(users, 'user');
+ * _.pluck(userIndex, 'age');
+ * // => [36, 40] (iteration order is not guaranteed)
+ */function pluck(collection,path){return map(collection,property(path))}
+/**
+ * Reduces `collection` to a value which is the accumulated result of running
+ * each element in `collection` through `iteratee`, where each successive
+ * invocation is supplied the return value of the previous. If `accumulator`
+ * is not provided the first element of `collection` is used as the initial
+ * value. The `iteratee` is bound to `thisArg` and invoked with four arguments:
+ * (accumulator, value, index|key, collection).
+ *
+ * Many lodash methods are guarded to work as iteratees for methods like
+ * `_.reduce`, `_.reduceRight`, and `_.transform`.
+ *
+ * The guarded methods are:
+ * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`,
+ * and `sortByOrder`
+ *
+ * @static
+ * @memberOf _
+ * @alias foldl, inject
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {*} Returns the accumulated value.
+ * @example
+ *
+ * _.reduce([1, 2], function(total, n) {
+ * return total + n;
+ * });
+ * // => 3
+ *
+ * _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) {
+ * result[key] = n * 3;
+ * return result;
+ * }, {});
+ * // => { 'a': 3, 'b': 6 } (iteration order is not guaranteed)
+ */var reduce=createReduce(arrayReduce,baseEach);
+/**
+ * This method is like `_.reduce` except that it iterates over elements of
+ * `collection` from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @alias foldr
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {*} Returns the accumulated value.
+ * @example
+ *
+ * var array = [[0, 1], [2, 3], [4, 5]];
+ *
+ * _.reduceRight(array, function(flattened, other) {
+ * return flattened.concat(other);
+ * }, []);
+ * // => [4, 5, 2, 3, 0, 1]
+ */var reduceRight=createReduce(arrayReduceRight,baseEachRight);
+/**
+ * The opposite of `_.filter`; this method returns the elements of `collection`
+ * that `predicate` does **not** return truthy for.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Array} Returns the new filtered array.
+ * @example
+ *
+ * _.reject([1, 2, 3, 4], function(n) {
+ * return n % 2 == 0;
+ * });
+ * // => [1, 3]
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': false },
+ * { 'user': 'fred', 'age': 40, 'active': true }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user');
+ * // => ['barney']
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.pluck(_.reject(users, 'active', false), 'user');
+ * // => ['fred']
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.reject(users, 'active'), 'user');
+ * // => ['barney']
+ */function reject(collection,predicate,thisArg){var func=isArray(collection)?arrayFilter:baseFilter;predicate=getCallback(predicate,thisArg,3);return func(collection,function(value,index,collection){return!predicate(value,index,collection)})}
+/**
+ * Gets a random element or `n` random elements from a collection.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to sample.
+ * @param {number} [n] The number of elements to sample.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {*} Returns the random sample(s).
+ * @example
+ *
+ * _.sample([1, 2, 3, 4]);
+ * // => 2
+ *
+ * _.sample([1, 2, 3, 4], 2);
+ * // => [3, 1]
+ */function sample(collection,n,guard){if(guard?isIterateeCall(collection,n,guard):n==null){collection=toIterable(collection);var length=collection.length;return length>0?collection[baseRandom(0,length-1)]:undefined}var index=-1,result=toArray(collection),length=result.length,lastIndex=length-1;n=nativeMin(n<0?0:+n||0,length);while(++index<n){var rand=baseRandom(index,lastIndex),value=result[rand];result[rand]=result[index];result[index]=value}result.length=n;return result}
+/**
+ * Creates an array of shuffled values, using a version of the
+ * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to shuffle.
+ * @returns {Array} Returns the new shuffled array.
+ * @example
+ *
+ * _.shuffle([1, 2, 3, 4]);
+ * // => [4, 1, 3, 2]
+ */function shuffle(collection){return sample(collection,POSITIVE_INFINITY)}
+/**
+ * Gets the size of `collection` by returning its length for array-like
+ * values or the number of own enumerable properties for objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to inspect.
+ * @returns {number} Returns the size of `collection`.
+ * @example
+ *
+ * _.size([1, 2, 3]);
+ * // => 3
+ *
+ * _.size({ 'a': 1, 'b': 2 });
+ * // => 2
+ *
+ * _.size('pebbles');
+ * // => 7
+ */function size(collection){var length=collection?getLength(collection):0;return isLength(length)?length:keys(collection).length}
+/**
+ * Checks if `predicate` returns truthy for **any** element of `collection`.
+ * The function returns as soon as it finds a passing value and does not iterate
+ * over the entire collection. The predicate is bound to `thisArg` and invoked
+ * with three arguments: (value, index|key, collection).
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias any
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
+ * else `false`.
+ * @example
+ *
+ * _.some([null, 0, 'yes', false], Boolean);
+ * // => true
+ *
+ * var users = [
+ * { 'user': 'barney', 'active': true },
+ * { 'user': 'fred', 'active': false }
+ * ];
+ *
+ * // using the `_.matches` callback shorthand
+ * _.some(users, { 'user': 'barney', 'active': false });
+ * // => false
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.some(users, 'active', false);
+ * // => true
+ *
+ * // using the `_.property` callback shorthand
+ * _.some(users, 'active');
+ * // => true
+ */function some(collection,predicate,thisArg){var func=isArray(collection)?arraySome:baseSome;if(thisArg&&isIterateeCall(collection,predicate,thisArg)){predicate=undefined}if(typeof predicate!="function"||thisArg!==undefined){predicate=getCallback(predicate,thisArg,3)}return func(collection,predicate)}
+/**
+ * Creates an array of elements, sorted in ascending order by the results of
+ * running each element in a collection through `iteratee`. This method performs
+ * a stable sort, that is, it preserves the original sort order of equal elements.
+ * The `iteratee` is bound to `thisArg` and invoked with three arguments:
+ * (value, index|key, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array} Returns the new sorted array.
+ * @example
+ *
+ * _.sortBy([1, 2, 3], function(n) {
+ * return Math.sin(n);
+ * });
+ * // => [3, 1, 2]
+ *
+ * _.sortBy([1, 2, 3], function(n) {
+ * return this.sin(n);
+ * }, Math);
+ * // => [3, 1, 2]
+ *
+ * var users = [
+ * { 'user': 'fred' },
+ * { 'user': 'pebbles' },
+ * { 'user': 'barney' }
+ * ];
+ *
+ * // using the `_.property` callback shorthand
+ * _.pluck(_.sortBy(users, 'user'), 'user');
+ * // => ['barney', 'fred', 'pebbles']
+ */function sortBy(collection,iteratee,thisArg){if(collection==null){return[]}if(thisArg&&isIterateeCall(collection,iteratee,thisArg)){iteratee=undefined}var index=-1;iteratee=getCallback(iteratee,thisArg,3);var result=baseMap(collection,function(value,key,collection){return{criteria:iteratee(value,key,collection),index:++index,value:value}});return baseSortBy(result,compareAscending)}
+/**
+ * This method is like `_.sortBy` except that it can sort by multiple iteratees
+ * or property names.
+ *
+ * If a property name is provided for an iteratee the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If an object is provided for an iteratee the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {...(Function|Function[]|Object|Object[]|string|string[])} iteratees
+ * The iteratees to sort by, specified as individual values or arrays of values.
+ * @returns {Array} Returns the new sorted array.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'fred', 'age': 48 },
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 42 },
+ * { 'user': 'barney', 'age': 34 }
+ * ];
+ *
+ * _.map(_.sortByAll(users, ['user', 'age']), _.values);
+ * // => [['barney', 34], ['barney', 36], ['fred', 42], ['fred', 48]]
+ *
+ * _.map(_.sortByAll(users, 'user', function(chr) {
+ * return Math.floor(chr.age / 10);
+ * }), _.values);
+ * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
+ */var sortByAll=restParam(function(collection,iteratees){if(collection==null){return[]}var guard=iteratees[2];if(guard&&isIterateeCall(iteratees[0],iteratees[1],guard)){iteratees.length=1}return baseSortByOrder(collection,baseFlatten(iteratees),[])});
+/**
+ * This method is like `_.sortByAll` except that it allows specifying the
+ * sort orders of the iteratees to sort by. If `orders` is unspecified, all
+ * values are sorted in ascending order. Otherwise, a value is sorted in
+ * ascending order if its corresponding order is "asc", and descending if "desc".
+ *
+ * If a property name is provided for an iteratee the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If an object is provided for an iteratee the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
+ * @param {boolean[]} [orders] The sort orders of `iteratees`.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
+ * @returns {Array} Returns the new sorted array.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'fred', 'age': 48 },
+ * { 'user': 'barney', 'age': 34 },
+ * { 'user': 'fred', 'age': 42 },
+ * { 'user': 'barney', 'age': 36 }
+ * ];
+ *
+ * // sort by `user` in ascending order and by `age` in descending order
+ * _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values);
+ * // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
+ */function sortByOrder(collection,iteratees,orders,guard){if(collection==null){return[]}if(guard&&isIterateeCall(iteratees,orders,guard)){orders=undefined}if(!isArray(iteratees)){iteratees=iteratees==null?[]:[iteratees]}if(!isArray(orders)){orders=orders==null?[]:[orders]}return baseSortByOrder(collection,iteratees,orders)}
+/**
+ * Performs a deep comparison between each element in `collection` and the
+ * source object, returning an array of all elements that have equivalent
+ * property values.
+ *
+ * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+ * numbers, `Object` objects, regexes, and strings. Objects are compared by
+ * their own, not inherited, enumerable properties. For comparing a single
+ * own or inherited property value see `_.matchesProperty`.
+ *
+ * @static
+ * @memberOf _
+ * @category Collection
+ * @param {Array|Object|string} collection The collection to search.
+ * @param {Object} source The object of property values to match.
+ * @returns {Array} Returns the new filtered array.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] },
+ * { 'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] }
+ * ];
+ *
+ * _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user');
+ * // => ['barney']
+ *
+ * _.pluck(_.where(users, { 'pets': ['dino'] }), 'user');
+ * // => ['fred']
+ */function where(collection,source){return filter(collection,baseMatches(source))}
+/*------------------------------------------------------------------------*/
+/**
+ * Gets the number of milliseconds that have elapsed since the Unix epoch
+ * (1 January 1970 00:00:00 UTC).
+ *
+ * @static
+ * @memberOf _
+ * @category Date
+ * @example
+ *
+ * _.defer(function(stamp) {
+ * console.log(_.now() - stamp);
+ * }, _.now());
+ * // => logs the number of milliseconds it took for the deferred function to be invoked
+ */var now=nativeNow||function(){return(new Date).getTime()};
+/*------------------------------------------------------------------------*/
+/**
+ * The opposite of `_.before`; this method creates a function that invokes
+ * `func` once it is called `n` or more times.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {number} n The number of calls before `func` is invoked.
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * var saves = ['profile', 'settings'];
+ *
+ * var done = _.after(saves.length, function() {
+ * console.log('done saving!');
+ * });
+ *
+ * _.forEach(saves, function(type) {
+ * asyncSave({ 'type': type, 'complete': done });
+ * });
+ * // => logs 'done saving!' after the two async saves have completed
+ */function after(n,func){if(typeof func!="function"){if(typeof n=="function"){var temp=n;n=func;func=temp}else{throw new TypeError(FUNC_ERROR_TEXT)}}n=nativeIsFinite(n=+n)?n:0;return function(){if(--n<1){return func.apply(this,arguments)}}}
+/**
+ * Creates a function that accepts up to `n` arguments ignoring any
+ * additional arguments.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to cap arguments for.
+ * @param {number} [n=func.length] The arity cap.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * _.map(['6', '8', '10'], _.ary(parseInt, 1));
+ * // => [6, 8, 10]
+ */function ary(func,n,guard){if(guard&&isIterateeCall(func,n,guard)){n=undefined}n=func&&n==null?func.length:nativeMax(+n||0,0);return createWrapper(func,ARY_FLAG,undefined,undefined,undefined,undefined,n)}
+/**
+ * Creates a function that invokes `func`, with the `this` binding and arguments
+ * of the created function, while it is called less than `n` times. Subsequent
+ * calls to the created function return the result of the last `func` invocation.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {number} n The number of calls at which `func` is no longer invoked.
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * jQuery('#add').on('click', _.before(5, addContactToList));
+ * // => allows adding up to 4 contacts to the list
+ */function before(n,func){var result;if(typeof func!="function"){if(typeof n=="function"){var temp=n;n=func;func=temp}else{throw new TypeError(FUNC_ERROR_TEXT)}}return function(){if(--n>0){result=func.apply(this,arguments)}if(n<=1){func=undefined}return result}}
+/**
+ * Creates a function that invokes `func` with the `this` binding of `thisArg`
+ * and prepends any additional `_.bind` arguments to those provided to the
+ * bound function.
+ *
+ * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
+ * may be used as a placeholder for partially applied arguments.
+ *
+ * **Note:** Unlike native `Function#bind` this method does not set the "length"
+ * property of bound functions.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to bind.
+ * @param {*} thisArg The `this` binding of `func`.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new bound function.
+ * @example
+ *
+ * var greet = function(greeting, punctuation) {
+ * return greeting + ' ' + this.user + punctuation;
+ * };
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * var bound = _.bind(greet, object, 'hi');
+ * bound('!');
+ * // => 'hi fred!'
+ *
+ * // using placeholders
+ * var bound = _.bind(greet, object, _, '!');
+ * bound('hi');
+ * // => 'hi fred!'
+ */var bind=restParam(function(func,thisArg,partials){var bitmask=BIND_FLAG;if(partials.length){var holders=replaceHolders(partials,bind.placeholder);bitmask|=PARTIAL_FLAG}return createWrapper(func,bitmask,thisArg,partials,holders)});
+/**
+ * Binds methods of an object to the object itself, overwriting the existing
+ * method. Method names may be specified as individual arguments or as arrays
+ * of method names. If no method names are provided all enumerable function
+ * properties, own and inherited, of `object` are bound.
+ *
+ * **Note:** This method does not set the "length" property of bound functions.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Object} object The object to bind and assign the bound methods to.
+ * @param {...(string|string[])} [methodNames] The object method names to bind,
+ * specified as individual method names or arrays of method names.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var view = {
+ * 'label': 'docs',
+ * 'onClick': function() {
+ * console.log('clicked ' + this.label);
+ * }
+ * };
+ *
+ * _.bindAll(view);
+ * jQuery('#docs').on('click', view.onClick);
+ * // => logs 'clicked docs' when the element is clicked
+ */var bindAll=restParam(function(object,methodNames){methodNames=methodNames.length?baseFlatten(methodNames):functions(object);var index=-1,length=methodNames.length;while(++index<length){var key=methodNames[index];object[key]=createWrapper(object[key],BIND_FLAG,object)}return object});
+/**
+ * Creates a function that invokes the method at `object[key]` and prepends
+ * any additional `_.bindKey` arguments to those provided to the bound function.
+ *
+ * This method differs from `_.bind` by allowing bound functions to reference
+ * methods that may be redefined or don't yet exist.
+ * See [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
+ * for more details.
+ *
+ * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for partially applied arguments.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Object} object The object the method belongs to.
+ * @param {string} key The key of the method.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new bound function.
+ * @example
+ *
+ * var object = {
+ * 'user': 'fred',
+ * 'greet': function(greeting, punctuation) {
+ * return greeting + ' ' + this.user + punctuation;
+ * }
+ * };
+ *
+ * var bound = _.bindKey(object, 'greet', 'hi');
+ * bound('!');
+ * // => 'hi fred!'
+ *
+ * object.greet = function(greeting, punctuation) {
+ * return greeting + 'ya ' + this.user + punctuation;
+ * };
+ *
+ * bound('!');
+ * // => 'hiya fred!'
+ *
+ * // using placeholders
+ * var bound = _.bindKey(object, 'greet', _, '!');
+ * bound('hi');
+ * // => 'hiya fred!'
+ */var bindKey=restParam(function(object,key,partials){var bitmask=BIND_FLAG|BIND_KEY_FLAG;if(partials.length){var holders=replaceHolders(partials,bindKey.placeholder);bitmask|=PARTIAL_FLAG}return createWrapper(key,bitmask,object,partials,holders)});
+/**
+ * Creates a function that accepts one or more arguments of `func` that when
+ * called either invokes `func` returning its result, if all `func` arguments
+ * have been provided, or returns a function that accepts one or more of the
+ * remaining `func` arguments, and so on. The arity of `func` may be specified
+ * if `func.length` is not sufficient.
+ *
+ * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
+ * may be used as a placeholder for provided arguments.
+ *
+ * **Note:** This method does not set the "length" property of curried functions.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to curry.
+ * @param {number} [arity=func.length] The arity of `func`.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Function} Returns the new curried function.
+ * @example
+ *
+ * var abc = function(a, b, c) {
+ * return [a, b, c];
+ * };
+ *
+ * var curried = _.curry(abc);
+ *
+ * curried(1)(2)(3);
+ * // => [1, 2, 3]
+ *
+ * curried(1, 2)(3);
+ * // => [1, 2, 3]
+ *
+ * curried(1, 2, 3);
+ * // => [1, 2, 3]
+ *
+ * // using placeholders
+ * curried(1)(_, 3)(2);
+ * // => [1, 2, 3]
+ */var curry=createCurry(CURRY_FLAG);
+/**
+ * This method is like `_.curry` except that arguments are applied to `func`
+ * in the manner of `_.partialRight` instead of `_.partial`.
+ *
+ * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for provided arguments.
+ *
+ * **Note:** This method does not set the "length" property of curried functions.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to curry.
+ * @param {number} [arity=func.length] The arity of `func`.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Function} Returns the new curried function.
+ * @example
+ *
+ * var abc = function(a, b, c) {
+ * return [a, b, c];
+ * };
+ *
+ * var curried = _.curryRight(abc);
+ *
+ * curried(3)(2)(1);
+ * // => [1, 2, 3]
+ *
+ * curried(2, 3)(1);
+ * // => [1, 2, 3]
+ *
+ * curried(1, 2, 3);
+ * // => [1, 2, 3]
+ *
+ * // using placeholders
+ * curried(3)(1, _)(2);
+ * // => [1, 2, 3]
+ */var curryRight=createCurry(CURRY_RIGHT_FLAG);
+/**
+ * Creates a debounced function that delays invoking `func` until after `wait`
+ * milliseconds have elapsed since the last time the debounced function was
+ * invoked. The debounced function comes with a `cancel` method to cancel
+ * delayed invocations. Provide an options object to indicate that `func`
+ * should be invoked on the leading and/or trailing edge of the `wait` timeout.
+ * Subsequent calls to the debounced function return the result of the last
+ * `func` invocation.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
+ * on the trailing edge of the timeout only if the the debounced function is
+ * invoked more than once during the `wait` timeout.
+ *
+ * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
+ * for details over the differences between `_.debounce` and `_.throttle`.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to debounce.
+ * @param {number} [wait=0] The number of milliseconds to delay.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.leading=false] Specify invoking on the leading
+ * edge of the timeout.
+ * @param {number} [options.maxWait] The maximum time `func` is allowed to be
+ * delayed before it is invoked.
+ * @param {boolean} [options.trailing=true] Specify invoking on the trailing
+ * edge of the timeout.
+ * @returns {Function} Returns the new debounced function.
+ * @example
+ *
+ * // avoid costly calculations while the window size is in flux
+ * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
+ *
+ * // invoke `sendMail` when the click event is fired, debouncing subsequent calls
+ * jQuery('#postbox').on('click', _.debounce(sendMail, 300, {
+ * 'leading': true,
+ * 'trailing': false
+ * }));
+ *
+ * // ensure `batchLog` is invoked once after 1 second of debounced calls
+ * var source = new EventSource('/stream');
+ * jQuery(source).on('message', _.debounce(batchLog, 250, {
+ * 'maxWait': 1000
+ * }));
+ *
+ * // cancel a debounced call
+ * var todoChanges = _.debounce(batchLog, 1000);
+ * Object.observe(models.todo, todoChanges);
+ *
+ * Object.observe(models, function(changes) {
+ * if (_.find(changes, { 'user': 'todo', 'type': 'delete'})) {
+ * todoChanges.cancel();
+ * }
+ * }, ['delete']);
+ *
+ * // ...at some point `models.todo` is changed
+ * models.todo.completed = true;
+ *
+ * // ...before 1 second has passed `models.todo` is deleted
+ * // which cancels the debounced `todoChanges` call
+ * delete models.todo;
+ */function debounce(func,wait,options){var args,maxTimeoutId,result,stamp,thisArg,timeoutId,trailingCall,lastCalled=0,maxWait=false,trailing=true;if(typeof func!="function"){throw new TypeError(FUNC_ERROR_TEXT)}wait=wait<0?0:+wait||0;if(options===true){var leading=true;trailing=false}else if(isObject(options)){leading=!!options.leading;maxWait="maxWait"in options&&nativeMax(+options.maxWait||0,wait);trailing="trailing"in options?!!options.trailing:trailing}function cancel(){if(timeoutId){clearTimeout(timeoutId)}if(maxTimeoutId){clearTimeout(maxTimeoutId)}lastCalled=0;maxTimeoutId=timeoutId=trailingCall=undefined}function complete(isCalled,id){if(id){clearTimeout(id)}maxTimeoutId=timeoutId=trailingCall=undefined;if(isCalled){lastCalled=now();result=func.apply(thisArg,args);if(!timeoutId&&!maxTimeoutId){args=thisArg=undefined}}}function delayed(){var remaining=wait-(now()-stamp);if(remaining<=0||remaining>wait){complete(trailingCall,maxTimeoutId)}else{timeoutId=setTimeout(delayed,remaining)}}function maxDelayed(){complete(trailing,timeoutId)}function debounced(){args=arguments;stamp=now();thisArg=this;trailingCall=trailing&&(timeoutId||!leading);if(maxWait===false){var leadingCall=leading&&!timeoutId}else{if(!maxTimeoutId&&!leading){lastCalled=stamp}var remaining=maxWait-(stamp-lastCalled),isCalled=remaining<=0||remaining>maxWait;if(isCalled){if(maxTimeoutId){maxTimeoutId=clearTimeout(maxTimeoutId)}lastCalled=stamp;result=func.apply(thisArg,args)}else if(!maxTimeoutId){maxTimeoutId=setTimeout(maxDelayed,remaining)}}if(isCalled&&timeoutId){timeoutId=clearTimeout(timeoutId)}else if(!timeoutId&&wait!==maxWait){timeoutId=setTimeout(delayed,wait)}if(leadingCall){isCalled=true;result=func.apply(thisArg,args)}if(isCalled&&!timeoutId&&!maxTimeoutId){args=thisArg=undefined}return result}debounced.cancel=cancel;return debounced}
+/**
+ * Defers invoking the `func` until the current call stack has cleared. Any
+ * additional arguments are provided to `func` when it is invoked.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to defer.
+ * @param {...*} [args] The arguments to invoke the function with.
+ * @returns {number} Returns the timer id.
+ * @example
+ *
+ * _.defer(function(text) {
+ * console.log(text);
+ * }, 'deferred');
+ * // logs 'deferred' after one or more milliseconds
+ */var defer=restParam(function(func,args){return baseDelay(func,1,args)});
+/**
+ * Invokes `func` after `wait` milliseconds. Any additional arguments are
+ * provided to `func` when it is invoked.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to delay.
+ * @param {number} wait The number of milliseconds to delay invocation.
+ * @param {...*} [args] The arguments to invoke the function with.
+ * @returns {number} Returns the timer id.
+ * @example
+ *
+ * _.delay(function(text) {
+ * console.log(text);
+ * }, 1000, 'later');
+ * // => logs 'later' after one second
+ */var delay=restParam(function(func,wait,args){return baseDelay(func,wait,args)});
+/**
+ * Creates a function that returns the result of invoking the provided
+ * functions with the `this` binding of the created function, where each
+ * successive invocation is supplied the return value of the previous.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {...Function} [funcs] Functions to invoke.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * var addSquare = _.flow(_.add, square);
+ * addSquare(1, 2);
+ * // => 9
+ */var flow=createFlow();
+/**
+ * This method is like `_.flow` except that it creates a function that
+ * invokes the provided functions from right to left.
+ *
+ * @static
+ * @memberOf _
+ * @alias backflow, compose
+ * @category Function
+ * @param {...Function} [funcs] Functions to invoke.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * var addSquare = _.flowRight(square, _.add);
+ * addSquare(1, 2);
+ * // => 9
+ */var flowRight=createFlow(true);
+/**
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * provided it determines the cache key for storing the result based on the
+ * arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is coerced to a string and used as the
+ * cache key. The `func` is invoked with the `this` binding of the memoized
+ * function.
+ *
+ * **Note:** The cache is exposed as the `cache` property on the memoized
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
+ * constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object)
+ * method interface of `get`, `has`, and `set`.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @returns {Function} Returns the new memoizing function.
+ * @example
+ *
+ * var upperCase = _.memoize(function(string) {
+ * return string.toUpperCase();
+ * });
+ *
+ * upperCase('fred');
+ * // => 'FRED'
+ *
+ * // modifying the result cache
+ * upperCase.cache.set('fred', 'BARNEY');
+ * upperCase('fred');
+ * // => 'BARNEY'
+ *
+ * // replacing `_.memoize.Cache`
+ * var object = { 'user': 'fred' };
+ * var other = { 'user': 'barney' };
+ * var identity = _.memoize(_.identity);
+ *
+ * identity(object);
+ * // => { 'user': 'fred' }
+ * identity(other);
+ * // => { 'user': 'fred' }
+ *
+ * _.memoize.Cache = WeakMap;
+ * var identity = _.memoize(_.identity);
+ *
+ * identity(object);
+ * // => { 'user': 'fred' }
+ * identity(other);
+ * // => { 'user': 'barney' }
+ */function memoize(func,resolver){if(typeof func!="function"||resolver&&typeof resolver!="function"){throw new TypeError(FUNC_ERROR_TEXT)}var memoized=function(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache=memoized.cache;if(cache.has(key)){return cache.get(key)}var result=func.apply(this,args);memoized.cache=cache.set(key,result);return result};memoized.cache=new memoize.Cache;return memoized}
+/**
+ * Creates a function that runs each argument through a corresponding
+ * transform function.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to wrap.
+ * @param {...(Function|Function[])} [transforms] The functions to transform
+ * arguments, specified as individual functions or arrays of functions.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * function doubled(n) {
+ * return n * 2;
+ * }
+ *
+ * function square(n) {
+ * return n * n;
+ * }
+ *
+ * var modded = _.modArgs(function(x, y) {
+ * return [x, y];
+ * }, square, doubled);
+ *
+ * modded(1, 2);
+ * // => [1, 4]
+ *
+ * modded(5, 10);
+ * // => [25, 20]
+ */var modArgs=restParam(function(func,transforms){transforms=baseFlatten(transforms);if(typeof func!="function"||!arrayEvery(transforms,baseIsFunction)){throw new TypeError(FUNC_ERROR_TEXT)}var length=transforms.length;return restParam(function(args){var index=nativeMin(args.length,length);while(index--){args[index]=transforms[index](args[index])}return func.apply(this,args)})});
+/**
+ * Creates a function that negates the result of the predicate `func`. The
+ * `func` predicate is invoked with the `this` binding and arguments of the
+ * created function.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} predicate The predicate to negate.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * function isEven(n) {
+ * return n % 2 == 0;
+ * }
+ *
+ * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
+ * // => [1, 3, 5]
+ */function negate(predicate){if(typeof predicate!="function"){throw new TypeError(FUNC_ERROR_TEXT)}return function(){return!predicate.apply(this,arguments)}}
+/**
+ * Creates a function that is restricted to invoking `func` once. Repeat calls
+ * to the function return the value of the first call. The `func` is invoked
+ * with the `this` binding and arguments of the created function.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to restrict.
+ * @returns {Function} Returns the new restricted function.
+ * @example
+ *
+ * var initialize = _.once(createApplication);
+ * initialize();
+ * initialize();
+ * // `initialize` invokes `createApplication` once
+ */function once(func){return before(2,func)}
+/**
+ * Creates a function that invokes `func` with `partial` arguments prepended
+ * to those provided to the new function. This method is like `_.bind` except
+ * it does **not** alter the `this` binding.
+ *
+ * The `_.partial.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for partially applied arguments.
+ *
+ * **Note:** This method does not set the "length" property of partially
+ * applied functions.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new partially applied function.
+ * @example
+ *
+ * var greet = function(greeting, name) {
+ * return greeting + ' ' + name;
+ * };
+ *
+ * var sayHelloTo = _.partial(greet, 'hello');
+ * sayHelloTo('fred');
+ * // => 'hello fred'
+ *
+ * // using placeholders
+ * var greetFred = _.partial(greet, _, 'fred');
+ * greetFred('hi');
+ * // => 'hi fred'
+ */var partial=createPartial(PARTIAL_FLAG);
+/**
+ * This method is like `_.partial` except that partially applied arguments
+ * are appended to those provided to the new function.
+ *
+ * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
+ * builds, may be used as a placeholder for partially applied arguments.
+ *
+ * **Note:** This method does not set the "length" property of partially
+ * applied functions.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to partially apply arguments to.
+ * @param {...*} [partials] The arguments to be partially applied.
+ * @returns {Function} Returns the new partially applied function.
+ * @example
+ *
+ * var greet = function(greeting, name) {
+ * return greeting + ' ' + name;
+ * };
+ *
+ * var greetFred = _.partialRight(greet, 'fred');
+ * greetFred('hi');
+ * // => 'hi fred'
+ *
+ * // using placeholders
+ * var sayHelloTo = _.partialRight(greet, 'hello', _);
+ * sayHelloTo('fred');
+ * // => 'hello fred'
+ */var partialRight=createPartial(PARTIAL_RIGHT_FLAG);
+/**
+ * Creates a function that invokes `func` with arguments arranged according
+ * to the specified indexes where the argument value at the first index is
+ * provided as the first argument, the argument value at the second index is
+ * provided as the second argument, and so on.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to rearrange arguments for.
+ * @param {...(number|number[])} indexes The arranged argument indexes,
+ * specified as individual indexes or arrays of indexes.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var rearged = _.rearg(function(a, b, c) {
+ * return [a, b, c];
+ * }, 2, 0, 1);
+ *
+ * rearged('b', 'c', 'a')
+ * // => ['a', 'b', 'c']
+ *
+ * var map = _.rearg(_.map, [1, 0]);
+ * map(function(n) {
+ * return n * 3;
+ * }, [1, 2, 3]);
+ * // => [3, 6, 9]
+ */var rearg=restParam(function(func,indexes){return createWrapper(func,REARG_FLAG,undefined,undefined,undefined,baseFlatten(indexes))});
+/**
+ * Creates a function that invokes `func` with the `this` binding of the
+ * created function and arguments from `start` and beyond provided as an array.
+ *
+ * **Note:** This method is based on the [rest parameter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters).
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to apply a rest parameter to.
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.restParam(function(what, names) {
+ * return what + ' ' + _.initial(names).join(', ') +
+ * (_.size(names) > 1 ? ', & ' : '') + _.last(names);
+ * });
+ *
+ * say('hello', 'fred', 'barney', 'pebbles');
+ * // => 'hello fred, barney, & pebbles'
+ */function restParam(func,start){if(typeof func!="function"){throw new TypeError(FUNC_ERROR_TEXT)}start=nativeMax(start===undefined?func.length-1:+start||0,0);return function(){var args=arguments,index=-1,length=nativeMax(args.length-start,0),rest=Array(length);while(++index<length){rest[index]=args[start+index]}switch(start){case 0:return func.call(this,rest);case 1:return func.call(this,args[0],rest);case 2:return func.call(this,args[0],args[1],rest)}var otherArgs=Array(start+1);index=-1;while(++index<start){otherArgs[index]=args[index]}otherArgs[start]=rest;return func.apply(this,otherArgs)}}
+/**
+ * Creates a function that invokes `func` with the `this` binding of the created
+ * function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3).
+ *
+ * **Note:** This method is based on the [spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator).
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to spread arguments over.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var say = _.spread(function(who, what) {
+ * return who + ' says ' + what;
+ * });
+ *
+ * say(['fred', 'hello']);
+ * // => 'fred says hello'
+ *
+ * // with a Promise
+ * var numbers = Promise.all([
+ * Promise.resolve(40),
+ * Promise.resolve(36)
+ * ]);
+ *
+ * numbers.then(_.spread(function(x, y) {
+ * return x + y;
+ * }));
+ * // => a Promise of 76
+ */function spread(func){if(typeof func!="function"){throw new TypeError(FUNC_ERROR_TEXT)}return function(array){return func.apply(this,array)}}
+/**
+ * Creates a throttled function that only invokes `func` at most once per
+ * every `wait` milliseconds. The throttled function comes with a `cancel`
+ * method to cancel delayed invocations. Provide an options object to indicate
+ * that `func` should be invoked on the leading and/or trailing edge of the
+ * `wait` timeout. Subsequent calls to the throttled function return the
+ * result of the last `func` call.
+ *
+ * **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
+ * on the trailing edge of the timeout only if the the throttled function is
+ * invoked more than once during the `wait` timeout.
+ *
+ * See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
+ * for details over the differences between `_.throttle` and `_.debounce`.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {Function} func The function to throttle.
+ * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.leading=true] Specify invoking on the leading
+ * edge of the timeout.
+ * @param {boolean} [options.trailing=true] Specify invoking on the trailing
+ * edge of the timeout.
+ * @returns {Function} Returns the new throttled function.
+ * @example
+ *
+ * // avoid excessively updating the position while scrolling
+ * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
+ *
+ * // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes
+ * jQuery('.interactive').on('click', _.throttle(renewToken, 300000, {
+ * 'trailing': false
+ * }));
+ *
+ * // cancel a trailing throttled call
+ * jQuery(window).on('popstate', throttled.cancel);
+ */function throttle(func,wait,options){var leading=true,trailing=true;if(typeof func!="function"){throw new TypeError(FUNC_ERROR_TEXT)}if(options===false){leading=false}else if(isObject(options)){leading="leading"in options?!!options.leading:leading;trailing="trailing"in options?!!options.trailing:trailing}return debounce(func,wait,{leading:leading,maxWait:+wait,trailing:trailing})}
+/**
+ * Creates a function that provides `value` to the wrapper function as its
+ * first argument. Any additional arguments provided to the function are
+ * appended to those provided to the wrapper function. The wrapper is invoked
+ * with the `this` binding of the created function.
+ *
+ * @static
+ * @memberOf _
+ * @category Function
+ * @param {*} value The value to wrap.
+ * @param {Function} wrapper The wrapper function.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var p = _.wrap(_.escape, function(func, text) {
+ * return '<p>' + func(text) + '</p>';
+ * });
+ *
+ * p('fred, barney, & pebbles');
+ * // => '<p>fred, barney, &amp; pebbles</p>'
+ */function wrap(value,wrapper){wrapper=wrapper==null?identity:wrapper;return createWrapper(wrapper,PARTIAL_FLAG,undefined,[value],[])}
+/*------------------------------------------------------------------------*/
+/**
+ * Creates a clone of `value`. If `isDeep` is `true` nested objects are cloned,
+ * otherwise they are assigned by reference. If `customizer` is provided it is
+ * invoked to produce the cloned values. If `customizer` returns `undefined`
+ * cloning is handled by the method instead. The `customizer` is bound to
+ * `thisArg` and invoked with two argument; (value [, index|key, object]).
+ *
+ * **Note:** This method is loosely based on the
+ * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
+ * The enumerable properties of `arguments` objects and objects created by
+ * constructors other than `Object` are cloned to plain `Object` objects. An
+ * empty object is returned for uncloneable values such as functions, DOM nodes,
+ * Maps, Sets, and WeakMaps.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @param {Function} [customizer] The function to customize cloning values.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {*} Returns the cloned value.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney' },
+ * { 'user': 'fred' }
+ * ];
+ *
+ * var shallow = _.clone(users);
+ * shallow[0] === users[0];
+ * // => true
+ *
+ * var deep = _.clone(users, true);
+ * deep[0] === users[0];
+ * // => false
+ *
+ * // using a customizer callback
+ * var el = _.clone(document.body, function(value) {
+ * if (_.isElement(value)) {
+ * return value.cloneNode(false);
+ * }
+ * });
+ *
+ * el === document.body
+ * // => false
+ * el.nodeName
+ * // => BODY
+ * el.childNodes.length;
+ * // => 0
+ */function clone(value,isDeep,customizer,thisArg){if(isDeep&&typeof isDeep!="boolean"&&isIterateeCall(value,isDeep,customizer)){isDeep=false}else if(typeof isDeep=="function"){thisArg=customizer;customizer=isDeep;isDeep=false}return typeof customizer=="function"?baseClone(value,isDeep,bindCallback(customizer,thisArg,1)):baseClone(value,isDeep)}
+/**
+ * Creates a deep clone of `value`. If `customizer` is provided it is invoked
+ * to produce the cloned values. If `customizer` returns `undefined` cloning
+ * is handled by the method instead. The `customizer` is bound to `thisArg`
+ * and invoked with two argument; (value [, index|key, object]).
+ *
+ * **Note:** This method is loosely based on the
+ * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm).
+ * The enumerable properties of `arguments` objects and objects created by
+ * constructors other than `Object` are cloned to plain `Object` objects. An
+ * empty object is returned for uncloneable values such as functions, DOM nodes,
+ * Maps, Sets, and WeakMaps.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to deep clone.
+ * @param {Function} [customizer] The function to customize cloning values.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {*} Returns the deep cloned value.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney' },
+ * { 'user': 'fred' }
+ * ];
+ *
+ * var deep = _.cloneDeep(users);
+ * deep[0] === users[0];
+ * // => false
+ *
+ * // using a customizer callback
+ * var el = _.cloneDeep(document.body, function(value) {
+ * if (_.isElement(value)) {
+ * return value.cloneNode(true);
+ * }
+ * });
+ *
+ * el === document.body
+ * // => false
+ * el.nodeName
+ * // => BODY
+ * el.childNodes.length;
+ * // => 20
+ */function cloneDeep(value,customizer,thisArg){return typeof customizer=="function"?baseClone(value,true,bindCallback(customizer,thisArg,1)):baseClone(value,true)}
+/**
+ * Checks if `value` is greater than `other`.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`.
+ * @example
+ *
+ * _.gt(3, 1);
+ * // => true
+ *
+ * _.gt(3, 3);
+ * // => false
+ *
+ * _.gt(1, 3);
+ * // => false
+ */function gt(value,other){return value>other}
+/**
+ * Checks if `value` is greater than or equal to `other`.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is greater than or equal to `other`, else `false`.
+ * @example
+ *
+ * _.gte(3, 1);
+ * // => true
+ *
+ * _.gte(3, 3);
+ * // => true
+ *
+ * _.gte(1, 3);
+ * // => false
+ */function gte(value,other){return value>=other}
+/**
+ * Checks if `value` is classified as an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */function isArguments(value){return isObjectLike(value)&&isArrayLike(value)&&hasOwnProperty.call(value,"callee")&&!propertyIsEnumerable.call(value,"callee")}
+/**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(function() { return arguments; }());
+ * // => false
+ */var isArray=nativeIsArray||function(value){return isObjectLike(value)&&isLength(value.length)&&objToString.call(value)==arrayTag};
+/**
+ * Checks if `value` is classified as a boolean primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isBoolean(false);
+ * // => true
+ *
+ * _.isBoolean(null);
+ * // => false
+ */function isBoolean(value){return value===true||value===false||isObjectLike(value)&&objToString.call(value)==boolTag}
+/**
+ * Checks if `value` is classified as a `Date` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isDate(new Date);
+ * // => true
+ *
+ * _.isDate('Mon April 23 2012');
+ * // => false
+ */function isDate(value){return isObjectLike(value)&&objToString.call(value)==dateTag}
+/**
+ * Checks if `value` is a DOM element.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
+ * @example
+ *
+ * _.isElement(document.body);
+ * // => true
+ *
+ * _.isElement('<body>');
+ * // => false
+ */function isElement(value){return!!value&&value.nodeType===1&&isObjectLike(value)&&!isPlainObject(value)}
+/**
+ * Checks if `value` is empty. A value is considered empty unless it is an
+ * `arguments` object, array, string, or jQuery-like collection with a length
+ * greater than `0` or an object with own enumerable properties.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {Array|Object|string} value The value to inspect.
+ * @returns {boolean} Returns `true` if `value` is empty, else `false`.
+ * @example
+ *
+ * _.isEmpty(null);
+ * // => true
+ *
+ * _.isEmpty(true);
+ * // => true
+ *
+ * _.isEmpty(1);
+ * // => true
+ *
+ * _.isEmpty([1, 2, 3]);
+ * // => false
+ *
+ * _.isEmpty({ 'a': 1 });
+ * // => false
+ */function isEmpty(value){if(value==null){return true}if(isArrayLike(value)&&(isArray(value)||isString(value)||isArguments(value)||isObjectLike(value)&&isFunction(value.splice))){return!value.length}return!keys(value).length}
+/**
+ * Performs a deep comparison between two values to determine if they are
+ * equivalent. If `customizer` is provided it is invoked to compare values.
+ * If `customizer` returns `undefined` comparisons are handled by the method
+ * instead. The `customizer` is bound to `thisArg` and invoked with three
+ * arguments: (value, other [, index|key]).
+ *
+ * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+ * numbers, `Object` objects, regexes, and strings. Objects are compared by
+ * their own, not inherited, enumerable properties. Functions and DOM nodes
+ * are **not** supported. Provide a customizer function to extend support
+ * for comparing other values.
+ *
+ * @static
+ * @memberOf _
+ * @alias eq
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @param {Function} [customizer] The function to customize value comparisons.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ * var other = { 'user': 'fred' };
+ *
+ * object == other;
+ * // => false
+ *
+ * _.isEqual(object, other);
+ * // => true
+ *
+ * // using a customizer callback
+ * var array = ['hello', 'goodbye'];
+ * var other = ['hi', 'goodbye'];
+ *
+ * _.isEqual(array, other, function(value, other) {
+ * if (_.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/)) {
+ * return true;
+ * }
+ * });
+ * // => true
+ */function isEqual(value,other,customizer,thisArg){customizer=typeof customizer=="function"?bindCallback(customizer,thisArg,3):undefined;var result=customizer?customizer(value,other):undefined;return result===undefined?baseIsEqual(value,other,customizer):!!result}
+/**
+ * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
+ * `SyntaxError`, `TypeError`, or `URIError` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
+ * @example
+ *
+ * _.isError(new Error);
+ * // => true
+ *
+ * _.isError(Error);
+ * // => false
+ */function isError(value){return isObjectLike(value)&&typeof value.message=="string"&&objToString.call(value)==errorTag}
+/**
+ * Checks if `value` is a finite primitive number.
+ *
+ * **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite).
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
+ * @example
+ *
+ * _.isFinite(10);
+ * // => true
+ *
+ * _.isFinite('10');
+ * // => false
+ *
+ * _.isFinite(true);
+ * // => false
+ *
+ * _.isFinite(Object(10));
+ * // => false
+ *
+ * _.isFinite(Infinity);
+ * // => false
+ */function isFinite(value){return typeof value=="number"&&nativeIsFinite(value)}
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */function isFunction(value){
+// The use of `Object#toString` avoids issues with the `typeof` operator
+// in older versions of Chrome and Safari which return 'function' for regexes
+// and Safari 8 equivalents which return 'object' for typed array constructors.
+return isObject(value)&&objToString.call(value)==funcTag}
+/**
+ * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
+ * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(1);
+ * // => false
+ */function isObject(value){
+// Avoid a V8 JIT bug in Chrome 19-20.
+// See https://code.google.com/p/v8/issues/detail?id=2291 for more details.
+var type=typeof value;return!!value&&(type=="object"||type=="function")}
+/**
+ * Performs a deep comparison between `object` and `source` to determine if
+ * `object` contains equivalent property values. If `customizer` is provided
+ * it is invoked to compare values. If `customizer` returns `undefined`
+ * comparisons are handled by the method instead. The `customizer` is bound
+ * to `thisArg` and invoked with three arguments: (value, other, index|key).
+ *
+ * **Note:** This method supports comparing properties of arrays, booleans,
+ * `Date` objects, numbers, `Object` objects, regexes, and strings. Functions
+ * and DOM nodes are **not** supported. Provide a customizer function to extend
+ * support for comparing other values.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {Object} object The object to inspect.
+ * @param {Object} source The object of property values to match.
+ * @param {Function} [customizer] The function to customize value comparisons.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
+ * @example
+ *
+ * var object = { 'user': 'fred', 'age': 40 };
+ *
+ * _.isMatch(object, { 'age': 40 });
+ * // => true
+ *
+ * _.isMatch(object, { 'age': 36 });
+ * // => false
+ *
+ * // using a customizer callback
+ * var object = { 'greeting': 'hello' };
+ * var source = { 'greeting': 'hi' };
+ *
+ * _.isMatch(object, source, function(value, other) {
+ * return _.every([value, other], RegExp.prototype.test, /^h(?:i|ello)$/) || undefined;
+ * });
+ * // => true
+ */function isMatch(object,source,customizer,thisArg){customizer=typeof customizer=="function"?bindCallback(customizer,thisArg,3):undefined;return baseIsMatch(object,getMatchData(source),customizer)}
+/**
+ * Checks if `value` is `NaN`.
+ *
+ * **Note:** This method is not the same as [`isNaN`](https://es5.github.io/#x15.1.2.4)
+ * which returns `true` for `undefined` and other non-numeric values.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
+ * @example
+ *
+ * _.isNaN(NaN);
+ * // => true
+ *
+ * _.isNaN(new Number(NaN));
+ * // => true
+ *
+ * isNaN(undefined);
+ * // => true
+ *
+ * _.isNaN(undefined);
+ * // => false
+ */function isNaN(value){
+// An `NaN` primitive is the only value that is not equal to itself.
+// Perform the `toStringTag` check first to avoid errors with some host objects in IE.
+return isNumber(value)&&value!=+value}
+/**
+ * Checks if `value` is a native function.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function, else `false`.
+ * @example
+ *
+ * _.isNative(Array.prototype.push);
+ * // => true
+ *
+ * _.isNative(_);
+ * // => false
+ */function isNative(value){if(value==null){return false}if(isFunction(value)){return reIsNative.test(fnToString.call(value))}return isObjectLike(value)&&reIsHostCtor.test(value)}
+/**
+ * Checks if `value` is `null`.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
+ * @example
+ *
+ * _.isNull(null);
+ * // => true
+ *
+ * _.isNull(void 0);
+ * // => false
+ */function isNull(value){return value===null}
+/**
+ * Checks if `value` is classified as a `Number` primitive or object.
+ *
+ * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are classified
+ * as numbers, use the `_.isFinite` method.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isNumber(8.4);
+ * // => true
+ *
+ * _.isNumber(NaN);
+ * // => true
+ *
+ * _.isNumber('8.4');
+ * // => false
+ */function isNumber(value){return typeof value=="number"||isObjectLike(value)&&objToString.call(value)==numberTag}
+/**
+ * Checks if `value` is a plain object, that is, an object created by the
+ * `Object` constructor or one with a `[[Prototype]]` of `null`.
+ *
+ * **Note:** This method assumes objects created by the `Object` constructor
+ * have no inherited enumerable properties.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * }
+ *
+ * _.isPlainObject(new Foo);
+ * // => false
+ *
+ * _.isPlainObject([1, 2, 3]);
+ * // => false
+ *
+ * _.isPlainObject({ 'x': 0, 'y': 0 });
+ * // => true
+ *
+ * _.isPlainObject(Object.create(null));
+ * // => true
+ */function isPlainObject(value){var Ctor;
+// Exit early for non `Object` objects.
+if(!(isObjectLike(value)&&objToString.call(value)==objectTag&&!isArguments(value))||!hasOwnProperty.call(value,"constructor")&&(Ctor=value.constructor,typeof Ctor=="function"&&!(Ctor instanceof Ctor))){return false}
+// IE < 9 iterates inherited properties before own properties. If the first
+// iterated property is an object's own property then there are no inherited
+// enumerable properties.
+var result;
+// In most environments an object's own properties are iterated before
+// its inherited properties. If the last iterated property is an object's
+// own property then there are no inherited enumerable properties.
+baseForIn(value,function(subValue,key){result=key});return result===undefined||hasOwnProperty.call(value,result)}
+/**
+ * Checks if `value` is classified as a `RegExp` object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isRegExp(/abc/);
+ * // => true
+ *
+ * _.isRegExp('/abc/');
+ * // => false
+ */function isRegExp(value){return isObject(value)&&objToString.call(value)==regexpTag}
+/**
+ * Checks if `value` is classified as a `String` primitive or object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isString('abc');
+ * // => true
+ *
+ * _.isString(1);
+ * // => false
+ */function isString(value){return typeof value=="string"||isObjectLike(value)&&objToString.call(value)==stringTag}
+/**
+ * Checks if `value` is classified as a typed array.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
+ * @example
+ *
+ * _.isTypedArray(new Uint8Array);
+ * // => true
+ *
+ * _.isTypedArray([]);
+ * // => false
+ */function isTypedArray(value){return isObjectLike(value)&&isLength(value.length)&&!!typedArrayTags[objToString.call(value)]}
+/**
+ * Checks if `value` is `undefined`.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
+ * @example
+ *
+ * _.isUndefined(void 0);
+ * // => true
+ *
+ * _.isUndefined(null);
+ * // => false
+ */function isUndefined(value){return value===undefined}
+/**
+ * Checks if `value` is less than `other`.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is less than `other`, else `false`.
+ * @example
+ *
+ * _.lt(1, 3);
+ * // => true
+ *
+ * _.lt(3, 3);
+ * // => false
+ *
+ * _.lt(3, 1);
+ * // => false
+ */function lt(value,other){return value<other}
+/**
+ * Checks if `value` is less than or equal to `other`.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if `value` is less than or equal to `other`, else `false`.
+ * @example
+ *
+ * _.lte(1, 3);
+ * // => true
+ *
+ * _.lte(3, 3);
+ * // => true
+ *
+ * _.lte(3, 1);
+ * // => false
+ */function lte(value,other){return value<=other}
+/**
+ * Converts `value` to an array.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {Array} Returns the converted array.
+ * @example
+ *
+ * (function() {
+ * return _.toArray(arguments).slice(1);
+ * }(1, 2, 3));
+ * // => [2, 3]
+ */function toArray(value){var length=value?getLength(value):0;if(!isLength(length)){return values(value)}if(!length){return[]}return arrayCopy(value)}
+/**
+ * Converts `value` to a plain object flattening inherited enumerable
+ * properties of `value` to own properties of the plain object.
+ *
+ * @static
+ * @memberOf _
+ * @category Lang
+ * @param {*} value The value to convert.
+ * @returns {Object} Returns the converted plain object.
+ * @example
+ *
+ * function Foo() {
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.assign({ 'a': 1 }, new Foo);
+ * // => { 'a': 1, 'b': 2 }
+ *
+ * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
+ * // => { 'a': 1, 'b': 2, 'c': 3 }
+ */function toPlainObject(value){return baseCopy(value,keysIn(value))}
+/*------------------------------------------------------------------------*/
+/**
+ * Recursively merges own enumerable properties of the source object(s), that
+ * don't resolve to `undefined` into the destination object. Subsequent sources
+ * overwrite property assignments of previous sources. If `customizer` is
+ * provided it is invoked to produce the merged values of the destination and
+ * source properties. If `customizer` returns `undefined` merging is handled
+ * by the method instead. The `customizer` is bound to `thisArg` and invoked
+ * with five arguments: (objectValue, sourceValue, key, object, source).
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var users = {
+ * 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
+ * };
+ *
+ * var ages = {
+ * 'data': [{ 'age': 36 }, { 'age': 40 }]
+ * };
+ *
+ * _.merge(users, ages);
+ * // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
+ *
+ * // using a customizer callback
+ * var object = {
+ * 'fruits': ['apple'],
+ * 'vegetables': ['beet']
+ * };
+ *
+ * var other = {
+ * 'fruits': ['banana'],
+ * 'vegetables': ['carrot']
+ * };
+ *
+ * _.merge(object, other, function(a, b) {
+ * if (_.isArray(a)) {
+ * return a.concat(b);
+ * }
+ * });
+ * // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
+ */var merge=createAssigner(baseMerge);
+/**
+ * Assigns own enumerable properties of source object(s) to the destination
+ * object. Subsequent sources overwrite property assignments of previous sources.
+ * If `customizer` is provided it is invoked to produce the assigned values.
+ * The `customizer` is bound to `thisArg` and invoked with five arguments:
+ * (objectValue, sourceValue, key, object, source).
+ *
+ * **Note:** This method mutates `object` and is based on
+ * [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign).
+ *
+ * @static
+ * @memberOf _
+ * @alias extend
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @param {Function} [customizer] The function to customize assigned values.
+ * @param {*} [thisArg] The `this` binding of `customizer`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' });
+ * // => { 'user': 'fred', 'age': 40 }
+ *
+ * // using a customizer callback
+ * var defaults = _.partialRight(_.assign, function(value, other) {
+ * return _.isUndefined(value) ? other : value;
+ * });
+ *
+ * defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
+ * // => { 'user': 'barney', 'age': 36 }
+ */var assign=createAssigner(function(object,source,customizer){return customizer?assignWith(object,source,customizer):baseAssign(object,source)});
+/**
+ * Creates an object that inherits from the given `prototype` object. If a
+ * `properties` object is provided its own enumerable properties are assigned
+ * to the created object.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} prototype The object to inherit from.
+ * @param {Object} [properties] The properties to assign to the object.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * function Shape() {
+ * this.x = 0;
+ * this.y = 0;
+ * }
+ *
+ * function Circle() {
+ * Shape.call(this);
+ * }
+ *
+ * Circle.prototype = _.create(Shape.prototype, {
+ * 'constructor': Circle
+ * });
+ *
+ * var circle = new Circle;
+ * circle instanceof Circle;
+ * // => true
+ *
+ * circle instanceof Shape;
+ * // => true
+ */function create(prototype,properties,guard){var result=baseCreate(prototype);if(guard&&isIterateeCall(prototype,properties,guard)){properties=undefined}return properties?baseAssign(result,properties):result}
+/**
+ * Assigns own enumerable properties of source object(s) to the destination
+ * object for all destination properties that resolve to `undefined`. Once a
+ * property is set, additional values of the same property are ignored.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
+ * // => { 'user': 'barney', 'age': 36 }
+ */var defaults=createDefaults(assign,assignDefaults);
+/**
+ * This method is like `_.defaults` except that it recursively assigns
+ * default properties.
+ *
+ * **Note:** This method mutates `object`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The destination object.
+ * @param {...Object} [sources] The source objects.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } });
+ * // => { 'user': { 'name': 'barney', 'age': 36 } }
+ *
+ */var defaultsDeep=createDefaults(merge,mergeDefaults);
+/**
+ * This method is like `_.find` except that it returns the key of the first
+ * element `predicate` returns truthy for instead of the element itself.
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {string|undefined} Returns the key of the matched element, else `undefined`.
+ * @example
+ *
+ * var users = {
+ * 'barney': { 'age': 36, 'active': true },
+ * 'fred': { 'age': 40, 'active': false },
+ * 'pebbles': { 'age': 1, 'active': true }
+ * };
+ *
+ * _.findKey(users, function(chr) {
+ * return chr.age < 40;
+ * });
+ * // => 'barney' (iteration order is not guaranteed)
+ *
+ * // using the `_.matches` callback shorthand
+ * _.findKey(users, { 'age': 1, 'active': true });
+ * // => 'pebbles'
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.findKey(users, 'active', false);
+ * // => 'fred'
+ *
+ * // using the `_.property` callback shorthand
+ * _.findKey(users, 'active');
+ * // => 'barney'
+ */var findKey=createFindKey(baseForOwn);
+/**
+ * This method is like `_.findKey` except that it iterates over elements of
+ * a collection in the opposite order.
+ *
+ * If a property name is provided for `predicate` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `predicate` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to search.
+ * @param {Function|Object|string} [predicate=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {string|undefined} Returns the key of the matched element, else `undefined`.
+ * @example
+ *
+ * var users = {
+ * 'barney': { 'age': 36, 'active': true },
+ * 'fred': { 'age': 40, 'active': false },
+ * 'pebbles': { 'age': 1, 'active': true }
+ * };
+ *
+ * _.findLastKey(users, function(chr) {
+ * return chr.age < 40;
+ * });
+ * // => returns `pebbles` assuming `_.findKey` returns `barney`
+ *
+ * // using the `_.matches` callback shorthand
+ * _.findLastKey(users, { 'age': 36, 'active': true });
+ * // => 'barney'
+ *
+ * // using the `_.matchesProperty` callback shorthand
+ * _.findLastKey(users, 'active', false);
+ * // => 'fred'
+ *
+ * // using the `_.property` callback shorthand
+ * _.findLastKey(users, 'active');
+ * // => 'pebbles'
+ */var findLastKey=createFindKey(baseForOwnRight);
+/**
+ * Iterates over own and inherited enumerable properties of an object invoking
+ * `iteratee` for each property. The `iteratee` is bound to `thisArg` and invoked
+ * with three arguments: (value, key, object). Iteratee functions may exit
+ * iteration early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forIn(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => logs 'a', 'b', and 'c' (iteration order is not guaranteed)
+ */var forIn=createForIn(baseFor);
+/**
+ * This method is like `_.forIn` except that it iterates over properties of
+ * `object` in the opposite order.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forInRight(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => logs 'c', 'b', and 'a' assuming `_.forIn ` logs 'a', 'b', and 'c'
+ */var forInRight=createForIn(baseForRight);
+/**
+ * Iterates over own enumerable properties of an object invoking `iteratee`
+ * for each property. The `iteratee` is bound to `thisArg` and invoked with
+ * three arguments: (value, key, object). Iteratee functions may exit iteration
+ * early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forOwn(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => logs 'a' and 'b' (iteration order is not guaranteed)
+ */var forOwn=createForOwn(baseForOwn);
+/**
+ * This method is like `_.forOwn` except that it iterates over properties of
+ * `object` in the opposite order.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.forOwnRight(new Foo, function(value, key) {
+ * console.log(key);
+ * });
+ * // => logs 'b' and 'a' assuming `_.forOwn` logs 'a' and 'b'
+ */var forOwnRight=createForOwn(baseForOwnRight);
+/**
+ * Creates an array of function property names from all enumerable properties,
+ * own and inherited, of `object`.
+ *
+ * @static
+ * @memberOf _
+ * @alias methods
+ * @category Object
+ * @param {Object} object The object to inspect.
+ * @returns {Array} Returns the new array of property names.
+ * @example
+ *
+ * _.functions(_);
+ * // => ['after', 'ary', 'assign', ...]
+ */function functions(object){return baseFunctions(object,keysIn(object))}
+/**
+ * Gets the property value at `path` of `object`. If the resolved value is
+ * `undefined` the `defaultValue` is used in its place.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to get.
+ * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.get(object, 'a[0].b.c');
+ * // => 3
+ *
+ * _.get(object, ['a', '0', 'b', 'c']);
+ * // => 3
+ *
+ * _.get(object, 'a.b.c', 'default');
+ * // => 'default'
+ */function get(object,path,defaultValue){var result=object==null?undefined:baseGet(object,toPath(path),path+"");return result===undefined?defaultValue:result}
+/**
+ * Checks if `path` is a direct property.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path to check.
+ * @returns {boolean} Returns `true` if `path` is a direct property, else `false`.
+ * @example
+ *
+ * var object = { 'a': { 'b': { 'c': 3 } } };
+ *
+ * _.has(object, 'a');
+ * // => true
+ *
+ * _.has(object, 'a.b.c');
+ * // => true
+ *
+ * _.has(object, ['a', 'b', 'c']);
+ * // => true
+ */function has(object,path){if(object==null){return false}var result=hasOwnProperty.call(object,path);if(!result&&!isKey(path)){path=toPath(path);object=path.length==1?object:baseGet(object,baseSlice(path,0,-1));if(object==null){return false}path=last(path);result=hasOwnProperty.call(object,path)}return result||isLength(object.length)&&isIndex(path,object.length)&&(isArray(object)||isArguments(object))}
+/**
+ * Creates an object composed of the inverted keys and values of `object`.
+ * If `object` contains duplicate values, subsequent values overwrite property
+ * assignments of previous values unless `multiValue` is `true`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to invert.
+ * @param {boolean} [multiValue] Allow multiple values per key.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Object} Returns the new inverted object.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2, 'c': 1 };
+ *
+ * _.invert(object);
+ * // => { '1': 'c', '2': 'b' }
+ *
+ * // with `multiValue`
+ * _.invert(object, true);
+ * // => { '1': ['a', 'c'], '2': ['b'] }
+ */function invert(object,multiValue,guard){if(guard&&isIterateeCall(object,multiValue,guard)){multiValue=undefined}var index=-1,props=keys(object),length=props.length,result={};while(++index<length){var key=props[index],value=object[key];if(multiValue){if(hasOwnProperty.call(result,value)){result[value].push(key)}else{result[value]=[key]}}else{result[value]=key}}return result}
+/**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */var keys=!nativeKeys?shimKeys:function(object){var Ctor=object==null?undefined:object.constructor;if(typeof Ctor=="function"&&Ctor.prototype===object||typeof object!="function"&&isArrayLike(object)){return shimKeys(object)}return isObject(object)?nativeKeys(object):[]};
+/**
+ * Creates an array of the own and inherited enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keysIn(new Foo);
+ * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
+ */function keysIn(object){if(object==null){return[]}if(!isObject(object)){object=Object(object)}var length=object.length;length=length&&isLength(length)&&(isArray(object)||isArguments(object))&&length||0;var Ctor=object.constructor,index=-1,isProto=typeof Ctor=="function"&&Ctor.prototype===object,result=Array(length),skipIndexes=length>0;while(++index<length){result[index]=index+""}for(var key in object){if(!(skipIndexes&&isIndex(key,length))&&!(key=="constructor"&&(isProto||!hasOwnProperty.call(object,key)))){result.push(key)}}return result}
+/**
+ * The opposite of `_.mapValues`; this method creates an object with the
+ * same values as `object` and keys generated by running each own enumerable
+ * property of `object` through `iteratee`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns the new mapped object.
+ * @example
+ *
+ * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
+ * return key + value;
+ * });
+ * // => { 'a1': 1, 'b2': 2 }
+ */var mapKeys=createObjectMapper(true);
+/**
+ * Creates an object with the same keys as `object` and values generated by
+ * running each own enumerable property of `object` through `iteratee`. The
+ * iteratee function is bound to `thisArg` and invoked with three arguments:
+ * (value, key, object).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to iterate over.
+ * @param {Function|Object|string} [iteratee=_.identity] The function invoked
+ * per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Object} Returns the new mapped object.
+ * @example
+ *
+ * _.mapValues({ 'a': 1, 'b': 2 }, function(n) {
+ * return n * 3;
+ * });
+ * // => { 'a': 3, 'b': 6 }
+ *
+ * var users = {
+ * 'fred': { 'user': 'fred', 'age': 40 },
+ * 'pebbles': { 'user': 'pebbles', 'age': 1 }
+ * };
+ *
+ * // using the `_.property` callback shorthand
+ * _.mapValues(users, 'age');
+ * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
+ */var mapValues=createObjectMapper();
+/**
+ * The opposite of `_.pick`; this method creates an object composed of the
+ * own and inherited enumerable properties of `object` that are not omitted.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {Function|...(string|string[])} [predicate] The function invoked per
+ * iteration or property names to omit, specified as individual property
+ * names or arrays of property names.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'user': 'fred', 'age': 40 };
+ *
+ * _.omit(object, 'age');
+ * // => { 'user': 'fred' }
+ *
+ * _.omit(object, _.isNumber);
+ * // => { 'user': 'fred' }
+ */var omit=restParam(function(object,props){if(object==null){return{}}if(typeof props[0]!="function"){var props=arrayMap(baseFlatten(props),String);return pickByArray(object,baseDifference(keysIn(object),props))}var predicate=bindCallback(props[0],props[1],3);return pickByCallback(object,function(value,key,object){return!predicate(value,key,object)})});
+/**
+ * Creates a two dimensional array of the key-value pairs for `object`,
+ * e.g. `[[key1, value1], [key2, value2]]`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the new array of key-value pairs.
+ * @example
+ *
+ * _.pairs({ 'barney': 36, 'fred': 40 });
+ * // => [['barney', 36], ['fred', 40]] (iteration order is not guaranteed)
+ */function pairs(object){object=toObject(object);var index=-1,props=keys(object),length=props.length,result=Array(length);while(++index<length){var key=props[index];result[index]=[key,object[key]]}return result}
+/**
+ * Creates an object composed of the picked `object` properties. Property
+ * names may be specified as individual arguments or as arrays of property
+ * names. If `predicate` is provided it is invoked for each property of `object`
+ * picking the properties `predicate` returns truthy for. The predicate is
+ * bound to `thisArg` and invoked with three arguments: (value, key, object).
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The source object.
+ * @param {Function|...(string|string[])} [predicate] The function invoked per
+ * iteration or property names to pick, specified as individual property
+ * names or arrays of property names.
+ * @param {*} [thisArg] The `this` binding of `predicate`.
+ * @returns {Object} Returns the new object.
+ * @example
+ *
+ * var object = { 'user': 'fred', 'age': 40 };
+ *
+ * _.pick(object, 'user');
+ * // => { 'user': 'fred' }
+ *
+ * _.pick(object, _.isString);
+ * // => { 'user': 'fred' }
+ */var pick=restParam(function(object,props){if(object==null){return{}}return typeof props[0]=="function"?pickByCallback(object,bindCallback(props[0],props[1],3)):pickByArray(object,baseFlatten(props))});
+/**
+ * This method is like `_.get` except that if the resolved value is a function
+ * it is invoked with the `this` binding of its parent object and its result
+ * is returned.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @param {Array|string} path The path of the property to resolve.
+ * @param {*} [defaultValue] The value returned if the resolved value is `undefined`.
+ * @returns {*} Returns the resolved value.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
+ *
+ * _.result(object, 'a[0].b.c1');
+ * // => 3
+ *
+ * _.result(object, 'a[0].b.c2');
+ * // => 4
+ *
+ * _.result(object, 'a.b.c', 'default');
+ * // => 'default'
+ *
+ * _.result(object, 'a.b.c', _.constant('default'));
+ * // => 'default'
+ */function result(object,path,defaultValue){var result=object==null?undefined:object[path];if(result===undefined){if(object!=null&&!isKey(path,object)){path=toPath(path);object=path.length==1?object:baseGet(object,baseSlice(path,0,-1));result=object==null?undefined:object[last(path)]}result=result===undefined?defaultValue:result}return isFunction(result)?result.call(object):result}
+/**
+ * Sets the property value of `path` on `object`. If a portion of `path`
+ * does not exist it is created.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to augment.
+ * @param {Array|string} path The path of the property to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns `object`.
+ * @example
+ *
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
+ *
+ * _.set(object, 'a[0].b.c', 4);
+ * console.log(object.a[0].b.c);
+ * // => 4
+ *
+ * _.set(object, 'x[0].y.z', 5);
+ * console.log(object.x[0].y.z);
+ * // => 5
+ */function set(object,path,value){if(object==null){return object}var pathKey=path+"";path=object[pathKey]!=null||isKey(path,object)?[pathKey]:toPath(path);var index=-1,length=path.length,lastIndex=length-1,nested=object;while(nested!=null&&++index<length){var key=path[index];if(isObject(nested)){if(index==lastIndex){nested[key]=value}else if(nested[key]==null){nested[key]=isIndex(path[index+1])?[]:{}}}nested=nested[key]}return object}
+/**
+ * An alternative to `_.reduce`; this method transforms `object` to a new
+ * `accumulator` object which is the result of running each of its own enumerable
+ * properties through `iteratee`, with each invocation potentially mutating
+ * the `accumulator` object. The `iteratee` is bound to `thisArg` and invoked
+ * with four arguments: (accumulator, value, key, object). Iteratee functions
+ * may exit iteration early by explicitly returning `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Array|Object} object The object to iterate over.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [accumulator] The custom accumulator value.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {*} Returns the accumulated value.
+ * @example
+ *
+ * _.transform([2, 3, 4], function(result, n) {
+ * result.push(n *= n);
+ * return n % 2 == 0;
+ * });
+ * // => [4, 9]
+ *
+ * _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) {
+ * result[key] = n * 3;
+ * });
+ * // => { 'a': 3, 'b': 6 }
+ */function transform(object,iteratee,accumulator,thisArg){var isArr=isArray(object)||isTypedArray(object);iteratee=getCallback(iteratee,thisArg,4);if(accumulator==null){if(isArr||isObject(object)){var Ctor=object.constructor;if(isArr){accumulator=isArray(object)?new Ctor:[]}else{accumulator=baseCreate(isFunction(Ctor)?Ctor.prototype:undefined)}}else{accumulator={}}}(isArr?arrayEach:baseForOwn)(object,function(value,index,object){return iteratee(accumulator,value,index,object)});return accumulator}
+/**
+ * Creates an array of the own enumerable property values of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property values.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.values(new Foo);
+ * // => [1, 2] (iteration order is not guaranteed)
+ *
+ * _.values('hi');
+ * // => ['h', 'i']
+ */function values(object){return baseValues(object,keys(object))}
+/**
+ * Creates an array of the own and inherited enumerable property values
+ * of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects.
+ *
+ * @static
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property values.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.valuesIn(new Foo);
+ * // => [1, 2, 3] (iteration order is not guaranteed)
+ */function valuesIn(object){return baseValues(object,keysIn(object))}
+/*------------------------------------------------------------------------*/
+/**
+ * Checks if `n` is between `start` and up to but not including, `end`. If
+ * `end` is not specified it is set to `start` with `start` then set to `0`.
+ *
+ * @static
+ * @memberOf _
+ * @category Number
+ * @param {number} n The number to check.
+ * @param {number} [start=0] The start of the range.
+ * @param {number} end The end of the range.
+ * @returns {boolean} Returns `true` if `n` is in the range, else `false`.
+ * @example
+ *
+ * _.inRange(3, 2, 4);
+ * // => true
+ *
+ * _.inRange(4, 8);
+ * // => true
+ *
+ * _.inRange(4, 2);
+ * // => false
+ *
+ * _.inRange(2, 2);
+ * // => false
+ *
+ * _.inRange(1.2, 2);
+ * // => true
+ *
+ * _.inRange(5.2, 4);
+ * // => false
+ */function inRange(value,start,end){start=+start||0;if(end===undefined){end=start;start=0}else{end=+end||0}return value>=nativeMin(start,end)&&value<nativeMax(start,end)}
+/**
+ * Produces a random number between `min` and `max` (inclusive). If only one
+ * argument is provided a number between `0` and the given number is returned.
+ * If `floating` is `true`, or either `min` or `max` are floats, a floating-point
+ * number is returned instead of an integer.
+ *
+ * @static
+ * @memberOf _
+ * @category Number
+ * @param {number} [min=0] The minimum possible value.
+ * @param {number} [max=1] The maximum possible value.
+ * @param {boolean} [floating] Specify returning a floating-point number.
+ * @returns {number} Returns the random number.
+ * @example
+ *
+ * _.random(0, 5);
+ * // => an integer between 0 and 5
+ *
+ * _.random(5);
+ * // => also an integer between 0 and 5
+ *
+ * _.random(5, true);
+ * // => a floating-point number between 0 and 5
+ *
+ * _.random(1.2, 5.2);
+ * // => a floating-point number between 1.2 and 5.2
+ */function random(min,max,floating){if(floating&&isIterateeCall(min,max,floating)){max=floating=undefined}var noMin=min==null,noMax=max==null;if(floating==null){if(noMax&&typeof min=="boolean"){floating=min;min=1}else if(typeof max=="boolean"){floating=max;noMax=true}}if(noMin&&noMax){max=1;noMax=false}min=+min||0;if(noMax){max=min;min=0}else{max=+max||0}if(floating||min%1||max%1){var rand=nativeRandom();return nativeMin(min+rand*(max-min+parseFloat("1e-"+((rand+"").length-1))),max)}return baseRandom(min,max)}
+/*------------------------------------------------------------------------*/
+/**
+ * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the camel cased string.
+ * @example
+ *
+ * _.camelCase('Foo Bar');
+ * // => 'fooBar'
+ *
+ * _.camelCase('--foo-bar');
+ * // => 'fooBar'
+ *
+ * _.camelCase('__foo_bar__');
+ * // => 'fooBar'
+ */var camelCase=createCompounder(function(result,word,index){word=word.toLowerCase();return result+(index?word.charAt(0).toUpperCase()+word.slice(1):word)});
+/**
+ * Capitalizes the first character of `string`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to capitalize.
+ * @returns {string} Returns the capitalized string.
+ * @example
+ *
+ * _.capitalize('fred');
+ * // => 'Fred'
+ */function capitalize(string){string=baseToString(string);return string&&string.charAt(0).toUpperCase()+string.slice(1)}
+/**
+ * Deburrs `string` by converting [latin-1 supplementary letters](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
+ * to basic latin letters and removing [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to deburr.
+ * @returns {string} Returns the deburred string.
+ * @example
+ *
+ * _.deburr('déjà vu');
+ * // => 'deja vu'
+ */function deburr(string){string=baseToString(string);return string&&string.replace(reLatin1,deburrLetter).replace(reComboMark,"")}
+/**
+ * Checks if `string` ends with the given target string.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to search.
+ * @param {string} [target] The string to search for.
+ * @param {number} [position=string.length] The position to search from.
+ * @returns {boolean} Returns `true` if `string` ends with `target`, else `false`.
+ * @example
+ *
+ * _.endsWith('abc', 'c');
+ * // => true
+ *
+ * _.endsWith('abc', 'b');
+ * // => false
+ *
+ * _.endsWith('abc', 'b', 2);
+ * // => true
+ */function endsWith(string,target,position){string=baseToString(string);target=target+"";var length=string.length;position=position===undefined?length:nativeMin(position<0?0:+position||0,length);position-=target.length;return position>=0&&string.indexOf(target,position)==position}
+/**
+ * Converts the characters "&", "<", ">", '"', "'", and "\`", in `string` to
+ * their corresponding HTML entities.
+ *
+ * **Note:** No other characters are escaped. To escape additional characters
+ * use a third-party library like [_he_](https://mths.be/he).
+ *
+ * Though the ">" character is escaped for symmetry, characters like
+ * ">" and "/" don't need escaping in HTML and have no special meaning
+ * unless they're part of a tag or unquoted attribute value.
+ * See [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
+ * (under "semi-related fun fact") for more details.
+ *
+ * Backticks are escaped because in Internet Explorer < 9, they can break out
+ * of attribute values or HTML comments. See [#59](https://html5sec.org/#59),
+ * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and
+ * [#133](https://html5sec.org/#133) of the [HTML5 Security Cheatsheet](https://html5sec.org/)
+ * for more details.
+ *
+ * When working with HTML you should always [quote attribute values](http://wonko.com/post/html-escaping)
+ * to reduce XSS vectors.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to escape.
+ * @returns {string} Returns the escaped string.
+ * @example
+ *
+ * _.escape('fred, barney, & pebbles');
+ * // => 'fred, barney, &amp; pebbles'
+ */function escape(string){
+// Reset `lastIndex` because in IE < 9 `String#replace` does not.
+string=baseToString(string);return string&&reHasUnescapedHtml.test(string)?string.replace(reUnescapedHtml,escapeHtmlChar):string}
+/**
+ * Escapes the `RegExp` special characters "\", "/", "^", "$", ".", "|", "?",
+ * "*", "+", "(", ")", "[", "]", "{" and "}" in `string`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to escape.
+ * @returns {string} Returns the escaped string.
+ * @example
+ *
+ * _.escapeRegExp('[lodash](https://lodash.com/)');
+ * // => '\[lodash\]\(https:\/\/lodash\.com\/\)'
+ */function escapeRegExp(string){string=baseToString(string);return string&&reHasRegExpChars.test(string)?string.replace(reRegExpChars,escapeRegExpChar):string||"(?:)"}
+/**
+ * Converts `string` to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the kebab cased string.
+ * @example
+ *
+ * _.kebabCase('Foo Bar');
+ * // => 'foo-bar'
+ *
+ * _.kebabCase('fooBar');
+ * // => 'foo-bar'
+ *
+ * _.kebabCase('__foo_bar__');
+ * // => 'foo-bar'
+ */var kebabCase=createCompounder(function(result,word,index){return result+(index?"-":"")+word.toLowerCase()});
+/**
+ * Pads `string` on the left and right sides if it's shorter than `length`.
+ * Padding characters are truncated if they can't be evenly divided by `length`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.pad('abc', 8);
+ * // => ' abc '
+ *
+ * _.pad('abc', 8, '_-');
+ * // => '_-abc_-_'
+ *
+ * _.pad('abc', 3);
+ * // => 'abc'
+ */function pad(string,length,chars){string=baseToString(string);length=+length;var strLength=string.length;if(strLength>=length||!nativeIsFinite(length)){return string}var mid=(length-strLength)/2,leftLength=nativeFloor(mid),rightLength=nativeCeil(mid);chars=createPadding("",rightLength,chars);return chars.slice(0,leftLength)+string+chars}
+/**
+ * Pads `string` on the left side if it's shorter than `length`. Padding
+ * characters are truncated if they exceed `length`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.padLeft('abc', 6);
+ * // => ' abc'
+ *
+ * _.padLeft('abc', 6, '_-');
+ * // => '_-_abc'
+ *
+ * _.padLeft('abc', 3);
+ * // => 'abc'
+ */var padLeft=createPadDir();
+/**
+ * Pads `string` on the right side if it's shorter than `length`. Padding
+ * characters are truncated if they exceed `length`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to pad.
+ * @param {number} [length=0] The padding length.
+ * @param {string} [chars=' '] The string used as padding.
+ * @returns {string} Returns the padded string.
+ * @example
+ *
+ * _.padRight('abc', 6);
+ * // => 'abc '
+ *
+ * _.padRight('abc', 6, '_-');
+ * // => 'abc_-_'
+ *
+ * _.padRight('abc', 3);
+ * // => 'abc'
+ */var padRight=createPadDir(true);
+/**
+ * Converts `string` to an integer of the specified radix. If `radix` is
+ * `undefined` or `0`, a `radix` of `10` is used unless `value` is a hexadecimal,
+ * in which case a `radix` of `16` is used.
+ *
+ * **Note:** This method aligns with the [ES5 implementation](https://es5.github.io/#E)
+ * of `parseInt`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} string The string to convert.
+ * @param {number} [radix] The radix to interpret `value` by.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {number} Returns the converted integer.
+ * @example
+ *
+ * _.parseInt('08');
+ * // => 8
+ *
+ * _.map(['6', '08', '10'], _.parseInt);
+ * // => [6, 8, 10]
+ */function parseInt(string,radix,guard){
+// Firefox < 21 and Opera < 15 follow ES3 for `parseInt`.
+// Chrome fails to trim leading <BOM> whitespace characters.
+// See https://code.google.com/p/v8/issues/detail?id=3109 for more details.
+if(guard?isIterateeCall(string,radix,guard):radix==null){radix=0}else if(radix){radix=+radix}string=trim(string);return nativeParseInt(string,radix||(reHasHexPrefix.test(string)?16:10))}
+/**
+ * Repeats the given string `n` times.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to repeat.
+ * @param {number} [n=0] The number of times to repeat the string.
+ * @returns {string} Returns the repeated string.
+ * @example
+ *
+ * _.repeat('*', 3);
+ * // => '***'
+ *
+ * _.repeat('abc', 2);
+ * // => 'abcabc'
+ *
+ * _.repeat('abc', 0);
+ * // => ''
+ */function repeat(string,n){var result="";string=baseToString(string);n=+n;if(n<1||!string||!nativeIsFinite(n)){return result}
+// Leverage the exponentiation by squaring algorithm for a faster repeat.
+// See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
+do{if(n%2){result+=string}n=nativeFloor(n/2);string+=string}while(n);return result}
+/**
+ * Converts `string` to [snake case](https://en.wikipedia.org/wiki/Snake_case).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the snake cased string.
+ * @example
+ *
+ * _.snakeCase('Foo Bar');
+ * // => 'foo_bar'
+ *
+ * _.snakeCase('fooBar');
+ * // => 'foo_bar'
+ *
+ * _.snakeCase('--foo-bar');
+ * // => 'foo_bar'
+ */var snakeCase=createCompounder(function(result,word,index){return result+(index?"_":"")+word.toLowerCase()});
+/**
+ * Converts `string` to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to convert.
+ * @returns {string} Returns the start cased string.
+ * @example
+ *
+ * _.startCase('--foo-bar');
+ * // => 'Foo Bar'
+ *
+ * _.startCase('fooBar');
+ * // => 'Foo Bar'
+ *
+ * _.startCase('__foo_bar__');
+ * // => 'Foo Bar'
+ */var startCase=createCompounder(function(result,word,index){return result+(index?" ":"")+(word.charAt(0).toUpperCase()+word.slice(1))});
+/**
+ * Checks if `string` starts with the given target string.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to search.
+ * @param {string} [target] The string to search for.
+ * @param {number} [position=0] The position to search from.
+ * @returns {boolean} Returns `true` if `string` starts with `target`, else `false`.
+ * @example
+ *
+ * _.startsWith('abc', 'a');
+ * // => true
+ *
+ * _.startsWith('abc', 'b');
+ * // => false
+ *
+ * _.startsWith('abc', 'b', 1);
+ * // => true
+ */function startsWith(string,target,position){string=baseToString(string);position=position==null?0:nativeMin(position<0?0:+position||0,string.length);return string.lastIndexOf(target,position)==position}
+/**
+ * Creates a compiled template function that can interpolate data properties
+ * in "interpolate" delimiters, HTML-escape interpolated data properties in
+ * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
+ * properties may be accessed as free variables in the template. If a setting
+ * object is provided it takes precedence over `_.templateSettings` values.
+ *
+ * **Note:** In the development build `_.template` utilizes
+ * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
+ * for easier debugging.
+ *
+ * For more information on precompiling templates see
+ * [lodash's custom builds documentation](https://lodash.com/custom-builds).
+ *
+ * For more information on Chrome extension sandboxes see
+ * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The template string.
+ * @param {Object} [options] The options object.
+ * @param {RegExp} [options.escape] The HTML "escape" delimiter.
+ * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
+ * @param {Object} [options.imports] An object to import into the template as free variables.
+ * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
+ * @param {string} [options.sourceURL] The sourceURL of the template's compiled source.
+ * @param {string} [options.variable] The data object variable name.
+ * @param- {Object} [otherOptions] Enables the legacy `options` param signature.
+ * @returns {Function} Returns the compiled template function.
+ * @example
+ *
+ * // using the "interpolate" delimiter to create a compiled template
+ * var compiled = _.template('hello <%= user %>!');
+ * compiled({ 'user': 'fred' });
+ * // => 'hello fred!'
+ *
+ * // using the HTML "escape" delimiter to escape data property values
+ * var compiled = _.template('<b><%- value %></b>');
+ * compiled({ 'value': '<script>' });
+ * // => '<b>&lt;script&gt;</b>'
+ *
+ * // using the "evaluate" delimiter to execute JavaScript and generate HTML
+ * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
+ * compiled({ 'users': ['fred', 'barney'] });
+ * // => '<li>fred</li><li>barney</li>'
+ *
+ * // using the internal `print` function in "evaluate" delimiters
+ * var compiled = _.template('<% print("hello " + user); %>!');
+ * compiled({ 'user': 'barney' });
+ * // => 'hello barney!'
+ *
+ * // using the ES delimiter as an alternative to the default "interpolate" delimiter
+ * var compiled = _.template('hello ${ user }!');
+ * compiled({ 'user': 'pebbles' });
+ * // => 'hello pebbles!'
+ *
+ * // using custom template delimiters
+ * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
+ * var compiled = _.template('hello {{ user }}!');
+ * compiled({ 'user': 'mustache' });
+ * // => 'hello mustache!'
+ *
+ * // using backslashes to treat delimiters as plain text
+ * var compiled = _.template('<%= "\\<%- value %\\>" %>');
+ * compiled({ 'value': 'ignored' });
+ * // => '<%- value %>'
+ *
+ * // using the `imports` option to import `jQuery` as `jq`
+ * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
+ * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
+ * compiled({ 'users': ['fred', 'barney'] });
+ * // => '<li>fred</li><li>barney</li>'
+ *
+ * // using the `sourceURL` option to specify a custom sourceURL for the template
+ * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
+ * compiled(data);
+ * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
+ *
+ * // using the `variable` option to ensure a with-statement isn't used in the compiled template
+ * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
+ * compiled.source;
+ * // => function(data) {
+ * // var __t, __p = '';
+ * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
+ * // return __p;
+ * // }
+ *
+ * // using the `source` property to inline compiled templates for meaningful
+ * // line numbers in error messages and a stack trace
+ * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
+ * var JST = {\
+ * "main": ' + _.template(mainText).source + '\
+ * };\
+ * ');
+ */function template(string,options,otherOptions){
+// Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/)
+// and Laura Doktorova's doT.js (https://github.com/olado/doT).
+var settings=lodash.templateSettings;if(otherOptions&&isIterateeCall(string,options,otherOptions)){options=otherOptions=undefined}string=baseToString(string);options=assignWith(baseAssign({},otherOptions||options),settings,assignOwnDefaults);var imports=assignWith(baseAssign({},options.imports),settings.imports,assignOwnDefaults),importsKeys=keys(imports),importsValues=baseValues(imports,importsKeys);var isEscaping,isEvaluating,index=0,interpolate=options.interpolate||reNoMatch,source="__p += '";
+// Compile the regexp to match each delimiter.
+var reDelimiters=RegExp((options.escape||reNoMatch).source+"|"+interpolate.source+"|"+(interpolate===reInterpolate?reEsTemplate:reNoMatch).source+"|"+(options.evaluate||reNoMatch).source+"|$","g");
+// Use a sourceURL for easier debugging.
+var sourceURL="//# sourceURL="+("sourceURL"in options?options.sourceURL:"lodash.templateSources["+ ++templateCounter+"]")+"\n";string.replace(reDelimiters,function(match,escapeValue,interpolateValue,esTemplateValue,evaluateValue,offset){interpolateValue||(interpolateValue=esTemplateValue);
+// Escape characters that can't be included in string literals.
+source+=string.slice(index,offset).replace(reUnescapedString,escapeStringChar);
+// Replace delimiters with snippets.
+if(escapeValue){isEscaping=true;source+="' +\n__e("+escapeValue+") +\n'"}if(evaluateValue){isEvaluating=true;source+="';\n"+evaluateValue+";\n__p += '"}if(interpolateValue){source+="' +\n((__t = ("+interpolateValue+")) == null ? '' : __t) +\n'"}index=offset+match.length;
+// The JS engine embedded in Adobe products requires returning the `match`
+// string in order to produce the correct `offset` value.
+return match});source+="';\n";
+// If `variable` is not specified wrap a with-statement around the generated
+// code to add the data object to the top of the scope chain.
+var variable=options.variable;if(!variable){source="with (obj) {\n"+source+"\n}\n"}
+// Cleanup code by stripping empty strings.
+source=(isEvaluating?source.replace(reEmptyStringLeading,""):source).replace(reEmptyStringMiddle,"$1").replace(reEmptyStringTrailing,"$1;");
+// Frame code as the function body.
+source="function("+(variable||"obj")+") {\n"+(variable?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(isEscaping?", __e = _.escape":"")+(isEvaluating?", __j = Array.prototype.join;\n"+"function print() { __p += __j.call(arguments, '') }\n":";\n")+source+"return __p\n}";var result=attempt(function(){return Function(importsKeys,sourceURL+"return "+source).apply(undefined,importsValues)});
+// Provide the compiled function's source by its `toString` method or
+// the `source` property as a convenience for inlining compiled templates.
+result.source=source;if(isError(result)){throw result}return result}
+/**
+ * Removes leading and trailing whitespace or specified characters from `string`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to trim.
+ * @param {string} [chars=whitespace] The characters to trim.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {string} Returns the trimmed string.
+ * @example
+ *
+ * _.trim(' abc ');
+ * // => 'abc'
+ *
+ * _.trim('-_-abc-_-', '_-');
+ * // => 'abc'
+ *
+ * _.map([' foo ', ' bar '], _.trim);
+ * // => ['foo', 'bar']
+ */function trim(string,chars,guard){var value=string;string=baseToString(string);if(!string){return string}if(guard?isIterateeCall(value,chars,guard):chars==null){return string.slice(trimmedLeftIndex(string),trimmedRightIndex(string)+1)}chars=chars+"";return string.slice(charsLeftIndex(string,chars),charsRightIndex(string,chars)+1)}
+/**
+ * Removes leading whitespace or specified characters from `string`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to trim.
+ * @param {string} [chars=whitespace] The characters to trim.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {string} Returns the trimmed string.
+ * @example
+ *
+ * _.trimLeft(' abc ');
+ * // => 'abc '
+ *
+ * _.trimLeft('-_-abc-_-', '_-');
+ * // => 'abc-_-'
+ */function trimLeft(string,chars,guard){var value=string;string=baseToString(string);if(!string){return string}if(guard?isIterateeCall(value,chars,guard):chars==null){return string.slice(trimmedLeftIndex(string))}return string.slice(charsLeftIndex(string,chars+""))}
+/**
+ * Removes trailing whitespace or specified characters from `string`.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to trim.
+ * @param {string} [chars=whitespace] The characters to trim.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {string} Returns the trimmed string.
+ * @example
+ *
+ * _.trimRight(' abc ');
+ * // => ' abc'
+ *
+ * _.trimRight('-_-abc-_-', '_-');
+ * // => '-_-abc'
+ */function trimRight(string,chars,guard){var value=string;string=baseToString(string);if(!string){return string}if(guard?isIterateeCall(value,chars,guard):chars==null){return string.slice(0,trimmedRightIndex(string)+1)}return string.slice(0,charsRightIndex(string,chars+"")+1)}
+/**
+ * Truncates `string` if it's longer than the given maximum string length.
+ * The last characters of the truncated string are replaced with the omission
+ * string which defaults to "...".
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to truncate.
+ * @param {Object|number} [options] The options object or maximum string length.
+ * @param {number} [options.length=30] The maximum string length.
+ * @param {string} [options.omission='...'] The string to indicate text is omitted.
+ * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {string} Returns the truncated string.
+ * @example
+ *
+ * _.trunc('hi-diddly-ho there, neighborino');
+ * // => 'hi-diddly-ho there, neighbo...'
+ *
+ * _.trunc('hi-diddly-ho there, neighborino', 24);
+ * // => 'hi-diddly-ho there, n...'
+ *
+ * _.trunc('hi-diddly-ho there, neighborino', {
+ * 'length': 24,
+ * 'separator': ' '
+ * });
+ * // => 'hi-diddly-ho there,...'
+ *
+ * _.trunc('hi-diddly-ho there, neighborino', {
+ * 'length': 24,
+ * 'separator': /,? +/
+ * });
+ * // => 'hi-diddly-ho there...'
+ *
+ * _.trunc('hi-diddly-ho there, neighborino', {
+ * 'omission': ' [...]'
+ * });
+ * // => 'hi-diddly-ho there, neig [...]'
+ */function trunc(string,options,guard){if(guard&&isIterateeCall(string,options,guard)){options=undefined}var length=DEFAULT_TRUNC_LENGTH,omission=DEFAULT_TRUNC_OMISSION;if(options!=null){if(isObject(options)){var separator="separator"in options?options.separator:separator;length="length"in options?+options.length||0:length;omission="omission"in options?baseToString(options.omission):omission}else{length=+options||0}}string=baseToString(string);if(length>=string.length){return string}var end=length-omission.length;if(end<1){return omission}var result=string.slice(0,end);if(separator==null){return result+omission}if(isRegExp(separator)){if(string.slice(end).search(separator)){var match,newEnd,substring=string.slice(0,end);if(!separator.global){separator=RegExp(separator.source,(reFlags.exec(separator)||"")+"g")}separator.lastIndex=0;while(match=separator.exec(substring)){newEnd=match.index}result=result.slice(0,newEnd==null?end:newEnd)}}else if(string.indexOf(separator,end)!=end){var index=result.lastIndexOf(separator);if(index>-1){result=result.slice(0,index)}}return result+omission}
+/**
+ * The inverse of `_.escape`; this method converts the HTML entities
+ * `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#39;`, and `&#96;` in `string` to their
+ * corresponding characters.
+ *
+ * **Note:** No other HTML entities are unescaped. To unescape additional HTML
+ * entities use a third-party library like [_he_](https://mths.be/he).
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to unescape.
+ * @returns {string} Returns the unescaped string.
+ * @example
+ *
+ * _.unescape('fred, barney, &amp; pebbles');
+ * // => 'fred, barney, & pebbles'
+ */function unescape(string){string=baseToString(string);return string&&reHasEscapedHtml.test(string)?string.replace(reEscapedHtml,unescapeHtmlChar):string}
+/**
+ * Splits `string` into an array of its words.
+ *
+ * @static
+ * @memberOf _
+ * @category String
+ * @param {string} [string=''] The string to inspect.
+ * @param {RegExp|string} [pattern] The pattern to match words.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Array} Returns the words of `string`.
+ * @example
+ *
+ * _.words('fred, barney, & pebbles');
+ * // => ['fred', 'barney', 'pebbles']
+ *
+ * _.words('fred, barney, & pebbles', /[^, ]+/g);
+ * // => ['fred', 'barney', '&', 'pebbles']
+ */function words(string,pattern,guard){if(guard&&isIterateeCall(string,pattern,guard)){pattern=undefined}string=baseToString(string);return string.match(pattern||reWords)||[]}
+/*------------------------------------------------------------------------*/
+/**
+ * Attempts to invoke `func`, returning either the result or the caught error
+ * object. Any additional arguments are provided to `func` when it is invoked.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Function} func The function to attempt.
+ * @returns {*} Returns the `func` result or error object.
+ * @example
+ *
+ * // avoid throwing errors for invalid selectors
+ * var elements = _.attempt(function(selector) {
+ * return document.querySelectorAll(selector);
+ * }, '>_>');
+ *
+ * if (_.isError(elements)) {
+ * elements = [];
+ * }
+ */var attempt=restParam(function(func,args){try{return func.apply(undefined,args)}catch(e){return isError(e)?e:new Error(e)}});
+/**
+ * Creates a function that invokes `func` with the `this` binding of `thisArg`
+ * and arguments of the created function. If `func` is a property name the
+ * created callback returns the property value for a given element. If `func`
+ * is an object the created callback returns `true` for elements that contain
+ * the equivalent object properties, otherwise it returns `false`.
+ *
+ * @static
+ * @memberOf _
+ * @alias iteratee
+ * @category Utility
+ * @param {*} [func=_.identity] The value to convert to a callback.
+ * @param {*} [thisArg] The `this` binding of `func`.
+ * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
+ * @returns {Function} Returns the callback.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 }
+ * ];
+ *
+ * // wrap to create custom callback shorthands
+ * _.callback = _.wrap(_.callback, function(callback, func, thisArg) {
+ * var match = /^(.+?)__([gl]t)(.+)$/.exec(func);
+ * if (!match) {
+ * return callback(func, thisArg);
+ * }
+ * return function(object) {
+ * return match[2] == 'gt'
+ * ? object[match[1]] > match[3]
+ * : object[match[1]] < match[3];
+ * };
+ * });
+ *
+ * _.filter(users, 'age__gt36');
+ * // => [{ 'user': 'fred', 'age': 40 }]
+ */function callback(func,thisArg,guard){if(guard&&isIterateeCall(func,thisArg,guard)){thisArg=undefined}return isObjectLike(func)?matches(func):baseCallback(func,thisArg)}
+/**
+ * Creates a function that returns `value`.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {*} value The value to return from the new function.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ * var getter = _.constant(object);
+ *
+ * getter() === object;
+ * // => true
+ */function constant(value){return function(){return value}}
+/**
+ * This method returns the first argument provided to it.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {*} value Any value.
+ * @returns {*} Returns `value`.
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * _.identity(object) === object;
+ * // => true
+ */function identity(value){return value}
+/**
+ * Creates a function that performs a deep comparison between a given object
+ * and `source`, returning `true` if the given object has equivalent property
+ * values, else `false`.
+ *
+ * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+ * numbers, `Object` objects, regexes, and strings. Objects are compared by
+ * their own, not inherited, enumerable properties. For comparing a single
+ * own or inherited property value see `_.matchesProperty`.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Object} source The object of property values to match.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36, 'active': true },
+ * { 'user': 'fred', 'age': 40, 'active': false }
+ * ];
+ *
+ * _.filter(users, _.matches({ 'age': 40, 'active': false }));
+ * // => [{ 'user': 'fred', 'age': 40, 'active': false }]
+ */function matches(source){return baseMatches(baseClone(source,true))}
+/**
+ * Creates a function that compares the property value of `path` on a given
+ * object to `value`.
+ *
+ * **Note:** This method supports comparing arrays, booleans, `Date` objects,
+ * numbers, `Object` objects, regexes, and strings. Objects are compared by
+ * their own, not inherited, enumerable properties.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Array|string} path The path of the property to get.
+ * @param {*} srcValue The value to match.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var users = [
+ * { 'user': 'barney' },
+ * { 'user': 'fred' }
+ * ];
+ *
+ * _.find(users, _.matchesProperty('user', 'fred'));
+ * // => { 'user': 'fred' }
+ */function matchesProperty(path,srcValue){return baseMatchesProperty(path,baseClone(srcValue,true))}
+/**
+ * Creates a function that invokes the method at `path` on a given object.
+ * Any additional arguments are provided to the invoked method.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Array|string} path The path of the method to invoke.
+ * @param {...*} [args] The arguments to invoke the method with.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var objects = [
+ * { 'a': { 'b': { 'c': _.constant(2) } } },
+ * { 'a': { 'b': { 'c': _.constant(1) } } }
+ * ];
+ *
+ * _.map(objects, _.method('a.b.c'));
+ * // => [2, 1]
+ *
+ * _.invoke(_.sortBy(objects, _.method(['a', 'b', 'c'])), 'a.b.c');
+ * // => [1, 2]
+ */var method=restParam(function(path,args){return function(object){return invokePath(object,path,args)}});
+/**
+ * The opposite of `_.method`; this method creates a function that invokes
+ * the method at a given path on `object`. Any additional arguments are
+ * provided to the invoked method.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Object} object The object to query.
+ * @param {...*} [args] The arguments to invoke the method with.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var array = _.times(3, _.constant),
+ * object = { 'a': array, 'b': array, 'c': array };
+ *
+ * _.map(['a[2]', 'c[0]'], _.methodOf(object));
+ * // => [2, 0]
+ *
+ * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
+ * // => [2, 0]
+ */var methodOf=restParam(function(object,args){return function(path){return invokePath(object,path,args)}});
+/**
+ * Adds all own enumerable function properties of a source object to the
+ * destination object. If `object` is a function then methods are added to
+ * its prototype as well.
+ *
+ * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
+ * avoid conflicts caused by modifying the original.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Function|Object} [object=lodash] The destination object.
+ * @param {Object} source The object of functions to add.
+ * @param {Object} [options] The options object.
+ * @param {boolean} [options.chain=true] Specify whether the functions added
+ * are chainable.
+ * @returns {Function|Object} Returns `object`.
+ * @example
+ *
+ * function vowels(string) {
+ * return _.filter(string, function(v) {
+ * return /[aeiou]/i.test(v);
+ * });
+ * }
+ *
+ * _.mixin({ 'vowels': vowels });
+ * _.vowels('fred');
+ * // => ['e']
+ *
+ * _('fred').vowels().value();
+ * // => ['e']
+ *
+ * _.mixin({ 'vowels': vowels }, { 'chain': false });
+ * _('fred').vowels();
+ * // => ['e']
+ */function mixin(object,source,options){if(options==null){var isObj=isObject(source),props=isObj?keys(source):undefined,methodNames=props&&props.length?baseFunctions(source,props):undefined;if(!(methodNames?methodNames.length:isObj)){methodNames=false;options=source;source=object;object=this}}if(!methodNames){methodNames=baseFunctions(source,keys(source))}var chain=true,index=-1,isFunc=isFunction(object),length=methodNames.length;if(options===false){chain=false}else if(isObject(options)&&"chain"in options){chain=options.chain}while(++index<length){var methodName=methodNames[index],func=source[methodName];object[methodName]=func;if(isFunc){object.prototype[methodName]=function(func){return function(){var chainAll=this.__chain__;if(chain||chainAll){var result=object(this.__wrapped__),actions=result.__actions__=arrayCopy(this.__actions__);actions.push({func:func,args:arguments,thisArg:object});result.__chain__=chainAll;return result}return func.apply(object,arrayPush([this.value()],arguments))}}(func)}}return object}
+/**
+ * Reverts the `_` variable to its previous value and returns a reference to
+ * the `lodash` function.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @returns {Function} Returns the `lodash` function.
+ * @example
+ *
+ * var lodash = _.noConflict();
+ */function noConflict(){root._=oldDash;return this}
+/**
+ * A no-operation function that returns `undefined` regardless of the
+ * arguments it receives.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @example
+ *
+ * var object = { 'user': 'fred' };
+ *
+ * _.noop(object) === undefined;
+ * // => true
+ */function noop(){
+// No operation performed.
+}
+/**
+ * Creates a function that returns the property value at `path` on a
+ * given object.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Array|string} path The path of the property to get.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var objects = [
+ * { 'a': { 'b': { 'c': 2 } } },
+ * { 'a': { 'b': { 'c': 1 } } }
+ * ];
+ *
+ * _.map(objects, _.property('a.b.c'));
+ * // => [2, 1]
+ *
+ * _.pluck(_.sortBy(objects, _.property(['a', 'b', 'c'])), 'a.b.c');
+ * // => [1, 2]
+ */function property(path){return isKey(path)?baseProperty(path):basePropertyDeep(path)}
+/**
+ * The opposite of `_.property`; this method creates a function that returns
+ * the property value at a given path on `object`.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {Object} object The object to query.
+ * @returns {Function} Returns the new function.
+ * @example
+ *
+ * var array = [0, 1, 2],
+ * object = { 'a': array, 'b': array, 'c': array };
+ *
+ * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
+ * // => [2, 0]
+ *
+ * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
+ * // => [2, 0]
+ */function propertyOf(object){return function(path){return baseGet(object,toPath(path),path+"")}}
+/**
+ * Creates an array of numbers (positive and/or negative) progressing from
+ * `start` up to, but not including, `end`. If `end` is not specified it is
+ * set to `start` with `start` then set to `0`. If `end` is less than `start`
+ * a zero-length range is created unless a negative `step` is specified.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {number} [start=0] The start of the range.
+ * @param {number} end The end of the range.
+ * @param {number} [step=1] The value to increment or decrement by.
+ * @returns {Array} Returns the new array of numbers.
+ * @example
+ *
+ * _.range(4);
+ * // => [0, 1, 2, 3]
+ *
+ * _.range(1, 5);
+ * // => [1, 2, 3, 4]
+ *
+ * _.range(0, 20, 5);
+ * // => [0, 5, 10, 15]
+ *
+ * _.range(0, -4, -1);
+ * // => [0, -1, -2, -3]
+ *
+ * _.range(1, 4, 0);
+ * // => [1, 1, 1]
+ *
+ * _.range(0);
+ * // => []
+ */function range(start,end,step){if(step&&isIterateeCall(start,end,step)){end=step=undefined}start=+start||0;step=step==null?1:+step||0;if(end==null){end=start;start=0}else{end=+end||0}
+// Use `Array(length)` so engines like Chakra and V8 avoid slower modes.
+// See https://youtu.be/XAqIpGU8ZZk#t=17m25s for more details.
+var index=-1,length=nativeMax(nativeCeil((end-start)/(step||1)),0),result=Array(length);while(++index<length){result[index]=start;start+=step}return result}
+/**
+ * Invokes the iteratee function `n` times, returning an array of the results
+ * of each invocation. The `iteratee` is bound to `thisArg` and invoked with
+ * one argument; (index).
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {number} n The number of times to invoke `iteratee`.
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {Array} Returns the array of results.
+ * @example
+ *
+ * var diceRolls = _.times(3, _.partial(_.random, 1, 6, false));
+ * // => [3, 6, 4]
+ *
+ * _.times(3, function(n) {
+ * mage.castSpell(n);
+ * });
+ * // => invokes `mage.castSpell(n)` three times with `n` of `0`, `1`, and `2`
+ *
+ * _.times(3, function(n) {
+ * this.cast(n);
+ * }, mage);
+ * // => also invokes `mage.castSpell(n)` three times
+ */function times(n,iteratee,thisArg){n=nativeFloor(n);
+// Exit early to avoid a JSC JIT bug in Safari 8
+// where `Array(0)` is treated as `Array(1)`.
+if(n<1||!nativeIsFinite(n)){return[]}var index=-1,result=Array(nativeMin(n,MAX_ARRAY_LENGTH));iteratee=bindCallback(iteratee,thisArg,1);while(++index<n){if(index<MAX_ARRAY_LENGTH){result[index]=iteratee(index)}else{iteratee(index)}}return result}
+/**
+ * Generates a unique ID. If `prefix` is provided the ID is appended to it.
+ *
+ * @static
+ * @memberOf _
+ * @category Utility
+ * @param {string} [prefix] The value to prefix the ID with.
+ * @returns {string} Returns the unique ID.
+ * @example
+ *
+ * _.uniqueId('contact_');
+ * // => 'contact_104'
+ *
+ * _.uniqueId();
+ * // => '105'
+ */function uniqueId(prefix){var id=++idCounter;return baseToString(prefix)+id}
+/*------------------------------------------------------------------------*/
+/**
+ * Adds two numbers.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {number} augend The first number to add.
+ * @param {number} addend The second number to add.
+ * @returns {number} Returns the sum.
+ * @example
+ *
+ * _.add(6, 4);
+ * // => 10
+ */function add(augend,addend){return(+augend||0)+(+addend||0)}
+/**
+ * Calculates `n` rounded up to `precision`.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {number} n The number to round up.
+ * @param {number} [precision=0] The precision to round up to.
+ * @returns {number} Returns the rounded up number.
+ * @example
+ *
+ * _.ceil(4.006);
+ * // => 5
+ *
+ * _.ceil(6.004, 2);
+ * // => 6.01
+ *
+ * _.ceil(6040, -2);
+ * // => 6100
+ */var ceil=createRound("ceil");
+/**
+ * Calculates `n` rounded down to `precision`.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {number} n The number to round down.
+ * @param {number} [precision=0] The precision to round down to.
+ * @returns {number} Returns the rounded down number.
+ * @example
+ *
+ * _.floor(4.006);
+ * // => 4
+ *
+ * _.floor(0.046, 2);
+ * // => 0.04
+ *
+ * _.floor(4060, -2);
+ * // => 4000
+ */var floor=createRound("floor");
+/**
+ * Gets the maximum value of `collection`. If `collection` is empty or falsey
+ * `-Infinity` is returned. If an iteratee function is provided it is invoked
+ * for each value in `collection` to generate the criterion by which the value
+ * is ranked. The `iteratee` is bound to `thisArg` and invoked with three
+ * arguments: (value, index, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {*} Returns the maximum value.
+ * @example
+ *
+ * _.max([4, 2, 8, 6]);
+ * // => 8
+ *
+ * _.max([]);
+ * // => -Infinity
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 }
+ * ];
+ *
+ * _.max(users, function(chr) {
+ * return chr.age;
+ * });
+ * // => { 'user': 'fred', 'age': 40 }
+ *
+ * // using the `_.property` callback shorthand
+ * _.max(users, 'age');
+ * // => { 'user': 'fred', 'age': 40 }
+ */var max=createExtremum(gt,NEGATIVE_INFINITY);
+/**
+ * Gets the minimum value of `collection`. If `collection` is empty or falsey
+ * `Infinity` is returned. If an iteratee function is provided it is invoked
+ * for each value in `collection` to generate the criterion by which the value
+ * is ranked. The `iteratee` is bound to `thisArg` and invoked with three
+ * arguments: (value, index, collection).
+ *
+ * If a property name is provided for `iteratee` the created `_.property`
+ * style callback returns the property value of the given element.
+ *
+ * If a value is also provided for `thisArg` the created `_.matchesProperty`
+ * style callback returns `true` for elements that have a matching property
+ * value, else `false`.
+ *
+ * If an object is provided for `iteratee` the created `_.matches` style
+ * callback returns `true` for elements that have the properties of the given
+ * object, else `false`.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {*} Returns the minimum value.
+ * @example
+ *
+ * _.min([4, 2, 8, 6]);
+ * // => 2
+ *
+ * _.min([]);
+ * // => Infinity
+ *
+ * var users = [
+ * { 'user': 'barney', 'age': 36 },
+ * { 'user': 'fred', 'age': 40 }
+ * ];
+ *
+ * _.min(users, function(chr) {
+ * return chr.age;
+ * });
+ * // => { 'user': 'barney', 'age': 36 }
+ *
+ * // using the `_.property` callback shorthand
+ * _.min(users, 'age');
+ * // => { 'user': 'barney', 'age': 36 }
+ */var min=createExtremum(lt,POSITIVE_INFINITY);
+/**
+ * Calculates `n` rounded to `precision`.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {number} n The number to round.
+ * @param {number} [precision=0] The precision to round to.
+ * @returns {number} Returns the rounded number.
+ * @example
+ *
+ * _.round(4.006);
+ * // => 4
+ *
+ * _.round(4.006, 2);
+ * // => 4.01
+ *
+ * _.round(4060, -2);
+ * // => 4100
+ */var round=createRound("round");
+/**
+ * Gets the sum of the values in `collection`.
+ *
+ * @static
+ * @memberOf _
+ * @category Math
+ * @param {Array|Object|string} collection The collection to iterate over.
+ * @param {Function|Object|string} [iteratee] The function invoked per iteration.
+ * @param {*} [thisArg] The `this` binding of `iteratee`.
+ * @returns {number} Returns the sum.
+ * @example
+ *
+ * _.sum([4, 6]);
+ * // => 10
+ *
+ * _.sum({ 'a': 4, 'b': 6 });
+ * // => 10
+ *
+ * var objects = [
+ * { 'n': 4 },
+ * { 'n': 6 }
+ * ];
+ *
+ * _.sum(objects, function(object) {
+ * return object.n;
+ * });
+ * // => 10
+ *
+ * // using the `_.property` callback shorthand
+ * _.sum(objects, 'n');
+ * // => 10
+ */function sum(collection,iteratee,thisArg){if(thisArg&&isIterateeCall(collection,iteratee,thisArg)){iteratee=undefined}iteratee=getCallback(iteratee,thisArg,3);return iteratee.length==1?arraySum(isArray(collection)?collection:toIterable(collection),iteratee):baseSum(collection,iteratee)}
+/*------------------------------------------------------------------------*/
+// Ensure wrappers are instances of `baseLodash`.
+lodash.prototype=baseLodash.prototype;LodashWrapper.prototype=baseCreate(baseLodash.prototype);LodashWrapper.prototype.constructor=LodashWrapper;LazyWrapper.prototype=baseCreate(baseLodash.prototype);LazyWrapper.prototype.constructor=LazyWrapper;
+// Add functions to the `Map` cache.
+MapCache.prototype["delete"]=mapDelete;MapCache.prototype.get=mapGet;MapCache.prototype.has=mapHas;MapCache.prototype.set=mapSet;
+// Add functions to the `Set` cache.
+SetCache.prototype.push=cachePush;
+// Assign cache to `_.memoize`.
+memoize.Cache=MapCache;
+// Add functions that return wrapped values when chaining.
+lodash.after=after;lodash.ary=ary;lodash.assign=assign;lodash.at=at;lodash.before=before;lodash.bind=bind;lodash.bindAll=bindAll;lodash.bindKey=bindKey;lodash.callback=callback;lodash.chain=chain;lodash.chunk=chunk;lodash.compact=compact;lodash.constant=constant;lodash.countBy=countBy;lodash.create=create;lodash.curry=curry;lodash.curryRight=curryRight;lodash.debounce=debounce;lodash.defaults=defaults;lodash.defaultsDeep=defaultsDeep;lodash.defer=defer;lodash.delay=delay;lodash.difference=difference;lodash.drop=drop;lodash.dropRight=dropRight;lodash.dropRightWhile=dropRightWhile;lodash.dropWhile=dropWhile;lodash.fill=fill;lodash.filter=filter;lodash.flatten=flatten;lodash.flattenDeep=flattenDeep;lodash.flow=flow;lodash.flowRight=flowRight;lodash.forEach=forEach;lodash.forEachRight=forEachRight;lodash.forIn=forIn;lodash.forInRight=forInRight;lodash.forOwn=forOwn;lodash.forOwnRight=forOwnRight;lodash.functions=functions;lodash.groupBy=groupBy;lodash.indexBy=indexBy;lodash.initial=initial;lodash.intersection=intersection;lodash.invert=invert;lodash.invoke=invoke;lodash.keys=keys;lodash.keysIn=keysIn;lodash.map=map;lodash.mapKeys=mapKeys;lodash.mapValues=mapValues;lodash.matches=matches;lodash.matchesProperty=matchesProperty;lodash.memoize=memoize;lodash.merge=merge;lodash.method=method;lodash.methodOf=methodOf;lodash.mixin=mixin;lodash.modArgs=modArgs;lodash.negate=negate;lodash.omit=omit;lodash.once=once;lodash.pairs=pairs;lodash.partial=partial;lodash.partialRight=partialRight;lodash.partition=partition;lodash.pick=pick;lodash.pluck=pluck;lodash.property=property;lodash.propertyOf=propertyOf;lodash.pull=pull;lodash.pullAt=pullAt;lodash.range=range;lodash.rearg=rearg;lodash.reject=reject;lodash.remove=remove;lodash.rest=rest;lodash.restParam=restParam;lodash.set=set;lodash.shuffle=shuffle;lodash.slice=slice;lodash.sortBy=sortBy;lodash.sortByAll=sortByAll;lodash.sortByOrder=sortByOrder;lodash.spread=spread;lodash.take=take;lodash.takeRight=takeRight;lodash.takeRightWhile=takeRightWhile;lodash.takeWhile=takeWhile;lodash.tap=tap;lodash.throttle=throttle;lodash.thru=thru;lodash.times=times;lodash.toArray=toArray;lodash.toPlainObject=toPlainObject;lodash.transform=transform;lodash.union=union;lodash.uniq=uniq;lodash.unzip=unzip;lodash.unzipWith=unzipWith;lodash.values=values;lodash.valuesIn=valuesIn;lodash.where=where;lodash.without=without;lodash.wrap=wrap;lodash.xor=xor;lodash.zip=zip;lodash.zipObject=zipObject;lodash.zipWith=zipWith;
+// Add aliases.
+lodash.backflow=flowRight;lodash.collect=map;lodash.compose=flowRight;lodash.each=forEach;lodash.eachRight=forEachRight;lodash.extend=assign;lodash.iteratee=callback;lodash.methods=functions;lodash.object=zipObject;lodash.select=filter;lodash.tail=rest;lodash.unique=uniq;
+// Add functions to `lodash.prototype`.
+mixin(lodash,lodash);
+/*------------------------------------------------------------------------*/
+// Add functions that return unwrapped values when chaining.
+lodash.add=add;lodash.attempt=attempt;lodash.camelCase=camelCase;lodash.capitalize=capitalize;lodash.ceil=ceil;lodash.clone=clone;lodash.cloneDeep=cloneDeep;lodash.deburr=deburr;lodash.endsWith=endsWith;lodash.escape=escape;lodash.escapeRegExp=escapeRegExp;lodash.every=every;lodash.find=find;lodash.findIndex=findIndex;lodash.findKey=findKey;lodash.findLast=findLast;lodash.findLastIndex=findLastIndex;lodash.findLastKey=findLastKey;lodash.findWhere=findWhere;lodash.first=first;lodash.floor=floor;lodash.get=get;lodash.gt=gt;lodash.gte=gte;lodash.has=has;lodash.identity=identity;lodash.includes=includes;lodash.indexOf=indexOf;lodash.inRange=inRange;lodash.isArguments=isArguments;lodash.isArray=isArray;lodash.isBoolean=isBoolean;lodash.isDate=isDate;lodash.isElement=isElement;lodash.isEmpty=isEmpty;lodash.isEqual=isEqual;lodash.isError=isError;lodash.isFinite=isFinite;lodash.isFunction=isFunction;lodash.isMatch=isMatch;lodash.isNaN=isNaN;lodash.isNative=isNative;lodash.isNull=isNull;lodash.isNumber=isNumber;lodash.isObject=isObject;lodash.isPlainObject=isPlainObject;lodash.isRegExp=isRegExp;lodash.isString=isString;lodash.isTypedArray=isTypedArray;lodash.isUndefined=isUndefined;lodash.kebabCase=kebabCase;lodash.last=last;lodash.lastIndexOf=lastIndexOf;lodash.lt=lt;lodash.lte=lte;lodash.max=max;lodash.min=min;lodash.noConflict=noConflict;lodash.noop=noop;lodash.now=now;lodash.pad=pad;lodash.padLeft=padLeft;lodash.padRight=padRight;lodash.parseInt=parseInt;lodash.random=random;lodash.reduce=reduce;lodash.reduceRight=reduceRight;lodash.repeat=repeat;lodash.result=result;lodash.round=round;lodash.runInContext=runInContext;lodash.size=size;lodash.snakeCase=snakeCase;lodash.some=some;lodash.sortedIndex=sortedIndex;lodash.sortedLastIndex=sortedLastIndex;lodash.startCase=startCase;lodash.startsWith=startsWith;lodash.sum=sum;lodash.template=template;lodash.trim=trim;lodash.trimLeft=trimLeft;lodash.trimRight=trimRight;lodash.trunc=trunc;lodash.unescape=unescape;lodash.uniqueId=uniqueId;lodash.words=words;
+// Add aliases.
+lodash.all=every;lodash.any=some;lodash.contains=includes;lodash.eq=isEqual;lodash.detect=find;lodash.foldl=reduce;lodash.foldr=reduceRight;lodash.head=first;lodash.include=includes;lodash.inject=reduce;mixin(lodash,function(){var source={};baseForOwn(lodash,function(func,methodName){if(!lodash.prototype[methodName]){source[methodName]=func}});return source}(),false);
+/*------------------------------------------------------------------------*/
+// Add functions capable of returning wrapped and unwrapped values when chaining.
+lodash.sample=sample;lodash.prototype.sample=function(n){if(!this.__chain__&&n==null){return sample(this.value())}return this.thru(function(value){return sample(value,n)})};
+/*------------------------------------------------------------------------*/
+/**
+ * The semantic version number.
+ *
+ * @static
+ * @memberOf _
+ * @type string
+ */lodash.VERSION=VERSION;
+// Assign default placeholders.
+arrayEach(["bind","bindKey","curry","curryRight","partial","partialRight"],function(methodName){lodash[methodName].placeholder=lodash});
+// Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
+arrayEach(["drop","take"],function(methodName,index){LazyWrapper.prototype[methodName]=function(n){var filtered=this.__filtered__;if(filtered&&!index){return new LazyWrapper(this)}n=n==null?1:nativeMax(nativeFloor(n)||0,0);var result=this.clone();if(filtered){result.__takeCount__=nativeMin(result.__takeCount__,n)}else{result.__views__.push({size:n,type:methodName+(result.__dir__<0?"Right":"")})}return result};LazyWrapper.prototype[methodName+"Right"]=function(n){return this.reverse()[methodName](n).reverse()}});
+// Add `LazyWrapper` methods that accept an `iteratee` value.
+arrayEach(["filter","map","takeWhile"],function(methodName,index){var type=index+1,isFilter=type!=LAZY_MAP_FLAG;LazyWrapper.prototype[methodName]=function(iteratee,thisArg){var result=this.clone();result.__iteratees__.push({iteratee:getCallback(iteratee,thisArg,1),type:type});result.__filtered__=result.__filtered__||isFilter;return result}});
+// Add `LazyWrapper` methods for `_.first` and `_.last`.
+arrayEach(["first","last"],function(methodName,index){var takeName="take"+(index?"Right":"");LazyWrapper.prototype[methodName]=function(){return this[takeName](1).value()[0]}});
+// Add `LazyWrapper` methods for `_.initial` and `_.rest`.
+arrayEach(["initial","rest"],function(methodName,index){var dropName="drop"+(index?"":"Right");LazyWrapper.prototype[methodName]=function(){return this.__filtered__?new LazyWrapper(this):this[dropName](1)}});
+// Add `LazyWrapper` methods for `_.pluck` and `_.where`.
+arrayEach(["pluck","where"],function(methodName,index){var operationName=index?"filter":"map",createCallback=index?baseMatches:property;LazyWrapper.prototype[methodName]=function(value){return this[operationName](createCallback(value))}});LazyWrapper.prototype.compact=function(){return this.filter(identity)};LazyWrapper.prototype.reject=function(predicate,thisArg){predicate=getCallback(predicate,thisArg,1);return this.filter(function(value){return!predicate(value)})};LazyWrapper.prototype.slice=function(start,end){start=start==null?0:+start||0;var result=this;if(result.__filtered__&&(start>0||end<0)){return new LazyWrapper(result)}if(start<0){result=result.takeRight(-start)}else if(start){result=result.drop(start)}if(end!==undefined){end=+end||0;result=end<0?result.dropRight(-end):result.take(end-start)}return result};LazyWrapper.prototype.takeRightWhile=function(predicate,thisArg){return this.reverse().takeWhile(predicate,thisArg).reverse()};LazyWrapper.prototype.toArray=function(){return this.take(POSITIVE_INFINITY)};
+// Add `LazyWrapper` methods to `lodash.prototype`.
+baseForOwn(LazyWrapper.prototype,function(func,methodName){var checkIteratee=/^(?:filter|map|reject)|While$/.test(methodName),retUnwrapped=/^(?:first|last)$/.test(methodName),lodashFunc=lodash[retUnwrapped?"take"+(methodName=="last"?"Right":""):methodName];if(!lodashFunc){return}lodash.prototype[methodName]=function(){var args=retUnwrapped?[1]:arguments,chainAll=this.__chain__,value=this.__wrapped__,isHybrid=!!this.__actions__.length,isLazy=value instanceof LazyWrapper,iteratee=args[0],useLazy=isLazy||isArray(value);if(useLazy&&checkIteratee&&typeof iteratee=="function"&&iteratee.length!=1){
+// Avoid lazy use if the iteratee has a "length" value other than `1`.
+isLazy=useLazy=false}var interceptor=function(value){return retUnwrapped&&chainAll?lodashFunc(value,1)[0]:lodashFunc.apply(undefined,arrayPush([value],args))};var action={func:thru,args:[interceptor],thisArg:undefined},onlyLazy=isLazy&&!isHybrid;if(retUnwrapped&&!chainAll){if(onlyLazy){value=value.clone();value.__actions__.push(action);return func.call(value)}return lodashFunc.call(undefined,this.value())[0]}if(!retUnwrapped&&useLazy){value=onlyLazy?value:new LazyWrapper(this);var result=func.apply(value,args);result.__actions__.push(action);return new LodashWrapper(result,chainAll)}return this.thru(interceptor)}});
+// Add `Array` and `String` methods to `lodash.prototype`.
+arrayEach(["join","pop","push","replace","shift","sort","splice","split","unshift"],function(methodName){var func=(/^(?:replace|split)$/.test(methodName)?stringProto:arrayProto)[methodName],chainName=/^(?:push|sort|unshift)$/.test(methodName)?"tap":"thru",retUnwrapped=/^(?:join|pop|replace|shift)$/.test(methodName);lodash.prototype[methodName]=function(){var args=arguments;if(retUnwrapped&&!this.__chain__){return func.apply(this.value(),args)}return this[chainName](function(value){return func.apply(value,args)})}});
+// Map minified function names to their real names.
+baseForOwn(LazyWrapper.prototype,function(func,methodName){var lodashFunc=lodash[methodName];if(lodashFunc){var key=lodashFunc.name,names=realNames[key]||(realNames[key]=[]);names.push({name:methodName,func:lodashFunc})}});realNames[createHybridWrapper(undefined,BIND_KEY_FLAG).name]=[{name:"wrapper",func:undefined}];
+// Add functions to the lazy wrapper.
+LazyWrapper.prototype.clone=lazyClone;LazyWrapper.prototype.reverse=lazyReverse;LazyWrapper.prototype.value=lazyValue;
+// Add chaining functions to the `lodash` wrapper.
+lodash.prototype.chain=wrapperChain;lodash.prototype.commit=wrapperCommit;lodash.prototype.concat=wrapperConcat;lodash.prototype.plant=wrapperPlant;lodash.prototype.reverse=wrapperReverse;lodash.prototype.toString=wrapperToString;lodash.prototype.run=lodash.prototype.toJSON=lodash.prototype.valueOf=lodash.prototype.value=wrapperValue;
+// Add function aliases to the `lodash` wrapper.
+lodash.prototype.collect=lodash.prototype.map;lodash.prototype.head=lodash.prototype.first;lodash.prototype.select=lodash.prototype.filter;lodash.prototype.tail=lodash.prototype.rest;return lodash}
+/*--------------------------------------------------------------------------*/
+// Export lodash.
+var _=runInContext();
+// Some AMD build optimizers like r.js check for condition patterns like the following:
+if(typeof define=="function"&&typeof define.amd=="object"&&define.amd){
+// Expose lodash to the global object when an AMD loader is present to avoid
+// errors in cases where lodash is loaded by a script tag and not intended
+// as an AMD module. See http://requirejs.org/docs/errors.html#mismatch for
+// more details.
+root._=_;
+// Define as an anonymous module so, through path mapping, it can be
+// referenced as the "underscore" module.
+define(function(){return _})}
+// Check for `exports` after `define` in case a build optimizer adds an `exports` object.
+else if(freeExports&&freeModule){
+// Export for Node.js or RingoJS.
+if(moduleExports){(freeModule.exports=_)._=_}
+// Export for Rhino with CommonJS support.
+else{freeExports._=_}}else{
+// Export for a browser or Rhino.
+root._=_}}).call(this)}).call(this,typeof global!=="undefined"?global:typeof self!=="undefined"?self:typeof window!=="undefined"?window:{})},{}]},{},[1])(1)}); \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/ext.mermaid.css b/www/wiki/extensions/Mermaid/res/ext.mermaid.css
new file mode 100644
index 00000000..d3c4435d
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/ext.mermaid.css
@@ -0,0 +1,12 @@
+/*!
+ * @file
+ * @ingroup SMW
+ *
+ * @licence GNU GPL v2+
+ * @author mwjames
+ */
+.mermaid-dots {
+ background: url('data:image/gif;base64,R0lGODlhIgAUAMQRAOjp6dTW19ze3+Xm54iKjevs7IKEh/f396Olp5ianPz8/Judn9fY2YGDhp+ho4CChdHT1P///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxRThFNDZFQ0RFQjJFMjExQUZCNUREQjU1MEFCRTI5OCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDozNkVFNURCOUIyREYxMUUyQTBEQUNFNUIzREVGNjg0MyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDozNkVFNURCOEIyREYxMUUyQTBEQUNFNUIzREVGNjg0MyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoyMDhFNDZFQ0RFQjJFMjExQUZCNUREQjU1MEFCRTI5OCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxRThFNDZFQ0RFQjJFMjExQUZCNUREQjU1MEFCRTI5OCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PgH//v38+/r5+Pf29fTz8vHw7+7t7Ovq6ejn5uXk4+Lh4N/e3dzb2tnY19bV1NPS0dDPzs3My8rJyMfGxcTDwsHAv769vLu6ubi3trW0s7KxsK+urayrqqmop6alpKOioaCfnp2cm5qZmJeWlZSTkpGQj46NjIuKiYiHhoWEg4KBgH9+fXx7enl4d3Z1dHNycXBvbm1sa2ppaGdmZWRjYmFgX15dXFtaWVhXVlVUU1JRUE9OTUxLSklIR0ZFRENCQUA/Pj08Ozo5ODc2NTQzMjEwLy4tLCsqKSgnJiUkIyIhIB8eHRwbGhkYFxYVFBMSERAPDg0MCwoJCAcGBQQDAgEAACH5BAkyABEALAAAAAAiABQAAAVeYCSOZGmeaKqubOu+cCzPdM0iBIGYgCAUPB8Q5XgYHw4SAMKEAJRNJ8pwfBhIgagAq0U1qg1ukyFmkk+L6oI0iD5H7ebbdEgYEweSYhAIDEp7fX82hIWGh4iJiosoIQAh+QQJMgARACwAAAAAIgAUAAAFZGAkjmRpnmiqrmzrvnAsz3TNFoIAmAhBICZArpACQI6Q3cjxaD4cJCNSaRIgIQGSwfkwkAJXAYpxzY4a3Mb3ykBJjwPSgrsgDa5U0yAQGChIBwlNCQckCnt9NoqLjI2Oj5CRKSEAIfkEBTIAEQAsAAAAACIAFAAABWNgJI5kaZ5oqq5s675wLM90zRaCAJi4biIEAiIFgBghu1HxmBQ5HtCHAyU4QgKk6hE7MkQfBhTDyhWNt6TGt4FaGgckNwQ+WnwXqUEgMFCU9Hx+IwcJUAkHNomKi4yNjo+QKCEAOw==') no-repeat left center;
+ padding: 5px 0 5px 35px;
+ vertical-align: middle;
+}
diff --git a/www/wiki/extensions/Mermaid/res/ext.mermaid.js b/www/wiki/extensions/Mermaid/res/ext.mermaid.js
new file mode 100644
index 00000000..b2e2b906
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/ext.mermaid.js
@@ -0,0 +1,38 @@
+/*!
+ * @file
+ * @ingroup SMW
+ *
+ * @licence GNU GPL v2+
+ * @author mwjames
+ */
+
+/*global jQuery, mediaWiki, smw */
+/*jslint white: true */
+
+( function( $, mw ) {
+
+ 'use strict';
+
+ var config = mw.config.get( 'mermaid' );
+
+ mw.loader.using( [ 'mediawiki.api', 'ext.mermaid', 'ext.mermaid.theme.' + config.theme ] ).then( function () {
+
+ $( document ).ready( function() {
+
+ $( '.ext-mermaid' ).each( function() {
+
+ var that = $( this );
+
+ var id = 'ext-mermaid-' + ( new Date().getTime() );
+ var data = that.data( 'mermaid' );
+
+ that.find( '.mermaid-dots' ).hide();
+ that.append( '<div id=' + id + '> ' + data.content + ' </div>' );
+
+ mermaid.initialize( data.config );
+ mermaid.init( undefined, $( "#" + id ) );
+ } );
+ } );
+} );
+
+}( jQuery, mediaWiki ) );
diff --git a/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.dark.min.css b/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.dark.min.css
new file mode 100644
index 00000000..e8912f71
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.dark.min.css
@@ -0,0 +1 @@
+.mermaid .label{color:#323d47}.node circle,.node ellipse,.node polygon,.node rect{fill:#bdd5ea;stroke:#81b1db;stroke-width:1px}.arrowheadPath{fill:#d3d3d3}.edgePath .path{stroke:#d3d3d3}.edgeLabel{background-color:#e8e8e8}.cluster rect{fill:#6d6d65!important;rx:4!important;stroke:hsla(0,0%,100%,.25)!important;stroke-width:1px!important}.cluster text{fill:#f9fffe}.actor{stroke:#81b1db;fill:#bdd5ea}text.actor{fill:#000;stroke:none}.actor-line{stroke:#d3d3d3}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#d3d3d3}#arrowhead,#crosshead path{fill:#d3d3d3!important}#crosshead path{stroke:#d3d3d3!important}.messageText{fill:#d3d3d3;stroke:none}.labelBox{stroke:#81b1db;fill:#bdd5ea}.labelText{fill:#323d47;stroke:none}.loopText{fill:#d3d3d3;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#81b1db}.note{stroke:hsla(0,0%,100%,.25);fill:#fff5ad}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0{fill:hsla(0,0%,100%,.3)}.section2{fill:#eae8b9}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#f9fffe}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:hsla(0,0%,100%,.3);opacity:.3;shape-rendering:crispEdges}.grid .tick text{fill:#d3d3d3;opacity:.5}.grid path{stroke-width:0}.today{fill:none;stroke:#db5757;stroke-width:2px}.task{stroke-width:1}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#323d47;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#323d47;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#323d47}.task0,.task1,.task2,.task3{fill:#bdd5ea;stroke:hsla(0,0%,100%,.5)}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#d3d3d3}.active0,.active1,.active2,.active3{fill:#81b1db;stroke:hsla(0,0%,100%,.5)}.activeText0,.activeText1,.activeText2,.activeText3{fill:#323d47!important}.done0,.done1,.done2,.done3{fill:#d3d3d3}.doneText0,.doneText1,.doneText2,.doneText3{fill:#323d47!important}.crit0,.crit1,.crit2,.crit3{stroke:#e83737;fill:#e83737;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#e83737;fill:#81b1db;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#e83737;fill:#d3d3d3;stroke-width:1;cursor:pointer;shape-rendering:crispEdges}.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#d3d3d3!important}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3{fill:#323d47!important}.titleText{text-anchor:middle;font-size:18px;fill:#d3d3d3}g.classGroup text{fill:purple;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#bdd5ea;stroke:purple}g.classGroup line{stroke:purple;stroke-width:1}svg .classLabel .box{stroke:none;stroke-width:0;fill:#bdd5ea;opacity:.5}svg .classLabel .label{fill:purple;font-size:10px}.relation{stroke:purple;stroke-width:1;fill:none}#compositionEnd,#compositionStart,.composition{fill:purple;stroke:purple;stroke-width:1}#aggregationEnd,#aggregationStart,.aggregation{fill:#bdd5ea;stroke:purple;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:purple;stroke:purple;stroke-width:1}.branch-label,.commit-id,.commit-msg{fill:#d3d3d3;color:#d3d3d3}.node text{font-size:14px}.node text,div.mermaidTooltip{font-family:trebuchet ms,verdana,arial}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:#6d6d65;border:1px solid hsla(0,0%,100%,.25);border-radius:2px;pointer-events:none;z-index:100} \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.forest.min.css b/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.forest.min.css
new file mode 100644
index 00000000..f8a2fca3
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.forest.min.css
@@ -0,0 +1 @@
+.mermaid .label{font-family:trebuchet ms,verdana,arial;color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#cde498;stroke:#13540c;stroke-width:1px}.arrowheadPath{fill:green}.edgePath .path{stroke:green;stroke-width:1.5px}.edgeLabel{background-color:#e8e8e8}.cluster rect{fill:#cdffb2!important;rx:4!important;stroke:#6eaa49!important;stroke-width:1px!important}.cluster text{fill:#333}.actor{stroke:#13540c;fill:#cde498}text.actor{fill:#000;stroke:none}.actor-line{stroke:grey}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#arrowhead{fill:#333}#crosshead path{fill:#333!important;stroke:#333!important}.messageText{fill:#333;stroke:none}.labelBox{stroke:#326932;fill:#cde498}.labelText,.loopText{fill:#000;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#326932}.note{stroke:#6eaa49;fill:#fff5ad}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0,.section2{fill:#6eaa49}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#333}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#d3d3d3;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:red;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:#487e3a;stroke:#13540c}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#000}.active0,.active1,.active2,.active3{fill:#cde498;stroke:#13540c}.activeText0,.activeText1,.activeText2,.activeText3{fill:#000!important}.done0,.done1,.done2,.done3{stroke:grey;fill:#d3d3d3;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#000!important}.crit0,.crit1,.crit2,.crit3{stroke:#f88;fill:red;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#f88;fill:#cde498;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#000!important}.titleText{text-anchor:middle;font-size:18px;fill:#000}g.classGroup text{fill:#13540c;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#cde498;stroke:#13540c}g.classGroup line{stroke:#13540c;stroke-width:1}svg .classLabel .box{stroke:none;stroke-width:0;fill:#cde498;opacity:.5}svg .classLabel .label{fill:#13540c;font-size:10px}.relation{stroke:#13540c;stroke-width:1;fill:none}#compositionEnd,#compositionStart,.composition{fill:#13540c;stroke:#13540c;stroke-width:1}#aggregationEnd,#aggregationStart,.aggregation{fill:#cde498;stroke:#13540c;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:#13540c;stroke:#13540c;stroke-width:1}.node text{font-size:14px}.node text,div.mermaidTooltip{font-family:trebuchet ms,verdana,arial}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:#cdffb2;border:1px solid #6eaa49;border-radius:2px;pointer-events:none;z-index:100} \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.min.css b/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.min.css
new file mode 100644
index 00000000..a485f4ce
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.min.css
@@ -0,0 +1 @@
+.mermaid .label{color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#ececff;stroke:#ccf;stroke-width:1px}.arrowheadPath{fill:#333}.edgePath .path{stroke:#333}.edgeLabel{background-color:#e8e8e8}.cluster rect{fill:#ffffde!important;rx:4!important;stroke:#aa3!important;stroke-width:1px!important}.cluster text{fill:#333}.actor{stroke:#ccf;fill:#ececff}text.actor{fill:#000;stroke:none}.actor-line{stroke:grey}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#arrowhead{fill:#333}#crosshead path{fill:#333!important;stroke:#333!important}.messageText{fill:#333;stroke:none}.labelBox{stroke:#ccf;fill:#ececff}.labelText,.loopText{fill:#000;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#ccf}.note{stroke:#aa3;fill:#fff5ad}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0{fill:rgba(102,102,255,.49)}.section2{fill:#fff400}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#333}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#d3d3d3;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:red;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:#8a90dd;stroke:#534fbc}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#000}.active0,.active1,.active2,.active3{fill:#bfc7ff;stroke:#534fbc}.activeText0,.activeText1,.activeText2,.activeText3{fill:#000!important}.done0,.done1,.done2,.done3{stroke:grey;fill:#d3d3d3;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#000!important}.crit0,.crit1,.crit2,.crit3{stroke:#f88;fill:red;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#000!important}.titleText{text-anchor:middle;font-size:18px;fill:#000}g.classGroup text{fill:#9370db;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#ececff;stroke:#9370db}g.classGroup line{stroke:#9370db;stroke-width:1}svg .classLabel .box{stroke:none;stroke-width:0;fill:#ececff;opacity:.5}svg .classLabel .label{fill:#9370db;font-size:10px}.relation{stroke:#9370db;stroke-width:1;fill:none}#compositionEnd,#compositionStart,.composition{fill:#9370db;stroke:#9370db;stroke-width:1}#aggregationEnd,#aggregationStart,.aggregation{fill:#ececff;stroke:#9370db;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}.node text{font-size:14px}.node text,div.mermaidTooltip{font-family:trebuchet ms,verdana,arial}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100} \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.min.js b/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.min.js
new file mode 100644
index 00000000..637a9d4c
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.min.js
@@ -0,0 +1,28 @@
+!function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=170)}([function(t,e,n){(function(t){!function(e,n){t.exports=n()}(0,function(){"use strict";function e(){return Mr.apply(null,arguments)}function r(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function i(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){var e;for(e in t)return!1;return!0}function o(t){return void 0===t}function u(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function s(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function c(t,e){var n,r=[];for(n=0;n<t.length;++n)r.push(e(t[n],n));return r}function l(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function d(t,e){for(var n in e)l(e,n)&&(t[n]=e[n]);return l(e,"toString")&&(t.toString=e.toString),l(e,"valueOf")&&(t.valueOf=e.valueOf),t}function h(t,e,n,r){return ve(t,e,n,r,!0).utc()}function f(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function _(t){return null==t._pf&&(t._pf=f()),t._pf}function p(t){if(null==t._isValid){var e=_(t),n=Lr.call(e.parsedDateParts,function(t){return null!=t}),r=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(r=r&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return r;t._isValid=r}return t._isValid}function m(t){var e=h(NaN);return null!=t?d(_(e),t):_(e).userInvalidated=!0,e}function y(t,e){var n,r,i;if(o(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),o(e._i)||(t._i=e._i),o(e._f)||(t._f=e._f),o(e._l)||(t._l=e._l),o(e._strict)||(t._strict=e._strict),o(e._tzm)||(t._tzm=e._tzm),o(e._isUTC)||(t._isUTC=e._isUTC),o(e._offset)||(t._offset=e._offset),o(e._pf)||(t._pf=_(e)),o(e._locale)||(t._locale=e._locale),kr.length>0)for(n=0;n<kr.length;n++)r=kr[n],i=e[r],o(i)||(t[r]=i);return t}function g(t){y(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===wr&&(wr=!0,e.updateOffset(this),wr=!1)}function v(t){return t instanceof g||null!=t&&null!=t._isAMomentObject}function M(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function b(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=M(e)),n}function L(t,e,n){var r,i=Math.min(t.length,e.length),a=Math.abs(t.length-e.length),o=0;for(r=0;r<i;r++)(n&&t[r]!==e[r]||!n&&b(t[r])!==b(e[r]))&&o++;return o+a}function k(t){!1===e.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function w(t,n){var r=!0;return d(function(){if(null!=e.deprecationHandler&&e.deprecationHandler(null,t),r){for(var i,a=[],o=0;o<arguments.length;o++){if(i="","object"==typeof arguments[o]){i+="\n["+o+"] ";for(var u in arguments[0])i+=u+": "+arguments[0][u]+", ";i=i.slice(0,-2)}else i=arguments[o];a.push(i)}k(t+"\nArguments: "+Array.prototype.slice.call(a).join("")+"\n"+(new Error).stack),r=!1}return n.apply(this,arguments)},n)}function D(t,n){null!=e.deprecationHandler&&e.deprecationHandler(t,n),Dr[t]||(k(n),Dr[t]=!0)}function x(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function Y(t){var e,n;for(n in t)e=t[n],x(e)?this[n]=e:this["_"+n]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function T(t,e){var n,r=d({},t);for(n in e)l(e,n)&&(i(t[n])&&i(e[n])?(r[n]={},d(r[n],t[n]),d(r[n],e[n])):null!=e[n]?r[n]=e[n]:delete r[n]);for(n in t)l(t,n)&&!l(e,n)&&i(t[n])&&(r[n]=d({},r[n]));return r}function A(t){null!=t&&this.set(t)}function E(t,e,n){var r=this._calendar[t]||this._calendar.sameElse;return x(r)?r.call(e,n):r}function S(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])}function F(){return this._invalidDate}function C(t){return this._ordinal.replace("%d",t)}function j(t,e,n,r){var i=this._relativeTime[n];return x(i)?i(t,e,n,r):i.replace(/%d/i,t)}function H(t,e){var n=this._relativeTime[t>0?"future":"past"];return x(n)?n(e):n.replace(/%s/i,e)}function O(t,e){var n=t.toLowerCase();Cr[n]=Cr[n+"s"]=Cr[e]=t}function P(t){return"string"==typeof t?Cr[t]||Cr[t.toLowerCase()]:void 0}function N(t){var e,n,r={};for(n in t)l(t,n)&&(e=P(n))&&(r[e]=t[n]);return r}function B(t,e){jr[t]=e}function I(t){var e=[];for(var n in t)e.push({unit:n,priority:jr[n]});return e.sort(function(t,e){return t.priority-e.priority}),e}function R(t,n){return function(r){return null!=r?(z(this,t,r),e.updateOffset(this,n),this):W(this,t)}}function W(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function z(t,e,n){t.isValid()&&t._d["set"+(t._isUTC?"UTC":"")+e](n)}function q(t){return t=P(t),x(this[t])?this[t]():this}function U(t,e){if("object"==typeof t){t=N(t);for(var n=I(t),r=0;r<n.length;r++)this[n[r].unit](t[n[r].unit])}else if(t=P(t),x(this[t]))return this[t](e);return this}function $(t,e,n){var r=""+Math.abs(t),i=e-r.length;return(t>=0?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}function V(t,e,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),t&&(Nr[t]=i),e&&(Nr[e[0]]=function(){return $(i.apply(this,arguments),e[1],e[2])}),n&&(Nr[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),t)})}function G(t){return t.match(/\[[\s\S]/)?t.replace(/^\[|\]$/g,""):t.replace(/\\/g,"")}function J(t){var e,n,r=t.match(Hr);for(e=0,n=r.length;e<n;e++)Nr[r[e]]?r[e]=Nr[r[e]]:r[e]=G(r[e]);return function(e){var i,a="";for(i=0;i<n;i++)a+=x(r[i])?r[i].call(e,t):r[i];return a}}function Z(t,e){return t.isValid()?(e=K(e,t.localeData()),Pr[e]=Pr[e]||J(e),Pr[e](t)):t.localeData().invalidDate()}function K(t,e){function n(t){return e.longDateFormat(t)||t}var r=5;for(Or.lastIndex=0;r>=0&&Or.test(t);)t=t.replace(Or,n),Or.lastIndex=0,r-=1;return t}function X(t,e,n){ni[t]=x(e)?e:function(t,r){return t&&n?n:e}}function Q(t,e){return l(ni,t)?ni[t](e._strict,e._locale):new RegExp(tt(t))}function tt(t){return et(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,r,i){return e||n||r||i}))}function et(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function nt(t,e){var n,r=e;for("string"==typeof t&&(t=[t]),u(e)&&(r=function(t,n){n[e]=b(t)}),n=0;n<t.length;n++)ri[t[n]]=r}function rt(t,e){nt(t,function(t,n,r,i){r._w=r._w||{},e(t,r._w,r,i)})}function it(t,e,n){null!=e&&l(ri,t)&&ri[t](e,n._a,n,t)}function at(t,e){return new Date(Date.UTC(t,e+1,0)).getUTCDate()}function ot(t,e){return t?r(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||_i).test(e)?"format":"standalone"][t.month()]:r(this._months)?this._months:this._months.standalone}function ut(t,e){return t?r(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[_i.test(e)?"format":"standalone"][t.month()]:r(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function st(t,e,n){var r,i,a,o=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)a=h([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(a,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(a,"").toLocaleLowerCase();return n?"MMM"===e?(i=fi.call(this._shortMonthsParse,o),-1!==i?i:null):(i=fi.call(this._longMonthsParse,o),-1!==i?i:null):"MMM"===e?-1!==(i=fi.call(this._shortMonthsParse,o))?i:(i=fi.call(this._longMonthsParse,o),-1!==i?i:null):-1!==(i=fi.call(this._longMonthsParse,o))?i:(i=fi.call(this._shortMonthsParse,o),-1!==i?i:null)}function ct(t,e,n){var r,i,a;if(this._monthsParseExact)return st.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(i=h([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(a="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(a.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[r].test(t))return r;if(n&&"MMM"===e&&this._shortMonthsParse[r].test(t))return r;if(!n&&this._monthsParse[r].test(t))return r}}function lt(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=b(e);else if(e=t.localeData().monthsParse(e),!u(e))return t;return n=Math.min(t.date(),at(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function dt(t){return null!=t?(lt(this,t),e.updateOffset(this,!0),this):W(this,"Month")}function ht(){return at(this.year(),this.month())}function ft(t){return this._monthsParseExact?(l(this,"_monthsRegex")||pt.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(l(this,"_monthsShortRegex")||(this._monthsShortRegex=yi),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)}function _t(t){return this._monthsParseExact?(l(this,"_monthsRegex")||pt.call(this),t?this._monthsStrictRegex:this._monthsRegex):(l(this,"_monthsRegex")||(this._monthsRegex=gi),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)}function pt(){function t(t,e){return e.length-t.length}var e,n,r=[],i=[],a=[];for(e=0;e<12;e++)n=h([2e3,e]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),a.push(this.months(n,"")),a.push(this.monthsShort(n,""));for(r.sort(t),i.sort(t),a.sort(t),e=0;e<12;e++)r[e]=et(r[e]),i[e]=et(i[e]);for(e=0;e<24;e++)a[e]=et(a[e]);this._monthsRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")","i")}function mt(t){return yt(t)?366:365}function yt(t){return t%4==0&&t%100!=0||t%400==0}function gt(){return yt(this.year())}function vt(t,e,n,r,i,a,o){var u=new Date(t,e,n,r,i,a,o);return t<100&&t>=0&&isFinite(u.getFullYear())&&u.setFullYear(t),u}function Mt(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function bt(t,e,n){var r=7+e-n;return-(7+Mt(t,0,r).getUTCDay()-e)%7+r-1}function Lt(t,e,n,r,i){var a,o,u=(7+n-r)%7,s=bt(t,r,i),c=1+7*(e-1)+u+s;return c<=0?(a=t-1,o=mt(a)+c):c>mt(t)?(a=t+1,o=c-mt(t)):(a=t,o=c),{year:a,dayOfYear:o}}function kt(t,e,n){var r,i,a=bt(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?(i=t.year()-1,r=o+wt(i,e,n)):o>wt(t.year(),e,n)?(r=o-wt(t.year(),e,n),i=t.year()+1):(i=t.year(),r=o),{week:r,year:i}}function wt(t,e,n){var r=bt(t,e,n),i=bt(t+1,e,n);return(mt(t)-r+i)/7}function Dt(t){return kt(t,this._week.dow,this._week.doy).week}function xt(){return this._week.dow}function Yt(){return this._week.doy}function Tt(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")}function At(t){var e=kt(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")}function Et(t,e){return"string"!=typeof t?t:isNaN(t)?(t=e.weekdaysParse(t),"number"==typeof t?t:null):parseInt(t,10)}function St(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}function Ft(t,e){return t?r(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:r(this._weekdays)?this._weekdays:this._weekdays.standalone}function Ct(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort}function jt(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin}function Ht(t,e,n){var r,i,a,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)a=h([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(a,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(a,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(a,"").toLocaleLowerCase();return n?"dddd"===e?(i=fi.call(this._weekdaysParse,o),-1!==i?i:null):"ddd"===e?(i=fi.call(this._shortWeekdaysParse,o),-1!==i?i:null):(i=fi.call(this._minWeekdaysParse,o),-1!==i?i:null):"dddd"===e?-1!==(i=fi.call(this._weekdaysParse,o))?i:-1!==(i=fi.call(this._shortWeekdaysParse,o))?i:(i=fi.call(this._minWeekdaysParse,o),-1!==i?i:null):"ddd"===e?-1!==(i=fi.call(this._shortWeekdaysParse,o))?i:-1!==(i=fi.call(this._weekdaysParse,o))?i:(i=fi.call(this._minWeekdaysParse,o),-1!==i?i:null):-1!==(i=fi.call(this._minWeekdaysParse,o))?i:-1!==(i=fi.call(this._weekdaysParse,o))?i:(i=fi.call(this._shortWeekdaysParse,o),-1!==i?i:null)}function Ot(t,e,n){var r,i,a;if(this._weekdaysParseExact)return Ht.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(i=h([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(a="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(a.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[r].test(t))return r;if(n&&"ddd"===e&&this._shortWeekdaysParse[r].test(t))return r;if(n&&"dd"===e&&this._minWeekdaysParse[r].test(t))return r;if(!n&&this._weekdaysParse[r].test(t))return r}}function Pt(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=Et(t,this.localeData()),this.add(t-e,"d")):e}function Nt(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")}function Bt(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=St(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7}function It(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||zt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(l(this,"_weekdaysRegex")||(this._weekdaysRegex=wi),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)}function Rt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||zt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(l(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Di),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Wt(t){return this._weekdaysParseExact?(l(this,"_weekdaysRegex")||zt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(l(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=xi),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function zt(){function t(t,e){return e.length-t.length}var e,n,r,i,a,o=[],u=[],s=[],c=[];for(e=0;e<7;e++)n=h([2e3,1]).day(e),r=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),a=this.weekdays(n,""),o.push(r),u.push(i),s.push(a),c.push(r),c.push(i),c.push(a);for(o.sort(t),u.sort(t),s.sort(t),c.sort(t),e=0;e<7;e++)u[e]=et(u[e]),s[e]=et(s[e]),c[e]=et(c[e]);this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function qt(){return this.hours()%12||12}function Ut(){return this.hours()||24}function $t(t,e){V(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function Vt(t,e){return e._meridiemParse}function Gt(t){return"p"===(t+"").toLowerCase().charAt(0)}function Jt(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"}function Zt(t){return t?t.toLowerCase().replace("_","-"):t}function Kt(t){for(var e,n,r,i,a=0;a<t.length;){for(i=Zt(t[a]).split("-"),e=i.length,n=Zt(t[a+1]),n=n?n.split("-"):null;e>0;){if(r=Xt(i.slice(0,e).join("-")))return r;if(n&&n.length>=e&&L(i,n,!0)>=e-1)break;e--}a++}return null}function Xt(e){var r=null;if(!Si[e]&&void 0!==t&&t&&t.exports)try{r=Yi._abbr,n(247)("./"+e),Qt(r)}catch(t){}return Si[e]}function Qt(t,e){var n;return t&&(n=o(e)?ne(t):te(t,e))&&(Yi=n),Yi._abbr}function te(t,e){if(null!==e){var n=Ei;if(e.abbr=t,null!=Si[t])D("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."),n=Si[t]._config;else if(null!=e.parentLocale){if(null==Si[e.parentLocale])return Fi[e.parentLocale]||(Fi[e.parentLocale]=[]),Fi[e.parentLocale].push({name:t,config:e}),null;n=Si[e.parentLocale]._config}return Si[t]=new A(T(n,e)),Fi[t]&&Fi[t].forEach(function(t){te(t.name,t.config)}),Qt(t),Si[t]}return delete Si[t],null}function ee(t,e){if(null!=e){var n,r=Ei;null!=Si[t]&&(r=Si[t]._config),e=T(r,e),n=new A(e),n.parentLocale=Si[t],Si[t]=n,Qt(t)}else null!=Si[t]&&(null!=Si[t].parentLocale?Si[t]=Si[t].parentLocale:null!=Si[t]&&delete Si[t]);return Si[t]}function ne(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return Yi;if(!r(t)){if(e=Xt(t))return e;t=[t]}return Kt(t)}function re(){return Tr(Si)}function ie(t){var e,n=t._a;return n&&-2===_(t).overflow&&(e=n[ai]<0||n[ai]>11?ai:n[oi]<1||n[oi]>at(n[ii],n[ai])?oi:n[ui]<0||n[ui]>24||24===n[ui]&&(0!==n[si]||0!==n[ci]||0!==n[li])?ui:n[si]<0||n[si]>59?si:n[ci]<0||n[ci]>59?ci:n[li]<0||n[li]>999?li:-1,_(t)._overflowDayOfYear&&(e<ii||e>oi)&&(e=oi),_(t)._overflowWeeks&&-1===e&&(e=di),_(t)._overflowWeekday&&-1===e&&(e=hi),_(t).overflow=e),t}function ae(t){var e,n,r,i,a,o,u=t._i,s=Ci.exec(u)||ji.exec(u);if(s){for(_(t).iso=!0,e=0,n=Oi.length;e<n;e++)if(Oi[e][1].exec(s[1])){i=Oi[e][0],r=!1!==Oi[e][2];break}if(null==i)return void(t._isValid=!1);if(s[3]){for(e=0,n=Pi.length;e<n;e++)if(Pi[e][1].exec(s[3])){a=(s[2]||" ")+Pi[e][0];break}if(null==a)return void(t._isValid=!1)}if(!r&&null!=a)return void(t._isValid=!1);if(s[4]){if(!Hi.exec(s[4]))return void(t._isValid=!1);o="Z"}t._f=i+(a||"")+(o||""),he(t)}else t._isValid=!1}function oe(t){var e,n,r,i,a,o,u,s,c={" GMT":" +0000"," EDT":" -0400"," EST":" -0500"," CDT":" -0500"," CST":" -0600"," MDT":" -0600"," MST":" -0700"," PDT":" -0700"," PST":" -0800"},l="YXWVUTSRQPONZABCDEFGHIKLM";if(e=t._i.replace(/\([^\)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s|\s$/g,""),n=Bi.exec(e)){if(r=n[1]?"ddd"+(5===n[1].length?", ":" "):"",i="D MMM "+(n[2].length>10?"YYYY ":"YY "),a="HH:mm"+(n[4]?":ss":""),n[1]){var d=new Date(n[2]),h=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][d.getDay()];if(n[1].substr(0,3)!==h)return _(t).weekdayMismatch=!0,void(t._isValid=!1)}switch(n[5].length){case 2:0===s?u=" +0000":(s=l.indexOf(n[5][1].toUpperCase())-12,u=(s<0?" -":" +")+(""+s).replace(/^-?/,"0").match(/..$/)[0]+"00");break;case 4:u=c[n[5]];break;default:u=c[" GMT"]}n[5]=u,t._i=n.splice(1).join(""),o=" ZZ",t._f=r+i+a+o,he(t),_(t).rfc2822=!0}else t._isValid=!1}function ue(t){var n=Ni.exec(t._i);if(null!==n)return void(t._d=new Date(+n[1]));ae(t),!1===t._isValid&&(delete t._isValid,oe(t),!1===t._isValid&&(delete t._isValid,e.createFromInputFallback(t)))}function se(t,e,n){return null!=t?t:null!=e?e:n}function ce(t){var n=new Date(e.now());return t._useUTC?[n.getUTCFullYear(),n.getUTCMonth(),n.getUTCDate()]:[n.getFullYear(),n.getMonth(),n.getDate()]}function le(t){var e,n,r,i,a=[];if(!t._d){for(r=ce(t),t._w&&null==t._a[oi]&&null==t._a[ai]&&de(t),null!=t._dayOfYear&&(i=se(t._a[ii],r[ii]),(t._dayOfYear>mt(i)||0===t._dayOfYear)&&(_(t)._overflowDayOfYear=!0),n=Mt(i,0,t._dayOfYear),t._a[ai]=n.getUTCMonth(),t._a[oi]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=a[e]=r[e];for(;e<7;e++)t._a[e]=a[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[ui]&&0===t._a[si]&&0===t._a[ci]&&0===t._a[li]&&(t._nextDay=!0,t._a[ui]=0),t._d=(t._useUTC?Mt:vt).apply(null,a),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[ui]=24)}}function de(t){var e,n,r,i,a,o,u,s;if(e=t._w,null!=e.GG||null!=e.W||null!=e.E)a=1,o=4,n=se(e.GG,t._a[ii],kt(Me(),1,4).year),r=se(e.W,1),((i=se(e.E,1))<1||i>7)&&(s=!0);else{a=t._locale._week.dow,o=t._locale._week.doy;var c=kt(Me(),a,o);n=se(e.gg,t._a[ii],c.year),r=se(e.w,c.week),null!=e.d?((i=e.d)<0||i>6)&&(s=!0):null!=e.e?(i=e.e+a,(e.e<0||e.e>6)&&(s=!0)):i=a}r<1||r>wt(n,a,o)?_(t)._overflowWeeks=!0:null!=s?_(t)._overflowWeekday=!0:(u=Lt(n,r,i,a,o),t._a[ii]=u.year,t._dayOfYear=u.dayOfYear)}function he(t){if(t._f===e.ISO_8601)return void ae(t);if(t._f===e.RFC_2822)return void oe(t);t._a=[],_(t).empty=!0;var n,r,i,a,o,u=""+t._i,s=u.length,c=0;for(i=K(t._f,t._locale).match(Hr)||[],n=0;n<i.length;n++)a=i[n],r=(u.match(Q(a,t))||[])[0],r&&(o=u.substr(0,u.indexOf(r)),o.length>0&&_(t).unusedInput.push(o),u=u.slice(u.indexOf(r)+r.length),c+=r.length),Nr[a]?(r?_(t).empty=!1:_(t).unusedTokens.push(a),it(a,r,t)):t._strict&&!r&&_(t).unusedTokens.push(a);_(t).charsLeftOver=s-c,u.length>0&&_(t).unusedInput.push(u),t._a[ui]<=12&&!0===_(t).bigHour&&t._a[ui]>0&&(_(t).bigHour=void 0),_(t).parsedDateParts=t._a.slice(0),_(t).meridiem=t._meridiem,t._a[ui]=fe(t._locale,t._a[ui],t._meridiem),le(t),ie(t)}function fe(t,e,n){var r;return null==n?e:null!=t.meridiemHour?t.meridiemHour(e,n):null!=t.isPM?(r=t.isPM(n),r&&e<12&&(e+=12),r||12!==e||(e=0),e):e}function _e(t){var e,n,r,i,a;if(0===t._f.length)return _(t).invalidFormat=!0,void(t._d=new Date(NaN));for(i=0;i<t._f.length;i++)a=0,e=y({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[i],he(e),p(e)&&(a+=_(e).charsLeftOver,a+=10*_(e).unusedTokens.length,_(e).score=a,(null==r||a<r)&&(r=a,n=e));d(t,n||e)}function pe(t){if(!t._d){var e=N(t._i);t._a=c([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),le(t)}}function me(t){var e=new g(ie(ye(t)));return e._nextDay&&(e.add(1,"d"),e._nextDay=void 0),e}function ye(t){var e=t._i,n=t._f;return t._locale=t._locale||ne(t._l),null===e||void 0===n&&""===e?m({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),v(e)?new g(ie(e)):(s(e)?t._d=e:r(n)?_e(t):n?he(t):ge(t),p(t)||(t._d=null),t))}function ge(t){var n=t._i;o(n)?t._d=new Date(e.now()):s(n)?t._d=new Date(n.valueOf()):"string"==typeof n?ue(t):r(n)?(t._a=c(n.slice(0),function(t){return parseInt(t,10)}),le(t)):i(n)?pe(t):u(n)?t._d=new Date(n):e.createFromInputFallback(t)}function ve(t,e,n,o,u){var s={};return!0!==n&&!1!==n||(o=n,n=void 0),(i(t)&&a(t)||r(t)&&0===t.length)&&(t=void 0),s._isAMomentObject=!0,s._useUTC=s._isUTC=u,s._l=n,s._i=t,s._f=e,s._strict=o,me(s)}function Me(t,e,n,r){return ve(t,e,n,r,!1)}function be(t,e){var n,i;if(1===e.length&&r(e[0])&&(e=e[0]),!e.length)return Me();for(n=e[0],i=1;i<e.length;++i)e[i].isValid()&&!e[i][t](n)||(n=e[i]);return n}function Le(){return be("isBefore",[].slice.call(arguments,0))}function ke(){return be("isAfter",[].slice.call(arguments,0))}function we(t){for(var e in t)if(-1===zi.indexOf(e)||null!=t[e]&&isNaN(t[e]))return!1;for(var n=!1,r=0;r<zi.length;++r)if(t[zi[r]]){if(n)return!1;parseFloat(t[zi[r]])!==b(t[zi[r]])&&(n=!0)}return!0}function De(){return this._isValid}function xe(){return Ue(NaN)}function Ye(t){var e=N(t),n=e.year||0,r=e.quarter||0,i=e.month||0,a=e.week||0,o=e.day||0,u=e.hour||0,s=e.minute||0,c=e.second||0,l=e.millisecond||0;this._isValid=we(e),this._milliseconds=+l+1e3*c+6e4*s+1e3*u*60*60,this._days=+o+7*a,this._months=+i+3*r+12*n,this._data={},this._locale=ne(),this._bubble()}function Te(t){return t instanceof Ye}function Ae(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ee(t,e){V(t,0,0,function(){var t=this.utcOffset(),n="+";return t<0&&(t=-t,n="-"),n+$(~~(t/60),2)+e+$(~~t%60,2)})}function Se(t,e){var n=(e||"").match(t);if(null===n)return null;var r=n[n.length-1]||[],i=(r+"").match(qi)||["-",0,0],a=60*i[1]+b(i[2]);return 0===a?0:"+"===i[0]?a:-a}function Fe(t,n){var r,i;return n._isUTC?(r=n.clone(),i=(v(t)||s(t)?t.valueOf():Me(t).valueOf())-r.valueOf(),r._d.setTime(r._d.valueOf()+i),e.updateOffset(r,!1),r):Me(t).local()}function Ce(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function je(t,n,r){var i,a=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=Se(Qr,t)))return this}else Math.abs(t)<16&&!r&&(t*=60);return!this._isUTC&&n&&(i=Ce(this)),this._offset=t,this._isUTC=!0,null!=i&&this.add(i,"m"),a!==t&&(!n||this._changeInProgress?Ze(this,Ue(t-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,e.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?a:Ce(this)}function He(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()}function Oe(t){return this.utcOffset(0,t)}function Pe(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(Ce(this),"m")),this}function Ne(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=Se(Xr,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this}function Be(t){return!!this.isValid()&&(t=t?Me(t).utcOffset():0,(this.utcOffset()-t)%60==0)}function Ie(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Re(){if(!o(this._isDSTShifted))return this._isDSTShifted;var t={};if(y(t,this),t=ye(t),t._a){var e=t._isUTC?h(t._a):Me(t._a);this._isDSTShifted=this.isValid()&&L(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted}function We(){return!!this.isValid()&&!this._isUTC}function ze(){return!!this.isValid()&&this._isUTC}function qe(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}function Ue(t,e){var n,r,i,a=t,o=null;return Te(t)?a={ms:t._milliseconds,d:t._days,M:t._months}:u(t)?(a={},e?a[e]=t:a.milliseconds=t):(o=Ui.exec(t))?(n="-"===o[1]?-1:1,a={y:0,d:b(o[oi])*n,h:b(o[ui])*n,m:b(o[si])*n,s:b(o[ci])*n,ms:b(Ae(1e3*o[li]))*n}):(o=$i.exec(t))?(n="-"===o[1]?-1:1,a={y:$e(o[2],n),M:$e(o[3],n),w:$e(o[4],n),d:$e(o[5],n),h:$e(o[6],n),m:$e(o[7],n),s:$e(o[8],n)}):null==a?a={}:"object"==typeof a&&("from"in a||"to"in a)&&(i=Ge(Me(a.from),Me(a.to)),a={},a.ms=i.milliseconds,a.M=i.months),r=new Ye(a),Te(t)&&l(t,"_locale")&&(r._locale=t._locale),r}function $e(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function Ve(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function Ge(t,e){var n;return t.isValid()&&e.isValid()?(e=Fe(e,t),t.isBefore(e)?n=Ve(t,e):(n=Ve(e,t),n.milliseconds=-n.milliseconds,n.months=-n.months),n):{milliseconds:0,months:0}}function Je(t,e){return function(n,r){var i,a;return null===r||isNaN(+r)||(D(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),a=n,n=r,r=a),n="string"==typeof n?+n:n,i=Ue(n,r),Ze(this,i,t),this}}function Ze(t,n,r,i){var a=n._milliseconds,o=Ae(n._days),u=Ae(n._months);t.isValid()&&(i=null==i||i,a&&t._d.setTime(t._d.valueOf()+a*r),o&&z(t,"Date",W(t,"Date")+o*r),u&&lt(t,W(t,"Month")+u*r),i&&e.updateOffset(t,o||u))}function Ke(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"}function Xe(t,n){var r=t||Me(),i=Fe(r,this).startOf("day"),a=e.calendarFormat(this,i)||"sameElse",o=n&&(x(n[a])?n[a].call(this,r):n[a]);return this.format(o||this.localeData().calendar(a,this,Me(r)))}function Qe(){return new g(this)}function tn(t,e){var n=v(t)?t:Me(t);return!(!this.isValid()||!n.isValid())&&(e=P(o(e)?"millisecond":e),"millisecond"===e?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())}function en(t,e){var n=v(t)?t:Me(t);return!(!this.isValid()||!n.isValid())&&(e=P(o(e)?"millisecond":e),"millisecond"===e?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())}function nn(t,e,n,r){return r=r||"()",("("===r[0]?this.isAfter(t,n):!this.isBefore(t,n))&&(")"===r[1]?this.isBefore(e,n):!this.isAfter(e,n))}function rn(t,e){var n,r=v(t)?t:Me(t);return!(!this.isValid()||!r.isValid())&&(e=P(e||"millisecond"),"millisecond"===e?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))}function an(t,e){return this.isSame(t,e)||this.isAfter(t,e)}function on(t,e){return this.isSame(t,e)||this.isBefore(t,e)}function un(t,e,n){var r,i,a,o;return this.isValid()?(r=Fe(t,this),r.isValid()?(i=6e4*(r.utcOffset()-this.utcOffset()),e=P(e),"year"===e||"month"===e||"quarter"===e?(o=sn(this,r),"quarter"===e?o/=3:"year"===e&&(o/=12)):(a=this-r,o="second"===e?a/1e3:"minute"===e?a/6e4:"hour"===e?a/36e5:"day"===e?(a-i)/864e5:"week"===e?(a-i)/6048e5:a),n?o:M(o)):NaN):NaN}function sn(t,e){var n,r,i=12*(e.year()-t.year())+(e.month()-t.month()),a=t.clone().add(i,"months");return e-a<0?(n=t.clone().add(i-1,"months"),r=(e-a)/(a-n)):(n=t.clone().add(i+1,"months"),r=(e-a)/(n-a)),-(i+r)||0}function cn(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function ln(){if(!this.isValid())return null;var t=this.clone().utc();return t.year()<0||t.year()>9999?Z(t,"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]"):x(Date.prototype.toISOString)?this.toDate().toISOString():Z(t,"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]")}function dn(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',r=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i=e+'[")]';return this.format(n+r+"-MM-DD[T]HH:mm:ss.SSS"+i)}function hn(t){t||(t=this.isUtc()?e.defaultFormatUtc:e.defaultFormat);var n=Z(this,t);return this.localeData().postformat(n)}function fn(t,e){return this.isValid()&&(v(t)&&t.isValid()||Me(t).isValid())?Ue({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function _n(t){return this.from(Me(),t)}function pn(t,e){return this.isValid()&&(v(t)&&t.isValid()||Me(t).isValid())?Ue({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()}function mn(t){return this.to(Me(),t)}function yn(t){var e;return void 0===t?this._locale._abbr:(e=ne(t),null!=e&&(this._locale=e),this)}function gn(){return this._locale}function vn(t){switch(t=P(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this}function Mn(t){return void 0===(t=P(t))||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))}function bn(){return this._d.valueOf()-6e4*(this._offset||0)}function Ln(){return Math.floor(this.valueOf()/1e3)}function kn(){return new Date(this.valueOf())}function wn(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]}function Dn(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}}function xn(){return this.isValid()?this.toISOString():null}function Yn(){return p(this)}function Tn(){return d({},_(this))}function An(){return _(this).overflow}function En(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function Sn(t,e){V(0,[t,t.length],0,e)}function Fn(t){return On.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function Cn(t){return On.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)}function jn(){return wt(this.year(),1,4)}function Hn(){var t=this.localeData()._week;return wt(this.year(),t.dow,t.doy)}function On(t,e,n,r,i){var a;return null==t?kt(this,r,i).year:(a=wt(t,r,i),e>a&&(e=a),Pn.call(this,t,e,n,r,i))}function Pn(t,e,n,r,i){var a=Lt(t,e,n,r,i),o=Mt(a.year,0,a.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}function Nn(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)}function Bn(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")}function In(t,e){e[li]=b(1e3*("0."+t))}function Rn(){return this._isUTC?"UTC":""}function Wn(){return this._isUTC?"Coordinated Universal Time":""}function zn(t){return Me(1e3*t)}function qn(){return Me.apply(null,arguments).parseZone()}function Un(t){return t}function $n(t,e,n,r){var i=ne(),a=h().set(r,e);return i[n](a,t)}function Vn(t,e,n){if(u(t)&&(e=t,t=void 0),t=t||"",null!=e)return $n(t,e,n,"month");var r,i=[];for(r=0;r<12;r++)i[r]=$n(t,r,n,"month");return i}function Gn(t,e,n,r){"boolean"==typeof t?(u(e)&&(n=e,e=void 0),e=e||""):(e=t,n=e,t=!1,u(e)&&(n=e,e=void 0),e=e||"");var i=ne(),a=t?i._week.dow:0;if(null!=n)return $n(e,(n+a)%7,r,"day");var o,s=[];for(o=0;o<7;o++)s[o]=$n(e,(o+a)%7,r,"day");return s}function Jn(t,e){return Vn(t,e,"months")}function Zn(t,e){return Vn(t,e,"monthsShort")}function Kn(t,e,n){return Gn(t,e,n,"weekdays")}function Xn(t,e,n){return Gn(t,e,n,"weekdaysShort")}function Qn(t,e,n){return Gn(t,e,n,"weekdaysMin")}function tr(){var t=this._data;return this._milliseconds=ra(this._milliseconds),this._days=ra(this._days),this._months=ra(this._months),t.milliseconds=ra(t.milliseconds),t.seconds=ra(t.seconds),t.minutes=ra(t.minutes),t.hours=ra(t.hours),t.months=ra(t.months),t.years=ra(t.years),this}function er(t,e,n,r){var i=Ue(e,n);return t._milliseconds+=r*i._milliseconds,t._days+=r*i._days,t._months+=r*i._months,t._bubble()}function nr(t,e){return er(this,t,e,1)}function rr(t,e){return er(this,t,e,-1)}function ir(t){return t<0?Math.floor(t):Math.ceil(t)}function ar(){var t,e,n,r,i,a=this._milliseconds,o=this._days,u=this._months,s=this._data;return a>=0&&o>=0&&u>=0||a<=0&&o<=0&&u<=0||(a+=864e5*ir(ur(u)+o),o=0,u=0),s.milliseconds=a%1e3,t=M(a/1e3),s.seconds=t%60,e=M(t/60),s.minutes=e%60,n=M(e/60),s.hours=n%24,o+=M(n/24),i=M(or(o)),u+=i,o-=ir(ur(i)),r=M(u/12),u%=12,s.days=o,s.months=u,s.years=r,this}function or(t){return 4800*t/146097}function ur(t){return 146097*t/4800}function sr(t){if(!this.isValid())return NaN;var e,n,r=this._milliseconds;if("month"===(t=P(t))||"year"===t)return e=this._days+r/864e5,n=this._months+or(e),"month"===t?n:n/12;switch(e=this._days+Math.round(ur(this._months)),t){case"week":return e/7+r/6048e5;case"day":return e+r/864e5;case"hour":return 24*e+r/36e5;case"minute":return 1440*e+r/6e4;case"second":return 86400*e+r/1e3;case"millisecond":return Math.floor(864e5*e)+r;default:throw new Error("Unknown unit "+t)}}function cr(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*b(this._months/12):NaN}function lr(t){return function(){return this.as(t)}}function dr(t){return t=P(t),this.isValid()?this[t+"s"]():NaN}function hr(t){return function(){return this.isValid()?this._data[t]:NaN}}function fr(){return M(this.days()/7)}function _r(t,e,n,r,i){return i.relativeTime(e||1,!!n,t,r)}function pr(t,e,n){var r=Ue(t).abs(),i=va(r.as("s")),a=va(r.as("m")),o=va(r.as("h")),u=va(r.as("d")),s=va(r.as("M")),c=va(r.as("y")),l=i<=Ma.ss&&["s",i]||i<Ma.s&&["ss",i]||a<=1&&["m"]||a<Ma.m&&["mm",a]||o<=1&&["h"]||o<Ma.h&&["hh",o]||u<=1&&["d"]||u<Ma.d&&["dd",u]||s<=1&&["M"]||s<Ma.M&&["MM",s]||c<=1&&["y"]||["yy",c];return l[2]=e,l[3]=+t>0,l[4]=n,_r.apply(null,l)}function mr(t){return void 0===t?va:"function"==typeof t&&(va=t,!0)}function yr(t,e){return void 0!==Ma[t]&&(void 0===e?Ma[t]:(Ma[t]=e,"s"===t&&(Ma.ss=e-1),!0))}function gr(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),n=pr(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)}function vr(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n,r=ba(this._milliseconds)/1e3,i=ba(this._days),a=ba(this._months);t=M(r/60),e=M(t/60),r%=60,t%=60,n=M(a/12),a%=12;var o=n,u=a,s=i,c=e,l=t,d=r,h=this.asSeconds();return h?(h<0?"-":"")+"P"+(o?o+"Y":"")+(u?u+"M":"")+(s?s+"D":"")+(c||l||d?"T":"")+(c?c+"H":"")+(l?l+"M":"")+(d?d+"S":""):"P0D"}var Mr,br;br=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,r=0;r<n;r++)if(r in e&&t.call(this,e[r],r,e))return!0;return!1};var Lr=br,kr=e.momentProperties=[],wr=!1,Dr={};e.suppressDeprecationWarnings=!1,e.deprecationHandler=null;var xr;xr=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)l(t,e)&&n.push(e);return n};var Yr,Tr=xr,Ar={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},Er={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"},Sr=/\d{1,2}/,Fr={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"},Cr={},jr={},Hr=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,Or=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,Pr={},Nr={},Br=/\d/,Ir=/\d\d/,Rr=/\d{3}/,Wr=/\d{4}/,zr=/[+-]?\d{6}/,qr=/\d\d?/,Ur=/\d\d\d\d?/,$r=/\d\d\d\d\d\d?/,Vr=/\d{1,3}/,Gr=/\d{1,4}/,Jr=/[+-]?\d{1,6}/,Zr=/\d+/,Kr=/[+-]?\d+/,Xr=/Z|[+-]\d\d:?\d\d/gi,Qr=/Z|[+-]\d\d(?::?\d\d)?/gi,ti=/[+-]?\d+(\.\d{1,3})?/,ei=/[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i,ni={},ri={},ii=0,ai=1,oi=2,ui=3,si=4,ci=5,li=6,di=7,hi=8;Yr=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1};var fi=Yr;V("M",["MM",2],"Mo",function(){return this.month()+1}),V("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),V("MMMM",0,0,function(t){return this.localeData().months(this,t)}),O("month","M"),B("month",8),X("M",qr),X("MM",qr,Ir),X("MMM",function(t,e){return e.monthsShortRegex(t)}),X("MMMM",function(t,e){return e.monthsRegex(t)}),nt(["M","MM"],function(t,e){e[ai]=b(t)-1}),nt(["MMM","MMMM"],function(t,e,n,r){var i=n._locale.monthsParse(t,r,n._strict);null!=i?e[ai]=i:_(n).invalidMonth=t});var _i=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,pi="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),mi="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),yi=ei,gi=ei;V("Y",0,0,function(){var t=this.year();return t<=9999?""+t:"+"+t}),V(0,["YY",2],0,function(){return this.year()%100}),V(0,["YYYY",4],0,"year"),V(0,["YYYYY",5],0,"year"),V(0,["YYYYYY",6,!0],0,"year"),O("year","y"),B("year",1),X("Y",Kr),X("YY",qr,Ir),X("YYYY",Gr,Wr),X("YYYYY",Jr,zr),X("YYYYYY",Jr,zr),nt(["YYYYY","YYYYYY"],ii),nt("YYYY",function(t,n){n[ii]=2===t.length?e.parseTwoDigitYear(t):b(t)}),nt("YY",function(t,n){n[ii]=e.parseTwoDigitYear(t)}),nt("Y",function(t,e){e[ii]=parseInt(t,10)}),e.parseTwoDigitYear=function(t){return b(t)+(b(t)>68?1900:2e3)};var vi=R("FullYear",!0);V("w",["ww",2],"wo","week"),V("W",["WW",2],"Wo","isoWeek"),O("week","w"),O("isoWeek","W"),B("week",5),B("isoWeek",5),X("w",qr),X("ww",qr,Ir),X("W",qr),X("WW",qr,Ir),rt(["w","ww","W","WW"],function(t,e,n,r){e[r.substr(0,1)]=b(t)});var Mi={dow:0,doy:6};V("d",0,"do","day"),V("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),V("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),V("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),V("e",0,0,"weekday"),V("E",0,0,"isoWeekday"),O("day","d"),O("weekday","e"),O("isoWeekday","E"),B("day",11),B("weekday",11),B("isoWeekday",11),X("d",qr),X("e",qr),X("E",qr),X("dd",function(t,e){return e.weekdaysMinRegex(t)}),X("ddd",function(t,e){return e.weekdaysShortRegex(t)}),X("dddd",function(t,e){return e.weekdaysRegex(t)}),rt(["dd","ddd","dddd"],function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:_(n).invalidWeekday=t}),rt(["d","e","E"],function(t,e,n,r){e[r]=b(t)});var bi="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Li="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),ki="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),wi=ei,Di=ei,xi=ei;V("H",["HH",2],0,"hour"),V("h",["hh",2],0,qt),V("k",["kk",2],0,Ut),V("hmm",0,0,function(){return""+qt.apply(this)+$(this.minutes(),2)}),V("hmmss",0,0,function(){return""+qt.apply(this)+$(this.minutes(),2)+$(this.seconds(),2)}),V("Hmm",0,0,function(){return""+this.hours()+$(this.minutes(),2)}),V("Hmmss",0,0,function(){return""+this.hours()+$(this.minutes(),2)+$(this.seconds(),2)}),$t("a",!0),$t("A",!1),O("hour","h"),B("hour",13),X("a",Vt),X("A",Vt),X("H",qr),X("h",qr),X("k",qr),X("HH",qr,Ir),X("hh",qr,Ir),X("kk",qr,Ir),X("hmm",Ur),X("hmmss",$r),X("Hmm",Ur),X("Hmmss",$r),nt(["H","HH"],ui),nt(["k","kk"],function(t,e,n){var r=b(t);e[ui]=24===r?0:r}),nt(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),nt(["h","hh"],function(t,e,n){e[ui]=b(t),_(n).bigHour=!0}),nt("hmm",function(t,e,n){var r=t.length-2;e[ui]=b(t.substr(0,r)),e[si]=b(t.substr(r)),_(n).bigHour=!0}),nt("hmmss",function(t,e,n){var r=t.length-4,i=t.length-2;e[ui]=b(t.substr(0,r)),e[si]=b(t.substr(r,2)),e[ci]=b(t.substr(i)),_(n).bigHour=!0}),nt("Hmm",function(t,e,n){var r=t.length-2;e[ui]=b(t.substr(0,r)),e[si]=b(t.substr(r))}),nt("Hmmss",function(t,e,n){var r=t.length-4,i=t.length-2;e[ui]=b(t.substr(0,r)),e[si]=b(t.substr(r,2)),e[ci]=b(t.substr(i))});var Yi,Ti=/[ap]\.?m?\.?/i,Ai=R("Hours",!0),Ei={calendar:Ar,longDateFormat:Er,invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:Sr,relativeTime:Fr,months:pi,monthsShort:mi,week:Mi,weekdays:bi,weekdaysMin:ki,weekdaysShort:Li,meridiemParse:Ti},Si={},Fi={},Ci=/^\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)?)?$/,ji=/^\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)?)?$/,Hi=/Z|[+-]\d\d(?::?\d\d)?/,Oi=[["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}/]],Pi=[["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/]],Ni=/^\/?Date\((\-?\d+)/i,Bi=/^((?:Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d?\d\s(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(?:\d\d)?\d\d\s)(\d\d:\d\d)(\:\d\d)?(\s(?:UT|GMT|[ECMP][SD]T|[A-IK-Za-ik-z]|[+-]\d{4}))$/;e.createFromInputFallback=w("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),e.ISO_8601=function(){},e.RFC_2822=function(){};var Ii=w("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=Me.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:m()}),Ri=w("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=Me.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:m()}),Wi=function(){return Date.now?Date.now():+new Date},zi=["year","quarter","month","week","day","hour","minute","second","millisecond"];Ee("Z",":"),Ee("ZZ",""),X("Z",Qr),X("ZZ",Qr),nt(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=Se(Qr,t)});var qi=/([\+\-]|\d\d)/gi;e.updateOffset=function(){};var Ui=/^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,$i=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/;Ue.fn=Ye.prototype,Ue.invalid=xe;var Vi=Je(1,"add"),Gi=Je(-1,"subtract");e.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",e.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var Ji=w("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});V(0,["gg",2],0,function(){return this.weekYear()%100}),V(0,["GG",2],0,function(){return this.isoWeekYear()%100}),Sn("gggg","weekYear"),Sn("ggggg","weekYear"),Sn("GGGG","isoWeekYear"),Sn("GGGGG","isoWeekYear"),O("weekYear","gg"),O("isoWeekYear","GG"),B("weekYear",1),B("isoWeekYear",1),X("G",Kr),X("g",Kr),X("GG",qr,Ir),X("gg",qr,Ir),X("GGGG",Gr,Wr),X("gggg",Gr,Wr),X("GGGGG",Jr,zr),X("ggggg",Jr,zr),rt(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,r){e[r.substr(0,2)]=b(t)}),rt(["gg","GG"],function(t,n,r,i){n[i]=e.parseTwoDigitYear(t)}),V("Q",0,"Qo","quarter"),O("quarter","Q"),B("quarter",7),X("Q",Br),nt("Q",function(t,e){e[ai]=3*(b(t)-1)}),V("D",["DD",2],"Do","date"),O("date","D"),B("date",9),X("D",qr),X("DD",qr,Ir),X("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),nt(["D","DD"],oi),nt("Do",function(t,e){e[oi]=b(t.match(qr)[0],10)});var Zi=R("Date",!0);V("DDD",["DDDD",3],"DDDo","dayOfYear"),O("dayOfYear","DDD"),B("dayOfYear",4),X("DDD",Vr),X("DDDD",Rr),nt(["DDD","DDDD"],function(t,e,n){n._dayOfYear=b(t)}),V("m",["mm",2],0,"minute"),O("minute","m"),B("minute",14),X("m",qr),X("mm",qr,Ir),nt(["m","mm"],si);var Ki=R("Minutes",!1);V("s",["ss",2],0,"second"),O("second","s"),B("second",15),X("s",qr),X("ss",qr,Ir),nt(["s","ss"],ci);var Xi=R("Seconds",!1);V("S",0,0,function(){return~~(this.millisecond()/100)}),V(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),V(0,["SSS",3],0,"millisecond"),V(0,["SSSS",4],0,function(){return 10*this.millisecond()}),V(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),V(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),V(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),V(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),V(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),O("millisecond","ms"),B("millisecond",16),X("S",Vr,Br),X("SS",Vr,Ir),X("SSS",Vr,Rr);var Qi;for(Qi="SSSS";Qi.length<=9;Qi+="S")X(Qi,Zr);for(Qi="S";Qi.length<=9;Qi+="S")nt(Qi,In);var ta=R("Milliseconds",!1);V("z",0,0,"zoneAbbr"),V("zz",0,0,"zoneName");var ea=g.prototype;ea.add=Vi,ea.calendar=Xe,ea.clone=Qe,ea.diff=un,ea.endOf=Mn,ea.format=hn,ea.from=fn,ea.fromNow=_n,ea.to=pn,ea.toNow=mn,ea.get=q,ea.invalidAt=An,ea.isAfter=tn,ea.isBefore=en,ea.isBetween=nn,ea.isSame=rn,ea.isSameOrAfter=an,ea.isSameOrBefore=on,ea.isValid=Yn,ea.lang=Ji,ea.locale=yn,ea.localeData=gn,ea.max=Ri,ea.min=Ii,ea.parsingFlags=Tn,ea.set=U,ea.startOf=vn,ea.subtract=Gi,ea.toArray=wn,ea.toObject=Dn,ea.toDate=kn,ea.toISOString=ln,ea.inspect=dn,ea.toJSON=xn,ea.toString=cn,ea.unix=Ln,ea.valueOf=bn,ea.creationData=En,ea.year=vi,ea.isLeapYear=gt,ea.weekYear=Fn,ea.isoWeekYear=Cn,ea.quarter=ea.quarters=Nn,ea.month=dt,ea.daysInMonth=ht,ea.week=ea.weeks=Tt,ea.isoWeek=ea.isoWeeks=At,ea.weeksInYear=Hn,ea.isoWeeksInYear=jn,ea.date=Zi,ea.day=ea.days=Pt,ea.weekday=Nt,ea.isoWeekday=Bt,ea.dayOfYear=Bn,ea.hour=ea.hours=Ai,ea.minute=ea.minutes=Ki,ea.second=ea.seconds=Xi,ea.millisecond=ea.milliseconds=ta,ea.utcOffset=je,ea.utc=Oe,ea.local=Pe,ea.parseZone=Ne,ea.hasAlignedHourOffset=Be,ea.isDST=Ie,ea.isLocal=We,ea.isUtcOffset=ze,ea.isUtc=qe,ea.isUTC=qe,ea.zoneAbbr=Rn,ea.zoneName=Wn,ea.dates=w("dates accessor is deprecated. Use date instead.",Zi),ea.months=w("months accessor is deprecated. Use month instead",dt),ea.years=w("years accessor is deprecated. Use year instead",vi),ea.zone=w("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",He),ea.isDSTShifted=w("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Re);var na=A.prototype;na.calendar=E,na.longDateFormat=S,na.invalidDate=F,na.ordinal=C,na.preparse=Un,na.postformat=Un,na.relativeTime=j,na.pastFuture=H,na.set=Y,na.months=ot,na.monthsShort=ut,na.monthsParse=ct,na.monthsRegex=_t,na.monthsShortRegex=ft,na.week=Dt,na.firstDayOfYear=Yt,na.firstDayOfWeek=xt,na.weekdays=Ft,na.weekdaysMin=jt,na.weekdaysShort=Ct,na.weekdaysParse=Ot,na.weekdaysRegex=It,na.weekdaysShortRegex=Rt,na.weekdaysMinRegex=Wt,na.isPM=Gt,na.meridiem=Jt,Qt("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1===b(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}}),e.lang=w("moment.lang is deprecated. Use moment.locale instead.",Qt),e.langData=w("moment.langData is deprecated. Use moment.localeData instead.",ne);var ra=Math.abs,ia=lr("ms"),aa=lr("s"),oa=lr("m"),ua=lr("h"),sa=lr("d"),ca=lr("w"),la=lr("M"),da=lr("y"),ha=hr("milliseconds"),fa=hr("seconds"),_a=hr("minutes"),pa=hr("hours"),ma=hr("days"),ya=hr("months"),ga=hr("years"),va=Math.round,Ma={ss:44,s:45,m:45,h:22,d:26,M:11},ba=Math.abs,La=Ye.prototype;return La.isValid=De,La.abs=tr,La.add=nr,La.subtract=rr,La.as=sr,La.asMilliseconds=ia,La.asSeconds=aa,La.asMinutes=oa,La.asHours=ua,La.asDays=sa,La.asWeeks=ca,La.asMonths=la,La.asYears=da,La.valueOf=cr,La._bubble=ar,La.get=dr,La.milliseconds=ha,La.seconds=fa,La.minutes=_a,La.hours=pa,La.days=ma,La.weeks=fr,La.months=ya,La.years=ga,La.humanize=gr,La.toISOString=vr,La.toString=vr,La.toJSON=vr,La.locale=yn,La.localeData=gn,La.toIsoString=w("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",vr),La.lang=Ji,V("X",0,0,"unix"),V("x",0,0,"valueOf"),X("x",Kr),X("X",ti),nt("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),nt("x",function(t,e,n){n._d=new Date(b(t))}),e.version="2.18.1",function(t){Mr=t}(Me),e.fn=ea,e.min=Le,e.max=ke,e.now=Wi,e.utc=h,e.unix=zn,e.months=Jn,e.isDate=s,e.locale=Qt,e.invalid=m,e.duration=Ue,e.isMoment=v,e.weekdays=Kn,e.parseZone=qn,e.localeData=ne,e.isDuration=Te,e.monthsShort=Zn,e.weekdaysMin=Qn,e.defineLocale=te,e.updateLocale=ee,e.locales=re,e.weekdaysShort=Xn,e.normalizeUnits=P,e.relativeTimeRounding=mr,e.relativeTimeThreshold=yr,e.calendarFormat=Ke,e.prototype=ea,e})}).call(e,n(4)(t))},function(t,e,n){var r;try{r=n(203)}catch(t){}r||(r=window._),t.exports=r},function(t,e){function n(t){var e=t.getUTCHours(),n=t.getUTCMinutes(),r=t.getSeconds(),i=t.getMilliseconds();return e<10&&(e="0"+e),n<10&&(n="0"+n),r<10&&(r="0"+r),i<100&&(i="0"+i),i<10&&(i="00"+i),e+":"+n+":"+r+" ("+i+")"}function r(t){return"%c "+n(new Date)+" :%c"+t+": "}var i=function(){},a=function(){},o=function(){},u=function(){},s=function(){};e.setLogLevel=function(t){t<6&&(e.Log.fatal=console.log.bind(console,r("FATAL"),"color:grey;","color: red;")),t<5&&(e.Log.error=console.log.bind(console,r("ERROR"),"color:grey;","color: red;")),t<4&&(e.Log.warn=console.log.bind(console,r("WARN"),"color:grey;","color: orange;")),t<3&&(e.Log.info=console.log.bind(console,r("INFO"),"color:grey;","color: info;")),t<2&&(e.Log.debug=console.log.bind(console,r("DEBUG"),"color:grey;","color: green;"))},e.Log={debug:i,info:a,warn:o,error:u,fatal:s}},function(t,e,n){"use strict";function r(t,e,n,r){var i;do{i=y.uniqueId(r)}while(t.hasNode(i));return n.dummy=e,t.setNode(i,n),i}function i(t){var e=(new g).setGraph(t.graph());return y.each(t.nodes(),function(n){e.setNode(n,t.node(n))}),y.each(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}function a(t){var e=new g({multigraph:t.isMultigraph()}).setGraph(t.graph());return y.each(t.nodes(),function(n){t.children(n).length||e.setNode(n,t.node(n))}),y.each(t.edges(),function(n){e.setEdge(n,t.edge(n))}),e}function o(t){var e=y.map(t.nodes(),function(e){var n={};return y.each(t.outEdges(e),function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight}),n});return y.zipObject(t.nodes(),e)}function u(t){var e=y.map(t.nodes(),function(e){var n={};return y.each(t.inEdges(e),function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight}),n});return y.zipObject(t.nodes(),e)}function s(t,e){var n=t.x,r=t.y,i=e.x-n,a=e.y-r,o=t.width/2,u=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var s,c;return Math.abs(a)*o>Math.abs(i)*u?(a<0&&(u=-u),s=u*i/a,c=u):(i<0&&(o=-o),s=o,c=o*a/i),{x:n+s,y:r+c}}function c(t){var e=y.map(y.range(f(t)+1),function(){return[]});return y.each(t.nodes(),function(n){var r=t.node(n),i=r.rank;y.isUndefined(i)||(e[i][r.order]=n)}),e}function l(t){var e=y.min(y.map(t.nodes(),function(e){return t.node(e).rank}));y.each(t.nodes(),function(n){var r=t.node(n);y.has(r,"rank")&&(r.rank-=e)})}function d(t){var e=y.min(y.map(t.nodes(),function(e){return t.node(e).rank})),n=[];y.each(t.nodes(),function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)});var r=0,i=t.graph().nodeRankFactor;y.each(n,function(e,n){y.isUndefined(e)&&n%i!=0?--r:r&&y.each(e,function(e){t.node(e).rank+=r})})}function h(t,e,n,i){var a={width:0,height:0};return arguments.length>=4&&(a.rank=n,a.order=i),r(t,"border",a,e)}function f(t){return y.max(y.map(t.nodes(),function(e){var n=t.node(e).rank;if(!y.isUndefined(n))return n}))}function _(t,e){var n={lhs:[],rhs:[]};return y.each(t,function(t){e(t)?n.lhs.push(t):n.rhs.push(t)}),n}function p(t,e){var n=y.now();try{return e()}finally{console.log(t+" time: "+(y.now()-n)+"ms")}}function m(t,e){return e()}var y=n(1),g=n(8).Graph;t.exports={addDummyNode:r,simplify:i,asNonCompoundGraph:a,successorWeights:o,predecessorWeights:u,intersectRect:s,buildLayerMatrix:c,normalizeRanks:l,removeEmptyRanks:d,addBorderNode:h,maxRank:f,partition:_,time:p,notime:m}},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){var r;try{r=n(16)}catch(t){}r||(r=window._),t.exports=r},function(t,e,n){var r;try{r=n(190)}catch(t){}r||(r=window._),t.exports=r},function(t,e,n){function r(t,e){return!!t.children(e).length}function i(t){return a(t.v)+":"+a(t.w)+":"+a(t.name)}function a(t){return t?String(t).replace(l,"\\:"):""}function o(t,e){e&&t.attr("style",e)}function u(t,e,n){e&&t.attr("class",e).attr("class",n+" "+t.attr("class"))}function s(t,e){var n=e.graph();if(c.isPlainObject(n)){var r=n.transition;if(c.isFunction(r))return r(t)}return t}var c=n(14);t.exports={isSubgraph:r,edgeToId:i,applyStyle:o,applyClass:u,applyTransition:s};var l=/:/g},function(t,e,n){var r;try{r=n(188)}catch(t){}r||(r=window.graphlib),t.exports=r},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r="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},i=n(24);t.exports=i,function(){var t=!1;if(t="tspans",i.selection.prototype.textwrap)return!1;void 0===t&&(t=!1),i.selection.prototype.textwrap=i.selection.enter.prototype.textwrap=function(e,n){n=parseInt(n)||0;var a,o=this,u=function(t){var e=t[0][0];if("rect"!==e.tagName.toString())return!1;var n={};return n.x=i.select(e).attr("x")||0,n.y=i.select(e).attr("y")||0,n.width=i.select(e).attr("width")||0,n.height=i.select(e).attr("height")||0,n.attr=t.attr,n},s=function(t){if(t.attr||(t.attr=function(t){if(this[t])return this[t]}),"object"===(void 0===t?"undefined":r(t))&&void 0!==t.x&&void 0!==t.y&&void 0!==t.width&&void 0!==t.height)return t;if("function"==typeof Array.isArray&&Array.isArray(t)||"[object Array]"===Object.prototype.toString.call(t)){return u(t)}return!1}(e);if(n&&(s=function(t,e){var n=t;return 0!==e&&(n.x=parseInt(n.x)+e,n.y=parseInt(n.y)+e,n.width-=2*e,n.height-=2*e),n}(s,n)),0!==o.length&&i&&e&&s){e=s;var c,l=function(t){var n=i.select(t[0].parentNode),r=n.select("text"),o=r.style("line-height"),u=r.text();r.remove();var s=n.append("foreignObject");s.attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").attr("x",e.x).attr("y",e.y).attr("width",e.width).attr("height",e.height);var c=s.append("xhtml:div").attr("class","wrapped");c.style("height",e.height).style("width",e.width).html(u),o&&c.style("line-height",o),a=n.select("foreignObject")},d=function(t){var r,o=t[0],u=o.parentNode,s=i.select(o),c=o.getBBox().height,l=o.getBBox().width,d=c,h=s.style("line-height");if(r=h&&parseInt(h)?parseInt(h.replace("px","")):d,l>e.width){var f=s.text();if(s.text(""),f){var _,p;if(-1!==f.indexOf(" "))_=" ",p=f.split(" ");else{_="";var m=f.length,y=Math.ceil(l/e.width),g=Math.floor(m/y);g*y>=m||y++,p=[];for(var v,M,b=0;b<y;b++)M=b*g,v=f.substr(M,g),p.push(v)}var L=[],k=0,w={};for(b=0;b<p.length;b++){var D,x=p[b],Y=s.text(),T=o.getComputedTextLength();D=Y?Y+_+x:x,s.text(D);var A=o.getComputedTextLength();if(A>e.width&&Y&&""!==Y&&(k+=T,w={string:Y,width:T,offset:k},L.push(w),s.text(""),s.text(x),b===p.length-1&&(D=x,s.text(D),A=o.getComputedTextLength())),b===p.length-1){s.text("");var E=D;E&&""!==E&&(A-k>0&&(A-=k),w={string:E,width:A,offset:k},L.push(w))}}var S;for(s.text(""),b=0;b<L.length;b++)v=L[b].string,b*r<e.height-1.5*r&&(S=s.append("tspan").text(v),S.attr("dy",function(t){if(b>0)return r}),S.attr("x",function(){var t=e.x;return n&&(t+=n),t}))}}s.attr("y",function(){var t=e.y;return r&&(t+=r),n&&(t+=n),t}),s.attr("x",function(){var t=e.x;return n&&(t+=n),t}),a=i.select(u).selectAll("text")};t&&("foreignobjects"===t?c=l:"tspans"===t&&(c=d)),t||(c="undefined"!=typeof SVGForeignObjectElement?l:d);for(var h=0;h<o.length;h++){c(o[h])}return a}return o||!1}}()},function(t,e){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function i(t){if(l===setTimeout)return setTimeout(t,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function a(t){if(d===clearTimeout)return clearTimeout(t);if((d===r||!d)&&clearTimeout)return d=clearTimeout,clearTimeout(t);try{return d(t)}catch(e){try{return d.call(null,t)}catch(e){return d.call(this,t)}}}function o(){p&&f&&(p=!1,f.length?_=f.concat(_):m=-1,_.length&&u())}function u(){if(!p){var t=i(o);p=!0;for(var e=_.length;e;){for(f=_,_=[];++m<e;)f&&f[m].run();m=-1,e=_.length}f=null,p=!1,a(t)}}function s(t,e){this.fun=t,this.array=e}function c(){}var l,d,h=t.exports={};!function(){try{l="function"==typeof setTimeout?setTimeout:n}catch(t){l=n}try{d="function"==typeof clearTimeout?clearTimeout:r}catch(t){d=r}}();var f,_=[],p=!1,m=-1;h.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];_.push(new s(t,e)),1!==_.length||p||i(u)},s.prototype.run=function(){this.fun.apply(null,this.array)},h.title="browser",h.browser=!0,h.env={},h.argv=[],h.version="",h.versions={},h.on=c,h.addListener=c,h.once=c,h.off=c,h.removeListener=c,h.removeAllListeners=c,h.emit=c,h.prependListener=c,h.prependOnceListener=c,h.listeners=function(t){return[]},h.binding=function(t){throw new Error("process.binding is not supported")},h.cwd=function(){return"/"},h.chdir=function(t){throw new Error("process.chdir is not supported")},h.umask=function(){return 0}},function(t,e){t.exports=fs},function(t,e,n){(function(t){function n(t,e){for(var n=0,r=t.length-1;r>=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<t.length;r++)e(t[r],r,t)&&n.push(t[r]);return n}var i=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,a=function(t){return i.exec(t).slice(1)};e.resolve=function(){for(var e="",i=!1,a=arguments.length-1;a>=-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 e=n(r(e.split("/"),function(t){return!!t}),!i).join("/"),(i?"/":"")+e||"."},e.normalize=function(t){var i=e.isAbsolute(t),a="/"===o(t,-1);return t=n(r(t.split("/"),function(t){return!!t}),!i).join("/"),t||i||(t="."),t&&a&&(t+="/"),(i?"/":"")+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<t.length&&""===t[e];e++);for(var n=t.length-1;n>=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),u=o,s=0;s<o;s++)if(i[s]!==a[s]){u=s;break}for(var c=[],s=u;s<i.length;s++)c.push("..");return c=c.concat(a.slice(u)),c.join("/")},e.sep="/",e.delimiter=":",e.dirname=function(t){var e=a(t),n=e[0],r=e[1];return n||r?(r&&(r=r.substr(0,r.length-1)),n+r):"."},e.basename=function(t,e){var n=a(t)[2];return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){return a(t)[3]};var o="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(e,n(11))},function(t,e,n){const r=n(16);t.exports=r},function(t,e,n){const r=n(24);t.exports=r},function(t,e,n){(function(t,n){(function(){function r(t,e){return t.set(e[0],e[1]),t}function i(t,e){return t.add(e),t}function a(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function o(t,e,n,r){for(var i=-1,a=null==t?0:t.length;++i<a;){var o=t[i];e(r,o,n(o),t)}return r}function u(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function s(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function c(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function l(t,e){for(var n=-1,r=null==t?0:t.length,i=0,a=[];++n<r;){var o=t[n];e(o,n,t)&&(a[i++]=o)}return a}function d(t,e){return!!(null==t?0:t.length)&&L(t,e,0)>-1}function h(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function f(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function _(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function p(t,e,n,r){var i=-1,a=null==t?0:t.length;for(r&&a&&(n=t[++i]);++i<a;)n=e(n,t[i],i,t);return n}function m(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function y(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}function g(t){return t.split("")}function v(t){return t.match(Ne)||[]}function M(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function b(t,e,n,r){for(var i=t.length,a=n+(r?1:-1);r?a--:++a<i;)if(e(t[a],a,t))return a;return-1}function L(t,e,n){return e===e?J(t,e,n):b(t,w,n)}function k(t,e,n,r){for(var i=n-1,a=t.length;++i<a;)if(r(t[i],e))return i;return-1}function w(t){return t!==t}function D(t,e){var n=null==t?0:t.length;return n?E(t,e)/n:Ct}function x(t){return function(e){return null==e?nt:e[t]}}function Y(t){return function(e){return null==t?nt:t[e]}}function T(t,e,n,r,i){return i(t,function(t,i,a){n=r?(r=!1,t):e(n,t,i,a)}),n}function A(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}function E(t,e){for(var n,r=-1,i=t.length;++r<i;){var a=e(t[r]);a!==nt&&(n=n===nt?a:n+a)}return n}function S(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function F(t,e){return f(e,function(e){return[e,t[e]]})}function C(t){return function(e){return t(e)}}function j(t,e){return f(e,function(e){return t[e]})}function H(t,e){return t.has(e)}function O(t,e){for(var n=-1,r=t.length;++n<r&&L(e,t[n],0)>-1;);return n}function P(t,e){for(var n=t.length;n--&&L(e,t[n],0)>-1;);return n}function N(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}function B(t){return"\\"+xn[t]}function I(t,e){return null==t?nt:t[e]}function R(t){return yn.test(t)}function W(t){return gn.test(t)}function z(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}function q(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function U(t,e){return function(n){return t(e(n))}}function $(t,e){for(var n=-1,r=t.length,i=0,a=[];++n<r;){var o=t[n];o!==e&&o!==st||(t[n]=st,a[i++]=n)}return a}function V(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function G(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function J(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}function Z(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}function K(t){return R(t)?Q(t):zn(t)}function X(t){return R(t)?tt(t):g(t)}function Q(t){for(var e=pn.lastIndex=0;pn.test(t);)++e;return e}function tt(t){return t.match(pn)||[]}function et(t){return t.match(mn)||[]}var nt,rt=200,it="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",at="Expected a function",ot="__lodash_hash_undefined__",ut=500,st="__lodash_placeholder__",ct=1,lt=2,dt=4,ht=1,ft=2,_t=1,pt=2,mt=4,yt=8,gt=16,vt=32,Mt=64,bt=128,Lt=256,kt=512,wt=30,Dt="...",xt=800,Yt=16,Tt=1,At=2,Et=1/0,St=9007199254740991,Ft=1.7976931348623157e308,Ct=NaN,jt=4294967295,Ht=jt-1,Ot=jt>>>1,Pt=[["ary",bt],["bind",_t],["bindKey",pt],["curry",yt],["curryRight",gt],["flip",kt],["partial",vt],["partialRight",Mt],["rearg",Lt]],Nt="[object Arguments]",Bt="[object Array]",It="[object AsyncFunction]",Rt="[object Boolean]",Wt="[object Date]",zt="[object DOMException]",qt="[object Error]",Ut="[object Function]",$t="[object GeneratorFunction]",Vt="[object Map]",Gt="[object Number]",Jt="[object Null]",Zt="[object Object]",Kt="[object Proxy]",Xt="[object RegExp]",Qt="[object Set]",te="[object String]",ee="[object Symbol]",ne="[object Undefined]",re="[object WeakMap]",ie="[object WeakSet]",ae="[object ArrayBuffer]",oe="[object DataView]",ue="[object Float32Array]",se="[object Float64Array]",ce="[object Int8Array]",le="[object Int16Array]",de="[object Int32Array]",he="[object Uint8Array]",fe="[object Uint8ClampedArray]",_e="[object Uint16Array]",pe="[object Uint32Array]",me=/\b__p \+= '';/g,ye=/\b(__p \+=) '' \+/g,ge=/(__e\(.*?\)|\b__t\)) \+\n'';/g,ve=/&(?:amp|lt|gt|quot|#39);/g,Me=/[&<>"']/g,be=RegExp(ve.source),Le=RegExp(Me.source),ke=/<%-([\s\S]+?)%>/g,we=/<%([\s\S]+?)%>/g,De=/<%=([\s\S]+?)%>/g,xe=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Ye=/^\w*$/,Te=/^\./,Ae=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Ee=/[\\^$.*+?()[\]{}|]/g,Se=RegExp(Ee.source),Fe=/^\s+|\s+$/g,Ce=/^\s+/,je=/\s+$/,He=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Oe=/\{\n\/\* \[wrapped with (.+)\] \*/,Pe=/,? & /,Ne=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Be=/\\(\\)?/g,Ie=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,Re=/\w*$/,We=/^[-+]0x[0-9a-f]+$/i,ze=/^0b[01]+$/i,qe=/^\[object .+?Constructor\]$/,Ue=/^0o[0-7]+$/i,$e=/^(?:0|[1-9]\d*)$/,Ve=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ge=/($^)/,Je=/['\n\r\u2028\u2029\\]/g,Ze="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Ke="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Xe="["+Ke+"]",Qe="["+Ze+"]",tn="[a-z\\xdf-\\xf6\\xf8-\\xff]",en="[^\\ud800-\\udfff"+Ke+"\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",nn="\\ud83c[\\udffb-\\udfff]",rn="(?:\\ud83c[\\udde6-\\uddff]){2}",an="[\\ud800-\\udbff][\\udc00-\\udfff]",on="[A-Z\\xc0-\\xd6\\xd8-\\xde]",un="(?:"+tn+"|"+en+")",sn="(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?",cn="(?:\\u200d(?:"+["[^\\ud800-\\udfff]",rn,an].join("|")+")[\\ufe0e\\ufe0f]?"+sn+")*",ln="[\\ufe0e\\ufe0f]?"+sn+cn,dn="(?:"+["[\\u2700-\\u27bf]",rn,an].join("|")+")"+ln,hn="(?:"+["[^\\ud800-\\udfff]"+Qe+"?",Qe,rn,an,"[\\ud800-\\udfff]"].join("|")+")",fn=RegExp("['’]","g"),_n=RegExp(Qe,"g"),pn=RegExp(nn+"(?="+nn+")|"+hn+ln,"g"),mn=RegExp([on+"?"+tn+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[Xe,on,"$"].join("|")+")","(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[Xe,on+un,"$"].join("|")+")",on+"?"+un+"+(?:['’](?:d|ll|m|re|s|t|ve))?",on+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)","\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)","\\d+",dn].join("|"),"g"),yn=RegExp("[\\u200d\\ud800-\\udfff"+Ze+"\\ufe0e\\ufe0f]"),gn=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,vn=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Mn=-1,bn={};bn[ue]=bn[se]=bn[ce]=bn[le]=bn[de]=bn[he]=bn[fe]=bn[_e]=bn[pe]=!0,bn[Nt]=bn[Bt]=bn[ae]=bn[Rt]=bn[oe]=bn[Wt]=bn[qt]=bn[Ut]=bn[Vt]=bn[Gt]=bn[Zt]=bn[Xt]=bn[Qt]=bn[te]=bn[re]=!1;var Ln={};Ln[Nt]=Ln[Bt]=Ln[ae]=Ln[oe]=Ln[Rt]=Ln[Wt]=Ln[ue]=Ln[se]=Ln[ce]=Ln[le]=Ln[de]=Ln[Vt]=Ln[Gt]=Ln[Zt]=Ln[Xt]=Ln[Qt]=Ln[te]=Ln[ee]=Ln[he]=Ln[fe]=Ln[_e]=Ln[pe]=!0,Ln[qt]=Ln[Ut]=Ln[re]=!1;var kn={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"},wn={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},Dn={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"},xn={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Yn=parseFloat,Tn=parseInt,An="object"==typeof t&&t&&t.Object===Object&&t,En="object"==typeof self&&self&&self.Object===Object&&self,Sn=An||En||Function("return this")(),Fn="object"==typeof e&&e&&!e.nodeType&&e,Cn=Fn&&"object"==typeof n&&n&&!n.nodeType&&n,jn=Cn&&Cn.exports===Fn,Hn=jn&&An.process,On=function(){try{return Hn&&Hn.binding&&Hn.binding("util")}catch(t){}}(),Pn=On&&On.isArrayBuffer,Nn=On&&On.isDate,Bn=On&&On.isMap,In=On&&On.isRegExp,Rn=On&&On.isSet,Wn=On&&On.isTypedArray,zn=x("length"),qn=Y(kn),Un=Y(wn),$n=Y(Dn),Vn=function t(e){function n(t){if(as(t)&&!mh(t)&&!(t instanceof J)){if(t instanceof Y)return t;if(ml.call(t,"__wrapped__"))return eo(t)}return new Y(t)}function g(){}function Y(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=nt}function J(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=jt,this.__views__=[]}function Q(){var t=new J(this.__wrapped__);return t.__actions__=Pi(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Pi(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Pi(this.__views__),t}function tt(){if(this.__filtered__){var t=new J(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function Ne(){var t=this.__wrapped__.value(),e=this.__dir__,n=mh(t),r=e<0,i=n?t.length:0,a=xa(0,i,this.__views__),o=a.start,u=a.end,s=u-o,c=r?u:o-1,l=this.__iteratees__,d=l.length,h=0,f=$l(s,this.__takeCount__);if(!n||!r&&i==s&&f==s)return gi(t,this.__actions__);var _=[];t:for(;s--&&h<f;){c+=e;for(var p=-1,m=t[c];++p<d;){var y=l[p],g=y.iteratee,v=y.type,M=g(m);if(v==At)m=M;else if(!M){if(v==Tt)continue t;break t}}_[h++]=m}return _}function Ze(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Ke(){this.__data__=nd?nd(null):{},this.size=0}function Xe(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function Qe(t){var e=this.__data__;if(nd){var n=e[t];return n===ot?nt:n}return ml.call(e,t)?e[t]:nt}function tn(t){var e=this.__data__;return nd?e[t]!==nt:ml.call(e,t)}function en(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=nd&&e===nt?ot:e,this}function nn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function rn(){this.__data__=[],this.size=0}function an(t){var e=this.__data__,n=Zn(e,t);return!(n<0)&&(n==e.length-1?e.pop():El.call(e,n,1),--this.size,!0)}function on(t){var e=this.__data__,n=Zn(e,t);return n<0?nt:e[n][1]}function un(t){return Zn(this.__data__,t)>-1}function sn(t,e){var n=this.__data__,r=Zn(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function cn(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function ln(){this.size=0,this.__data__={hash:new Ze,map:new(Xl||nn),string:new Ze}}function dn(t){var e=La(this,t).delete(t);return this.size-=e?1:0,e}function hn(t){return La(this,t).get(t)}function pn(t){return La(this,t).has(t)}function mn(t,e){var n=La(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}function yn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new cn;++e<n;)this.add(t[e])}function gn(t){return this.__data__.set(t,ot),this}function kn(t){return this.__data__.has(t)}function wn(t){var e=this.__data__=new nn(t);this.size=e.size}function Dn(){this.__data__=new nn,this.size=0}function xn(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}function An(t){return this.__data__.get(t)}function En(t){return this.__data__.has(t)}function Fn(t,e){var n=this.__data__;if(n instanceof nn){var r=n.__data__;if(!Xl||r.length<rt-1)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new cn(r)}return n.set(t,e),this.size=n.size,this}function Cn(t,e){var n=mh(t),r=!n&&ph(t),i=!n&&!r&&gh(t),a=!n&&!r&&!i&&kh(t),o=n||r||i||a,u=o?S(t.length,cl):[],s=u.length;for(var c in t)!e&&!ml.call(t,c)||o&&("length"==c||i&&("offset"==c||"parent"==c)||a&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||ja(c,s))||u.push(c);return u}function Hn(t){var e=t.length;return e?t[Qr(0,e-1)]:nt}function On(t,e){return Ka(Pi(t),nr(e,0,t.length))}function zn(t){return Ka(Pi(t))}function Gn(t,e,n){(n===nt||Uu(t[e],n))&&(n!==nt||e in t)||tr(t,e,n)}function Jn(t,e,n){var r=t[e];ml.call(t,e)&&Uu(r,n)&&(n!==nt||e in t)||tr(t,e,n)}function Zn(t,e){for(var n=t.length;n--;)if(Uu(t[n][0],e))return n;return-1}function Kn(t,e,n,r){return _d(t,function(t,i,a){e(r,t,n(t),a)}),r}function Xn(t,e){return t&&Ni(e,Is(e),t)}function Qn(t,e){return t&&Ni(e,Rs(e),t)}function tr(t,e,n){"__proto__"==e&&jl?jl(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function er(t,e){for(var n=-1,r=e.length,i=nl(r),a=null==t;++n<r;)i[n]=a?nt:Ps(t,e[n]);return i}function nr(t,e,n){return t===t&&(n!==nt&&(t=t<=n?t:n),e!==nt&&(t=t>=e?t:e)),t}function rr(t,e,n,r,i,a){var o,s=e&ct,c=e&lt,l=e&dt;if(n&&(o=i?n(t,r,i,a):n(t)),o!==nt)return o;if(!is(t))return t;var d=mh(t);if(d){if(o=Aa(t),!s)return Pi(t,o)}else{var h=xd(t),f=h==Ut||h==$t;if(gh(t))return Di(t,s);if(h==Zt||h==Nt||f&&!i){if(o=c||f?{}:Ea(t),!s)return c?Ii(t,Qn(o,t)):Bi(t,Xn(o,t))}else{if(!Ln[h])return i?t:{};o=Sa(t,h,rr,s)}}a||(a=new wn);var _=a.get(t);if(_)return _;a.set(t,o);var p=l?c?ga:ya:c?Rs:Is,m=d?nt:p(t);return u(m||t,function(r,i){m&&(i=r,r=t[i]),Jn(o,i,rr(r,e,n,i,t,a))}),o}function ir(t){var e=Is(t);return function(n){return ar(n,t,e)}}function ar(t,e,n){var r=n.length;if(null==t)return!r;for(t=ul(t);r--;){var i=n[r],a=e[i],o=t[i];if(o===nt&&!(i in t)||!a(o))return!1}return!0}function or(t,e,n){if("function"!=typeof t)throw new ll(at);return Ad(function(){t.apply(nt,n)},e)}function ur(t,e,n,r){var i=-1,a=d,o=!0,u=t.length,s=[],c=e.length;if(!u)return s;n&&(e=f(e,C(n))),r?(a=h,o=!1):e.length>=rt&&(a=H,o=!1,e=new yn(e));t:for(;++i<u;){var l=t[i],_=null==n?l:n(l);if(l=r||0!==l?l:0,o&&_===_){for(var p=c;p--;)if(e[p]===_)continue t;s.push(l)}else a(e,_,r)||s.push(l)}return s}function sr(t,e){var n=!0;return _d(t,function(t,r,i){return n=!!e(t,r,i)}),n}function cr(t,e,n){for(var r=-1,i=t.length;++r<i;){var a=t[r],o=e(a);if(null!=o&&(u===nt?o===o&&!ms(o):n(o,u)))var u=o,s=a}return s}function lr(t,e,n,r){var i=t.length;for(n=Ls(n),n<0&&(n=-n>i?0:i+n),r=r===nt||r>i?i:Ls(r),r<0&&(r+=i),r=n>r?0:ks(r);n<r;)t[n++]=e;return t}function dr(t,e){var n=[];return _d(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function hr(t,e,n,r,i){var a=-1,o=t.length;for(n||(n=Ca),i||(i=[]);++a<o;){var u=t[a];e>0&&n(u)?e>1?hr(u,e-1,n,r,i):_(i,u):r||(i[i.length]=u)}return i}function fr(t,e){return t&&md(t,e,Is)}function _r(t,e){return t&&yd(t,e,Is)}function pr(t,e){return l(e,function(e){return es(t[e])})}function mr(t,e){e=ki(e,t);for(var n=0,r=e.length;null!=t&&n<r;)t=t[Xa(e[n++])];return n&&n==r?t:nt}function yr(t,e,n){var r=e(t);return mh(t)?r:_(r,n(t))}function gr(t){return null==t?t===nt?ne:Jt:Cl&&Cl in ul(t)?Da(t):Ua(t)}function vr(t,e){return t>e}function Mr(t,e){return null!=t&&ml.call(t,e)}function br(t,e){return null!=t&&e in ul(t)}function Lr(t,e,n){return t>=$l(e,n)&&t<Ul(e,n)}function kr(t,e,n){for(var r=n?h:d,i=t[0].length,a=t.length,o=a,u=nl(a),s=1/0,c=[];o--;){var l=t[o];o&&e&&(l=f(l,C(e))),s=$l(l.length,s),u[o]=!n&&(e||i>=120&&l.length>=120)?new yn(o&&l):nt}l=t[0];var _=-1,p=u[0];t:for(;++_<i&&c.length<s;){var m=l[_],y=e?e(m):m;if(m=n||0!==m?m:0,!(p?H(p,y):r(c,y,n))){for(o=a;--o;){var g=u[o];if(!(g?H(g,y):r(t[o],y,n)))continue t}p&&p.push(y),c.push(m)}}return c}function wr(t,e,n,r){return fr(t,function(t,i,a){e(r,n(t),i,a)}),r}function Dr(t,e,n){e=ki(e,t),t=Va(t,e);var r=null==t?t:t[Xa(bo(e))];return null==r?nt:a(r,t,n)}function xr(t){return as(t)&&gr(t)==Nt}function Yr(t){return as(t)&&gr(t)==ae}function Tr(t){return as(t)&&gr(t)==Wt}function Ar(t,e,n,r,i){return t===e||(null==t||null==e||!as(t)&&!as(e)?t!==t&&e!==e:Er(t,e,n,r,Ar,i))}function Er(t,e,n,r,i,a){var o=mh(t),u=mh(e),s=o?Bt:xd(t),c=u?Bt:xd(e);s=s==Nt?Zt:s,c=c==Nt?Zt:c;var l=s==Zt,d=c==Zt,h=s==c;if(h&&gh(t)){if(!gh(e))return!1;o=!0,l=!1}if(h&&!l)return a||(a=new wn),o||kh(t)?fa(t,e,n,r,i,a):_a(t,e,s,n,r,i,a);if(!(n&ht)){var f=l&&ml.call(t,"__wrapped__"),_=d&&ml.call(e,"__wrapped__");if(f||_){var p=f?t.value():t,m=_?e.value():e;return a||(a=new wn),i(p,m,n,r,a)}}return!!h&&(a||(a=new wn),pa(t,e,n,r,i,a))}function Sr(t){return as(t)&&xd(t)==Vt}function Fr(t,e,n,r){var i=n.length,a=i,o=!r;if(null==t)return!a;for(t=ul(t);i--;){var u=n[i];if(o&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++i<a;){u=n[i];var s=u[0],c=t[s],l=u[1];if(o&&u[2]){if(c===nt&&!(s in t))return!1}else{var d=new wn;if(r)var h=r(c,l,s,t,e,d);if(!(h===nt?Ar(l,c,ht|ft,r,d):h))return!1}}return!0}function Cr(t){return!(!is(t)||Ba(t))&&(es(t)?Ll:qe).test(Qa(t))}function jr(t){return as(t)&&gr(t)==Xt}function Hr(t){return as(t)&&xd(t)==Qt}function Or(t){return as(t)&&rs(t.length)&&!!bn[gr(t)]}function Pr(t){return"function"==typeof t?t:null==t?Ec:"object"==typeof t?mh(t)?zr(t[0],t[1]):Wr(t):Nc(t)}function Nr(t){if(!Ia(t))return ql(t);var e=[];for(var n in ul(t))ml.call(t,n)&&"constructor"!=n&&e.push(n);return e}function Br(t){if(!is(t))return qa(t);var e=Ia(t),n=[];for(var r in t)("constructor"!=r||!e&&ml.call(t,r))&&n.push(r);return n}function Ir(t,e){return t<e}function Rr(t,e){var n=-1,r=$u(t)?nl(t.length):[];return _d(t,function(t,i,a){r[++n]=e(t,i,a)}),r}function Wr(t){var e=ka(t);return 1==e.length&&e[0][2]?Wa(e[0][0],e[0][1]):function(n){return n===t||Fr(n,t,e)}}function zr(t,e){return Oa(t)&&Ra(e)?Wa(Xa(t),e):function(n){var r=Ps(n,t);return r===nt&&r===e?Bs(n,t):Ar(e,r,ht|ft)}}function qr(t,e,n,r,i){t!==e&&md(e,function(a,o){if(is(a))i||(i=new wn),Ur(t,e,o,n,qr,r,i);else{var u=r?r(t[o],a,o+"",t,e,i):nt;u===nt&&(u=a),Gn(t,o,u)}},Rs)}function Ur(t,e,n,r,i,a,o){var u=t[n],s=e[n],c=o.get(s);if(c)return void Gn(t,n,c);var l=a?a(u,s,n+"",t,e,o):nt,d=l===nt;if(d){var h=mh(s),f=!h&&gh(s),_=!h&&!f&&kh(s);l=s,h||f||_?mh(u)?l=u:Vu(u)?l=Pi(u):f?(d=!1,l=Di(s,!0)):_?(d=!1,l=Fi(s,!0)):l=[]:fs(s)||ph(s)?(l=u,ph(u)?l=Ds(u):(!is(u)||r&&es(u))&&(l=Ea(s))):d=!1}d&&(o.set(s,l),i(l,s,r,a,o),o.delete(s)),Gn(t,n,l)}function $r(t,e){var n=t.length;if(n)return e+=e<0?n:0,ja(e,n)?t[e]:nt}function Vr(t,e,n){var r=-1;return e=f(e.length?e:[Ec],C(ba())),A(Rr(t,function(t,n,i){return{criteria:f(e,function(e){return e(t)}),index:++r,value:t}}),function(t,e){return ji(t,e,n)})}function Gr(t,e){return Jr(t,e,function(e,n){return Bs(t,n)})}function Jr(t,e,n){for(var r=-1,i=e.length,a={};++r<i;){var o=e[r],u=mr(t,o);n(u,o)&&ai(a,ki(o,t),u)}return a}function Zr(t){return function(e){return mr(e,t)}}function Kr(t,e,n,r){var i=r?k:L,a=-1,o=e.length,u=t;for(t===e&&(e=Pi(e)),n&&(u=f(t,C(n)));++a<o;)for(var s=0,c=e[a],l=n?n(c):c;(s=i(u,l,s,r))>-1;)u!==t&&El.call(u,s,1),El.call(t,s,1);return t}function Xr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==a){var a=i;ja(i)?El.call(t,i,1):pi(t,i)}}return t}function Qr(t,e){return t+Bl(Jl()*(e-t+1))}function ti(t,e,n,r){for(var i=-1,a=Ul(Nl((e-t)/(n||1)),0),o=nl(a);a--;)o[r?a:++i]=t,t+=n;return o}function ei(t,e){var n="";if(!t||e<1||e>St)return n;do{e%2&&(n+=t),(e=Bl(e/2))&&(t+=t)}while(e);return n}function ni(t,e){return Ed($a(t,e,Ec),t+"")}function ri(t){return Hn(Qs(t))}function ii(t,e){var n=Qs(t);return Ka(n,nr(e,0,n.length))}function ai(t,e,n,r){if(!is(t))return t;e=ki(e,t);for(var i=-1,a=e.length,o=a-1,u=t;null!=u&&++i<a;){var s=Xa(e[i]),c=n;if(i!=o){var l=u[s];c=r?r(l,s,u):nt,c===nt&&(c=is(l)?l:ja(e[i+1])?[]:{})}Jn(u,s,c),u=u[s]}return t}function oi(t){return Ka(Qs(t))}function ui(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),n=n>i?i:n,n<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var a=nl(i);++r<i;)a[r]=t[r+e];return a}function si(t,e){var n;return _d(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ci(t,e,n){var r=0,i=null==t?r:t.length;if("number"==typeof e&&e===e&&i<=Ot){for(;r<i;){var a=r+i>>>1,o=t[a];null!==o&&!ms(o)&&(n?o<=e:o<e)?r=a+1:i=a}return i}return li(t,e,Ec,n)}function li(t,e,n,r){e=n(e);for(var i=0,a=null==t?0:t.length,o=e!==e,u=null===e,s=ms(e),c=e===nt;i<a;){var l=Bl((i+a)/2),d=n(t[l]),h=d!==nt,f=null===d,_=d===d,p=ms(d);if(o)var m=r||_;else m=c?_&&(r||h):u?_&&h&&(r||!f):s?_&&h&&!f&&(r||!p):!f&&!p&&(r?d<=e:d<e);m?i=l+1:a=l}return $l(a,Ht)}function di(t,e){for(var n=-1,r=t.length,i=0,a=[];++n<r;){var o=t[n],u=e?e(o):o;if(!n||!Uu(u,s)){var s=u;a[i++]=0===o?0:o}}return a}function hi(t){return"number"==typeof t?t:ms(t)?Ct:+t}function fi(t){if("string"==typeof t)return t;if(mh(t))return f(t,fi)+"";if(ms(t))return hd?hd.call(t):"";var e=t+"";return"0"==e&&1/t==-Et?"-0":e}function _i(t,e,n){var r=-1,i=d,a=t.length,o=!0,u=[],s=u;if(n)o=!1,i=h;else if(a>=rt){var c=e?null:Ld(t);if(c)return V(c);o=!1,i=H,s=new yn}else s=e?[]:u;t:for(;++r<a;){var l=t[r],f=e?e(l):l;if(l=n||0!==l?l:0,o&&f===f){for(var _=s.length;_--;)if(s[_]===f)continue t;e&&s.push(f),u.push(l)}else i(s,f,n)||(s!==u&&s.push(f),u.push(l))}return u}function pi(t,e){return e=ki(e,t),null==(t=Va(t,e))||delete t[Xa(bo(e))]}function mi(t,e,n,r){return ai(t,e,n(mr(t,e)),r)}function yi(t,e,n,r){for(var i=t.length,a=r?i:-1;(r?a--:++a<i)&&e(t[a],a,t););return n?ui(t,r?0:a,r?a+1:i):ui(t,r?a+1:0,r?i:a)}function gi(t,e){var n=t;return n instanceof J&&(n=n.value()),p(e,function(t,e){return e.func.apply(e.thisArg,_([t],e.args))},n)}function vi(t,e,n){var r=t.length;if(r<2)return r?_i(t[0]):[];for(var i=-1,a=nl(r);++i<r;)for(var o=t[i],u=-1;++u<r;)u!=i&&(a[i]=ur(a[i]||o,t[u],e,n));return _i(hr(a,1),e,n)}function Mi(t,e,n){for(var r=-1,i=t.length,a=e.length,o={};++r<i;){var u=r<a?e[r]:nt;n(o,t[r],u)}return o}function bi(t){return Vu(t)?t:[]}function Li(t){return"function"==typeof t?t:Ec}function ki(t,e){return mh(t)?t:Oa(t,e)?[t]:Sd(Ys(t))}function wi(t,e,n){var r=t.length;return n=n===nt?r:n,!e&&n>=r?t:ui(t,e,n)}function Di(t,e){if(e)return t.slice();var n=t.length,r=xl?xl(n):new t.constructor(n);return t.copy(r),r}function xi(t){var e=new t.constructor(t.byteLength);return new Dl(e).set(new Dl(t)),e}function Yi(t,e){var n=e?xi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Ti(t,e,n){return p(e?n(q(t),ct):q(t),r,new t.constructor)}function Ai(t){var e=new t.constructor(t.source,Re.exec(t));return e.lastIndex=t.lastIndex,e}function Ei(t,e,n){return p(e?n(V(t),ct):V(t),i,new t.constructor)}function Si(t){return dd?ul(dd.call(t)):{}}function Fi(t,e){var n=e?xi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Ci(t,e){if(t!==e){var n=t!==nt,r=null===t,i=t===t,a=ms(t),o=e!==nt,u=null===e,s=e===e,c=ms(e);if(!u&&!c&&!a&&t>e||a&&o&&s&&!u&&!c||r&&o&&s||!n&&s||!i)return 1;if(!r&&!a&&!c&&t<e||c&&n&&i&&!r&&!a||u&&n&&i||!o&&i||!s)return-1}return 0}function ji(t,e,n){for(var r=-1,i=t.criteria,a=e.criteria,o=i.length,u=n.length;++r<o;){var s=Ci(i[r],a[r]);if(s){if(r>=u)return s;return s*("desc"==n[r]?-1:1)}}return t.index-e.index}function Hi(t,e,n,r){for(var i=-1,a=t.length,o=n.length,u=-1,s=e.length,c=Ul(a-o,0),l=nl(s+c),d=!r;++u<s;)l[u]=e[u];for(;++i<o;)(d||i<a)&&(l[n[i]]=t[i]);for(;c--;)l[u++]=t[i++];return l}function Oi(t,e,n,r){for(var i=-1,a=t.length,o=-1,u=n.length,s=-1,c=e.length,l=Ul(a-u,0),d=nl(l+c),h=!r;++i<l;)d[i]=t[i];for(var f=i;++s<c;)d[f+s]=e[s];for(;++o<u;)(h||i<a)&&(d[f+n[o]]=t[i++]);return d}function Pi(t,e){var n=-1,r=t.length;for(e||(e=nl(r));++n<r;)e[n]=t[n];return e}function Ni(t,e,n,r){var i=!n;n||(n={});for(var a=-1,o=e.length;++a<o;){var u=e[a],s=r?r(n[u],t[u],u,n,t):nt;s===nt&&(s=t[u]),i?tr(n,u,s):Jn(n,u,s)}return n}function Bi(t,e){return Ni(t,wd(t),e)}function Ii(t,e){return Ni(t,Dd(t),e)}function Ri(t,e){return function(n,r){var i=mh(n)?o:Kn,a=e?e():{};return i(n,t,ba(r,2),a)}}function Wi(t){return ni(function(e,n){var r=-1,i=n.length,a=i>1?n[i-1]:nt,o=i>2?n[2]:nt;for(a=t.length>3&&"function"==typeof a?(i--,a):nt,o&&Ha(n[0],n[1],o)&&(a=i<3?nt:a,i=1),e=ul(e);++r<i;){var u=n[r];u&&t(e,u,r,a)}return e})}function zi(t,e){return function(n,r){if(null==n)return n;if(!$u(n))return t(n,r);for(var i=n.length,a=e?i:-1,o=ul(n);(e?a--:++a<i)&&!1!==r(o[a],a,o););return n}}function qi(t){return function(e,n,r){for(var i=-1,a=ul(e),o=r(e),u=o.length;u--;){var s=o[t?u:++i];if(!1===n(a[s],s,a))break}return e}}function Ui(t,e,n){function r(){return(this&&this!==Sn&&this instanceof r?a:t).apply(i?n:this,arguments)}var i=e&_t,a=Gi(t);return r}function $i(t){return function(e){e=Ys(e);var n=R(e)?X(e):nt,r=n?n[0]:e.charAt(0),i=n?wi(n,1).join(""):e.slice(1);return r[t]()+i}}function Vi(t){return function(e){return p(Dc(ac(e).replace(fn,"")),t,"")}}function Gi(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=fd(t.prototype),r=t.apply(n,e);return is(r)?r:n}}function Ji(t,e,n){function r(){for(var o=arguments.length,u=nl(o),s=o,c=Ma(r);s--;)u[s]=arguments[s];var l=o<3&&u[0]!==c&&u[o-1]!==c?[]:$(u,c);return(o-=l.length)<n?oa(t,e,Xi,r.placeholder,nt,u,l,nt,nt,n-o):a(this&&this!==Sn&&this instanceof r?i:t,this,u)}var i=Gi(t);return r}function Zi(t){return function(e,n,r){var i=ul(e);if(!$u(e)){var a=ba(n,3);e=Is(e),n=function(t){return a(i[t],t,i)}}var o=t(e,n,r);return o>-1?i[a?e[o]:o]:nt}}function Ki(t){return ma(function(e){var n=e.length,r=n,i=Y.prototype.thru;for(t&&e.reverse();r--;){var a=e[r];if("function"!=typeof a)throw new ll(at);if(i&&!o&&"wrapper"==va(a))var o=new Y([],!0)}for(r=o?r:n;++r<n;){a=e[r];var u=va(a),s="wrapper"==u?kd(a):nt;o=s&&Na(s[0])&&s[1]==(bt|yt|vt|Lt)&&!s[4].length&&1==s[9]?o[va(s[0])].apply(o,s[3]):1==a.length&&Na(a)?o[u]():o.thru(a)}return function(){var t=arguments,r=t[0];if(o&&1==t.length&&mh(r))return o.plant(r).value();for(var i=0,a=n?e[i].apply(this,t):r;++i<n;)a=e[i].call(this,a);return a}})}function Xi(t,e,n,r,i,a,o,u,s,c){function l(){for(var y=arguments.length,g=nl(y),v=y;v--;)g[v]=arguments[v];if(_)var M=Ma(l),b=N(g,M);if(r&&(g=Hi(g,r,i,_)),a&&(g=Oi(g,a,o,_)),y-=b,_&&y<c){var L=$(g,M);return oa(t,e,Xi,l.placeholder,n,g,L,u,s,c-y)}var k=h?n:this,w=f?k[t]:t;return y=g.length,u?g=Ga(g,u):p&&y>1&&g.reverse(),d&&s<y&&(g.length=s),this&&this!==Sn&&this instanceof l&&(w=m||Gi(w)),w.apply(k,g)}var d=e&bt,h=e&_t,f=e&pt,_=e&(yt|gt),p=e&kt,m=f?nt:Gi(t);return l}function Qi(t,e){return function(n,r){return wr(n,t,e(r),{})}}function ta(t,e){return function(n,r){var i;if(n===nt&&r===nt)return e;if(n!==nt&&(i=n),r!==nt){if(i===nt)return r;"string"==typeof n||"string"==typeof r?(n=fi(n),r=fi(r)):(n=hi(n),r=hi(r)),i=t(n,r)}return i}}function ea(t){return ma(function(e){return e=f(e,C(ba())),ni(function(n){var r=this;return t(e,function(t){return a(t,r,n)})})})}function na(t,e){e=e===nt?" ":fi(e);var n=e.length;if(n<2)return n?ei(e,t):e;var r=ei(e,Nl(t/K(e)));return R(e)?wi(X(r),0,t).join(""):r.slice(0,t)}function ra(t,e,n,r){function i(){for(var e=-1,s=arguments.length,c=-1,l=r.length,d=nl(l+s),h=this&&this!==Sn&&this instanceof i?u:t;++c<l;)d[c]=r[c];for(;s--;)d[c++]=arguments[++e];return a(h,o?n:this,d)}var o=e&_t,u=Gi(t);return i}function ia(t){return function(e,n,r){return r&&"number"!=typeof r&&Ha(e,n,r)&&(n=r=nt),e=bs(e),n===nt?(n=e,e=0):n=bs(n),r=r===nt?e<n?1:-1:bs(r),ti(e,n,r,t)}}function aa(t){return function(e,n){return"string"==typeof e&&"string"==typeof n||(e=ws(e),n=ws(n)),t(e,n)}}function oa(t,e,n,r,i,a,o,u,s,c){var l=e&yt,d=l?o:nt,h=l?nt:o,f=l?a:nt,_=l?nt:a;e|=l?vt:Mt,(e&=~(l?Mt:vt))&mt||(e&=~(_t|pt));var p=[t,e,i,f,d,_,h,u,s,c],m=n.apply(nt,p);return Na(t)&&Td(m,p),m.placeholder=r,Ja(m,t,e)}function ua(t){var e=ol[t];return function(t,n){if(t=ws(t),n=null==n?0:$l(Ls(n),292)){var r=(Ys(t)+"e").split("e");return r=(Ys(e(r[0]+"e"+(+r[1]+n)))+"e").split("e"),+(r[0]+"e"+(+r[1]-n))}return e(t)}}function sa(t){return function(e){var n=xd(e);return n==Vt?q(e):n==Qt?G(e):F(e,t(e))}}function ca(t,e,n,r,i,a,o,u){var s=e&pt;if(!s&&"function"!=typeof t)throw new ll(at);var c=r?r.length:0;if(c||(e&=~(vt|Mt),r=i=nt),o=o===nt?o:Ul(Ls(o),0),u=u===nt?u:Ls(u),c-=i?i.length:0,e&Mt){var l=r,d=i;r=i=nt}var h=s?nt:kd(t),f=[t,e,n,r,i,l,d,a,o,u];if(h&&za(f,h),t=f[0],e=f[1],n=f[2],r=f[3],i=f[4],u=f[9]=f[9]===nt?s?0:t.length:Ul(f[9]-c,0),!u&&e&(yt|gt)&&(e&=~(yt|gt)),e&&e!=_t)_=e==yt||e==gt?Ji(t,e,u):e!=vt&&e!=(_t|vt)||i.length?Xi.apply(nt,f):ra(t,e,n,r);else var _=Ui(t,e,n);return Ja((h?gd:Td)(_,f),t,e)}function la(t,e,n,r){return t===nt||Uu(t,fl[n])&&!ml.call(r,n)?e:t}function da(t,e,n,r,i,a){return is(t)&&is(e)&&(a.set(e,t),qr(t,e,nt,da,a),a.delete(e)),t}function ha(t){return fs(t)?nt:t}function fa(t,e,n,r,i,a){var o=n&ht,u=t.length,s=e.length;if(u!=s&&!(o&&s>u))return!1;var c=a.get(t);if(c&&a.get(e))return c==e;var l=-1,d=!0,h=n&ft?new yn:nt;for(a.set(t,e),a.set(e,t);++l<u;){var f=t[l],_=e[l];if(r)var p=o?r(_,f,l,e,t,a):r(f,_,l,t,e,a);if(p!==nt){if(p)continue;d=!1;break}if(h){if(!y(e,function(t,e){if(!H(h,e)&&(f===t||i(f,t,n,r,a)))return h.push(e)})){d=!1;break}}else if(f!==_&&!i(f,_,n,r,a)){d=!1;break}}return a.delete(t),a.delete(e),d}function _a(t,e,n,r,i,a,o){switch(n){case oe:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case ae:return!(t.byteLength!=e.byteLength||!a(new Dl(t),new Dl(e)));case Rt:case Wt:case Gt:return Uu(+t,+e);case qt:return t.name==e.name&&t.message==e.message;case Xt:case te:return t==e+"";case Vt:var u=q;case Qt:var s=r&ht;if(u||(u=V),t.size!=e.size&&!s)return!1;var c=o.get(t);if(c)return c==e;r|=ft,o.set(t,e);var l=fa(u(t),u(e),r,i,a,o);return o.delete(t),l;case ee:if(dd)return dd.call(t)==dd.call(e)}return!1}function pa(t,e,n,r,i,a){var o=n&ht,u=ya(t),s=u.length;if(s!=ya(e).length&&!o)return!1;for(var c=s;c--;){var l=u[c];if(!(o?l in e:ml.call(e,l)))return!1}var d=a.get(t);if(d&&a.get(e))return d==e;var h=!0;a.set(t,e),a.set(e,t);for(var f=o;++c<s;){l=u[c];var _=t[l],p=e[l];if(r)var m=o?r(p,_,l,e,t,a):r(_,p,l,t,e,a);if(!(m===nt?_===p||i(_,p,n,r,a):m)){h=!1;break}f||(f="constructor"==l)}if(h&&!f){var y=t.constructor,g=e.constructor;y!=g&&"constructor"in t&&"constructor"in e&&!("function"==typeof y&&y instanceof y&&"function"==typeof g&&g instanceof g)&&(h=!1)}return a.delete(t),a.delete(e),h}function ma(t){return Ed($a(t,nt,fo),t+"")}function ya(t){return yr(t,Is,wd)}function ga(t){return yr(t,Rs,Dd)}function va(t){for(var e=t.name+"",n=id[e],r=ml.call(id,e)?n.length:0;r--;){var i=n[r],a=i.func;if(null==a||a==t)return i.name}return e}function Ma(t){return(ml.call(n,"placeholder")?n:t).placeholder}function ba(){var t=n.iteratee||Sc;return t=t===Sc?Pr:t,arguments.length?t(arguments[0],arguments[1]):t}function La(t,e){var n=t.__data__;return Pa(e)?n["string"==typeof e?"string":"hash"]:n.map}function ka(t){for(var e=Is(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,Ra(i)]}return e}function wa(t,e){var n=I(t,e);return Cr(n)?n:nt}function Da(t){var e=ml.call(t,Cl),n=t[Cl];try{t[Cl]=nt;var r=!0}catch(t){}var i=vl.call(t);return r&&(e?t[Cl]=n:delete t[Cl]),i}function xa(t,e,n){for(var r=-1,i=n.length;++r<i;){var a=n[r],o=a.size;switch(a.type){case"drop":t+=o;break;case"dropRight":e-=o;break;case"take":e=$l(e,t+o);break;case"takeRight":t=Ul(t,e-o)}}return{start:t,end:e}}function Ya(t){var e=t.match(Oe);return e?e[1].split(Pe):[]}function Ta(t,e,n){e=ki(e,t);for(var r=-1,i=e.length,a=!1;++r<i;){var o=Xa(e[r]);if(!(a=null!=t&&n(t,o)))break;t=t[o]}return a||++r!=i?a:!!(i=null==t?0:t.length)&&rs(i)&&ja(o,i)&&(mh(t)||ph(t))}function Aa(t){var e=t.length,n=t.constructor(e);return e&&"string"==typeof t[0]&&ml.call(t,"index")&&(n.index=t.index,n.input=t.input),n}function Ea(t){return"function"!=typeof t.constructor||Ia(t)?{}:fd(Yl(t))}function Sa(t,e,n,r){var i=t.constructor;switch(e){case ae:return xi(t);case Rt:case Wt:return new i(+t);case oe:return Yi(t,r);case ue:case se:case ce:case le:case de:case he:case fe:case _e:case pe:return Fi(t,r);case Vt:return Ti(t,r,n);case Gt:case te:return new i(t);case Xt:return Ai(t);case Qt:return Ei(t,r,n);case ee:return Si(t)}}function Fa(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(He,"{\n/* [wrapped with "+e+"] */\n")}function Ca(t){return mh(t)||ph(t)||!!(Sl&&t&&t[Sl])}function ja(t,e){return!!(e=null==e?St:e)&&("number"==typeof t||$e.test(t))&&t>-1&&t%1==0&&t<e}function Ha(t,e,n){if(!is(n))return!1;var r=typeof e;return!!("number"==r?$u(n)&&ja(e,n.length):"string"==r&&e in n)&&Uu(n[e],t)}function Oa(t,e){if(mh(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!ms(t))||(Ye.test(t)||!xe.test(t)||null!=e&&t in ul(e))}function Pa(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}function Na(t){var e=va(t),r=n[e];if("function"!=typeof r||!(e in J.prototype))return!1;if(t===r)return!0;var i=kd(r);return!!i&&t===i[0]}function Ba(t){return!!gl&&gl in t}function Ia(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||fl)}function Ra(t){return t===t&&!is(t)}function Wa(t,e){return function(n){return null!=n&&(n[t]===e&&(e!==nt||t in ul(n)))}}function za(t,e){var n=t[1],r=e[1],i=n|r,a=i<(_t|pt|bt),o=r==bt&&n==yt||r==bt&&n==Lt&&t[7].length<=e[8]||r==(bt|Lt)&&e[7].length<=e[8]&&n==yt;if(!a&&!o)return t;r&_t&&(t[2]=e[2],i|=n&_t?0:mt);var u=e[3];if(u){var s=t[3];t[3]=s?Hi(s,u,e[4]):u,t[4]=s?$(t[3],st):e[4]}return u=e[5],u&&(s=t[5],t[5]=s?Oi(s,u,e[6]):u,t[6]=s?$(t[5],st):e[6]),u=e[7],u&&(t[7]=u),r&bt&&(t[8]=null==t[8]?e[8]:$l(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i,t}function qa(t){var e=[];if(null!=t)for(var n in ul(t))e.push(n);return e}function Ua(t){return vl.call(t)}function $a(t,e,n){return e=Ul(e===nt?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=Ul(r.length-e,0),u=nl(o);++i<o;)u[i]=r[e+i];i=-1;for(var s=nl(e+1);++i<e;)s[i]=r[i];return s[e]=n(u),a(t,this,s)}}function Va(t,e){return e.length<2?t:mr(t,ui(e,0,-1))}function Ga(t,e){for(var n=t.length,r=$l(e.length,n),i=Pi(t);r--;){var a=e[r];t[r]=ja(a,n)?i[a]:nt}return t}function Ja(t,e,n){var r=e+"";return Ed(t,Fa(r,to(Ya(r),n)))}function Za(t){var e=0,n=0;return function(){var r=Vl(),i=Yt-(r-n);if(n=r,i>0){if(++e>=xt)return arguments[0]}else e=0;return t.apply(nt,arguments)}}function Ka(t,e){var n=-1,r=t.length,i=r-1;for(e=e===nt?r:e;++n<e;){var a=Qr(n,i),o=t[a];t[a]=t[n],t[n]=o}return t.length=e,t}function Xa(t){if("string"==typeof t||ms(t))return t;var e=t+"";return"0"==e&&1/t==-Et?"-0":e}function Qa(t){if(null!=t){try{return pl.call(t)}catch(t){}try{return t+""}catch(t){}}return""}function to(t,e){return u(Pt,function(n){var r="_."+n[0];e&n[1]&&!d(t,r)&&t.push(r)}),t.sort()}function eo(t){if(t instanceof J)return t.clone();var e=new Y(t.__wrapped__,t.__chain__);return e.__actions__=Pi(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}function no(t,e,n){e=(n?Ha(t,e,n):e===nt)?1:Ul(Ls(e),0);var r=null==t?0:t.length;if(!r||e<1)return[];for(var i=0,a=0,o=nl(Nl(r/e));i<r;)o[a++]=ui(t,i,i+=e);return o}function ro(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var a=t[e];a&&(i[r++]=a)}return i}function io(){var t=arguments.length;if(!t)return[];for(var e=nl(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return _(mh(n)?Pi(n):[n],hr(e,1))}function ao(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===nt?1:Ls(e),ui(t,e<0?0:e,r)):[]}function oo(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===nt?1:Ls(e),e=r-e,ui(t,0,e<0?0:e)):[]}function uo(t,e){return t&&t.length?yi(t,ba(e,3),!0,!0):[]}function so(t,e){return t&&t.length?yi(t,ba(e,3),!0):[]}function co(t,e,n,r){var i=null==t?0:t.length;return i?(n&&"number"!=typeof n&&Ha(t,e,n)&&(n=0,r=i),lr(t,e,n,r)):[]}function lo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:Ls(n);return i<0&&(i=Ul(r+i,0)),b(t,ba(e,3),i)}function ho(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r-1;return n!==nt&&(i=Ls(n),i=n<0?Ul(r+i,0):$l(i,r-1)),b(t,ba(e,3),i,!0)}function fo(t){return(null==t?0:t.length)?hr(t,1):[]}function _o(t){return(null==t?0:t.length)?hr(t,Et):[]}function po(t,e){return(null==t?0:t.length)?(e=e===nt?1:Ls(e),hr(t,e)):[]}function mo(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];r[i[0]]=i[1]}return r}function yo(t){return t&&t.length?t[0]:nt}function go(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:Ls(n);return i<0&&(i=Ul(r+i,0)),L(t,e,i)}function vo(t){return(null==t?0:t.length)?ui(t,0,-1):[]}function Mo(t,e){return null==t?"":zl.call(t,e)}function bo(t){var e=null==t?0:t.length;return e?t[e-1]:nt}function Lo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r;return n!==nt&&(i=Ls(n),i=i<0?Ul(r+i,0):$l(i,r-1)),e===e?Z(t,e,i):b(t,w,i,!0)}function ko(t,e){return t&&t.length?$r(t,Ls(e)):nt}function wo(t,e){return t&&t.length&&e&&e.length?Kr(t,e):t}function Do(t,e,n){return t&&t.length&&e&&e.length?Kr(t,e,ba(n,2)):t}function xo(t,e,n){return t&&t.length&&e&&e.length?Kr(t,e,nt,n):t}function Yo(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],a=t.length;for(e=ba(e,3);++r<a;){var o=t[r];e(o,r,t)&&(n.push(o),i.push(r))}return Xr(t,i),n}function To(t){return null==t?t:Zl.call(t)}function Ao(t,e,n){var r=null==t?0:t.length;return r?(n&&"number"!=typeof n&&Ha(t,e,n)?(e=0,n=r):(e=null==e?0:Ls(e),n=n===nt?r:Ls(n)),ui(t,e,n)):[]}function Eo(t,e){return ci(t,e)}function So(t,e,n){return li(t,e,ba(n,2))}function Fo(t,e){var n=null==t?0:t.length;if(n){var r=ci(t,e);if(r<n&&Uu(t[r],e))return r}return-1}function Co(t,e){return ci(t,e,!0)}function jo(t,e,n){return li(t,e,ba(n,2),!0)}function Ho(t,e){if(null==t?0:t.length){var n=ci(t,e,!0)-1;if(Uu(t[n],e))return n}return-1}function Oo(t){return t&&t.length?di(t):[]}function Po(t,e){return t&&t.length?di(t,ba(e,2)):[]}function No(t){var e=null==t?0:t.length;return e?ui(t,1,e):[]}function Bo(t,e,n){return t&&t.length?(e=n||e===nt?1:Ls(e),ui(t,0,e<0?0:e)):[]}function Io(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===nt?1:Ls(e),e=r-e,ui(t,e<0?0:e,r)):[]}function Ro(t,e){return t&&t.length?yi(t,ba(e,3),!1,!0):[]}function Wo(t,e){return t&&t.length?yi(t,ba(e,3)):[]}function zo(t){return t&&t.length?_i(t):[]}function qo(t,e){return t&&t.length?_i(t,ba(e,2)):[]}function Uo(t,e){return e="function"==typeof e?e:nt,t&&t.length?_i(t,nt,e):[]}function $o(t){if(!t||!t.length)return[];var e=0;return t=l(t,function(t){if(Vu(t))return e=Ul(t.length,e),!0}),S(e,function(e){return f(t,x(e))})}function Vo(t,e){if(!t||!t.length)return[];var n=$o(t);return null==e?n:f(n,function(t){return a(e,nt,t)})}function Go(t,e){return Mi(t||[],e||[],Jn)}function Jo(t,e){return Mi(t||[],e||[],ai)}function Zo(t){var e=n(t);return e.__chain__=!0,e}function Ko(t,e){return e(t),t}function Xo(t,e){return e(t)}function Qo(){return Zo(this)}function tu(){return new Y(this.value(),this.__chain__)}function eu(){this.__values__===nt&&(this.__values__=Ms(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?nt:this.__values__[this.__index__++]}}function nu(){return this}function ru(t){for(var e,n=this;n instanceof g;){var r=eo(n);r.__index__=0,r.__values__=nt,e?i.__wrapped__=r:e=r;var i=r;n=n.__wrapped__}return i.__wrapped__=t,e}function iu(){var t=this.__wrapped__;if(t instanceof J){var e=t;return this.__actions__.length&&(e=new J(this)),e=e.reverse(),e.__actions__.push({func:Xo,args:[To],thisArg:nt}),new Y(e,this.__chain__)}return this.thru(To)}function au(){return gi(this.__wrapped__,this.__actions__)}function ou(t,e,n){var r=mh(t)?c:sr;return n&&Ha(t,e,n)&&(e=nt),r(t,ba(e,3))}function uu(t,e){return(mh(t)?l:dr)(t,ba(e,3))}function su(t,e){return hr(_u(t,e),1)}function cu(t,e){return hr(_u(t,e),Et)}function lu(t,e,n){return n=n===nt?1:Ls(n),hr(_u(t,e),n)}function du(t,e){return(mh(t)?u:_d)(t,ba(e,3))}function hu(t,e){return(mh(t)?s:pd)(t,ba(e,3))}function fu(t,e,n,r){t=$u(t)?t:Qs(t),n=n&&!r?Ls(n):0;var i=t.length;return n<0&&(n=Ul(i+n,0)),ps(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&L(t,e,n)>-1}function _u(t,e){return(mh(t)?f:Rr)(t,ba(e,3))}function pu(t,e,n,r){return null==t?[]:(mh(e)||(e=null==e?[]:[e]),n=r?nt:n,mh(n)||(n=null==n?[]:[n]),Vr(t,e,n))}function mu(t,e,n){var r=mh(t)?p:T,i=arguments.length<3;return r(t,ba(e,4),n,i,_d)}function yu(t,e,n){var r=mh(t)?m:T,i=arguments.length<3;return r(t,ba(e,4),n,i,pd)}function gu(t,e){return(mh(t)?l:dr)(t,Fu(ba(e,3)))}function vu(t){return(mh(t)?Hn:ri)(t)}function Mu(t,e,n){return e=(n?Ha(t,e,n):e===nt)?1:Ls(e),(mh(t)?On:ii)(t,e)}function bu(t){return(mh(t)?zn:oi)(t)}function Lu(t){if(null==t)return 0;if($u(t))return ps(t)?K(t):t.length;var e=xd(t);return e==Vt||e==Qt?t.size:Nr(t).length}function ku(t,e,n){var r=mh(t)?y:si;return n&&Ha(t,e,n)&&(e=nt),r(t,ba(e,3))}function wu(t,e){if("function"!=typeof e)throw new ll(at);return t=Ls(t),function(){if(--t<1)return e.apply(this,arguments)}}function Du(t,e,n){return e=n?nt:e,e=t&&null==e?t.length:e,ca(t,bt,nt,nt,nt,nt,e)}function xu(t,e){var n;if("function"!=typeof e)throw new ll(at);return t=Ls(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=nt),n}}function Yu(t,e,n){e=n?nt:e;var r=ca(t,yt,nt,nt,nt,nt,nt,e);return r.placeholder=Yu.placeholder,r}function Tu(t,e,n){e=n?nt:e;var r=ca(t,gt,nt,nt,nt,nt,nt,e);return r.placeholder=Tu.placeholder,r}function Au(t,e,n){function r(e){var n=h,r=f;return h=f=nt,g=e,p=t.apply(r,n)}function i(t){return g=t,m=Ad(u,e),v?r(t):p}function a(t){var n=t-y,r=t-g,i=e-n;return M?$l(i,_-r):i}function o(t){var n=t-y,r=t-g;return y===nt||n>=e||n<0||M&&r>=_}function u(){var t=ih();if(o(t))return s(t);m=Ad(u,a(t))}function s(t){return m=nt,b&&h?r(t):(h=f=nt,p)}function c(){m!==nt&&bd(m),g=0,h=y=f=m=nt}function l(){return m===nt?p:s(ih())}function d(){var t=ih(),n=o(t);if(h=arguments,f=this,y=t,n){if(m===nt)return i(y);if(M)return m=Ad(u,e),r(y)}return m===nt&&(m=Ad(u,e)),p}var h,f,_,p,m,y,g=0,v=!1,M=!1,b=!0;if("function"!=typeof t)throw new ll(at);return e=ws(e)||0,is(n)&&(v=!!n.leading,M="maxWait"in n,_=M?Ul(ws(n.maxWait)||0,e):_,b="trailing"in n?!!n.trailing:b),d.cancel=c,d.flush=l,d}function Eu(t){return ca(t,kt)}function Su(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new ll(at);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=t.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(Su.Cache||cn),n}function Fu(t){if("function"!=typeof t)throw new ll(at);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function Cu(t){return xu(2,t)}function ju(t,e){if("function"!=typeof t)throw new ll(at);return e=e===nt?e:Ls(e),ni(t,e)}function Hu(t,e){if("function"!=typeof t)throw new ll(at);return e=null==e?0:Ul(Ls(e),0),ni(function(n){var r=n[e],i=wi(n,0,e);return r&&_(i,r),a(t,this,i)})}function Ou(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new ll(at);return is(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),Au(t,e,{leading:r,maxWait:e,trailing:i})}function Pu(t){return Du(t,1)}function Nu(t,e){return lh(Li(e),t)}function Bu(){if(!arguments.length)return[];var t=arguments[0];return mh(t)?t:[t]}function Iu(t){return rr(t,dt)}function Ru(t,e){return e="function"==typeof e?e:nt,rr(t,dt,e)}function Wu(t){return rr(t,ct|dt)}function zu(t,e){return e="function"==typeof e?e:nt,rr(t,ct|dt,e)}function qu(t,e){return null==e||ar(t,e,Is(e))}function Uu(t,e){return t===e||t!==t&&e!==e}function $u(t){return null!=t&&rs(t.length)&&!es(t)}function Vu(t){return as(t)&&$u(t)}function Gu(t){return!0===t||!1===t||as(t)&&gr(t)==Rt}function Ju(t){return as(t)&&1===t.nodeType&&!fs(t)}function Zu(t){if(null==t)return!0;if($u(t)&&(mh(t)||"string"==typeof t||"function"==typeof t.splice||gh(t)||kh(t)||ph(t)))return!t.length;var e=xd(t);if(e==Vt||e==Qt)return!t.size;if(Ia(t))return!Nr(t).length;for(var n in t)if(ml.call(t,n))return!1;return!0}function Ku(t,e){return Ar(t,e)}function Xu(t,e,n){n="function"==typeof n?n:nt;var r=n?n(t,e):nt;return r===nt?Ar(t,e,nt,n):!!r}function Qu(t){if(!as(t))return!1;var e=gr(t);return e==qt||e==zt||"string"==typeof t.message&&"string"==typeof t.name&&!fs(t)}function ts(t){return"number"==typeof t&&Wl(t)}function es(t){if(!is(t))return!1;var e=gr(t);return e==Ut||e==$t||e==It||e==Kt}function ns(t){return"number"==typeof t&&t==Ls(t)}function rs(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=St}function is(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function as(t){return null!=t&&"object"==typeof t}function os(t,e){return t===e||Fr(t,e,ka(e))}function us(t,e,n){return n="function"==typeof n?n:nt,Fr(t,e,ka(e),n)}function ss(t){return hs(t)&&t!=+t}function cs(t){if(Yd(t))throw new il(it);return Cr(t)}function ls(t){return null===t}function ds(t){return null==t}function hs(t){return"number"==typeof t||as(t)&&gr(t)==Gt}function fs(t){if(!as(t)||gr(t)!=Zt)return!1;var e=Yl(t);if(null===e)return!0;var n=ml.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&pl.call(n)==Ml}function _s(t){return ns(t)&&t>=-St&&t<=St}function ps(t){return"string"==typeof t||!mh(t)&&as(t)&&gr(t)==te}function ms(t){return"symbol"==typeof t||as(t)&&gr(t)==ee}function ys(t){return t===nt}function gs(t){return as(t)&&xd(t)==re}function vs(t){return as(t)&&gr(t)==ie}function Ms(t){if(!t)return[];if($u(t))return ps(t)?X(t):Pi(t);if(Fl&&t[Fl])return z(t[Fl]());var e=xd(t);return(e==Vt?q:e==Qt?V:Qs)(t)}function bs(t){if(!t)return 0===t?t:0;if((t=ws(t))===Et||t===-Et){return(t<0?-1:1)*Ft}return t===t?t:0}function Ls(t){var e=bs(t),n=e%1;return e===e?n?e-n:e:0}function ks(t){return t?nr(Ls(t),0,jt):0}function ws(t){if("number"==typeof t)return t;if(ms(t))return Ct;if(is(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=is(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Fe,"");var n=ze.test(t);return n||Ue.test(t)?Tn(t.slice(2),n?2:8):We.test(t)?Ct:+t}function Ds(t){return Ni(t,Rs(t))}function xs(t){return t?nr(Ls(t),-St,St):0===t?t:0}function Ys(t){return null==t?"":fi(t)}function Ts(t,e){var n=fd(t);return null==e?n:Xn(n,e)}function As(t,e){return M(t,ba(e,3),fr)}function Es(t,e){return M(t,ba(e,3),_r)}function Ss(t,e){return null==t?t:md(t,ba(e,3),Rs)}function Fs(t,e){return null==t?t:yd(t,ba(e,3),Rs)}function Cs(t,e){return t&&fr(t,ba(e,3))}function js(t,e){return t&&_r(t,ba(e,3))}function Hs(t){return null==t?[]:pr(t,Is(t))}function Os(t){return null==t?[]:pr(t,Rs(t))}function Ps(t,e,n){var r=null==t?nt:mr(t,e);return r===nt?n:r}function Ns(t,e){return null!=t&&Ta(t,e,Mr)}function Bs(t,e){return null!=t&&Ta(t,e,br)}function Is(t){return $u(t)?Cn(t):Nr(t)}function Rs(t){return $u(t)?Cn(t,!0):Br(t)}function Ws(t,e){var n={};return e=ba(e,3),fr(t,function(t,r,i){tr(n,e(t,r,i),t)}),n}function zs(t,e){var n={};return e=ba(e,3),fr(t,function(t,r,i){tr(n,r,e(t,r,i))}),n}function qs(t,e){return Us(t,Fu(ba(e)))}function Us(t,e){if(null==t)return{};var n=f(ga(t),function(t){return[t]});return e=ba(e),Jr(t,n,function(t,n){return e(t,n[0])})}function $s(t,e,n){e=ki(e,t);var r=-1,i=e.length;for(i||(i=1,t=nt);++r<i;){var a=null==t?nt:t[Xa(e[r])];a===nt&&(r=i,a=n),t=es(a)?a.call(t):a}return t}function Vs(t,e,n){return null==t?t:ai(t,e,n)}function Gs(t,e,n,r){return r="function"==typeof r?r:nt,null==t?t:ai(t,e,n,r)}function Js(t,e,n){var r=mh(t),i=r||gh(t)||kh(t);if(e=ba(e,4),null==n){var a=t&&t.constructor;n=i?r?new a:[]:is(t)&&es(a)?fd(Yl(t)):{}}return(i?u:fr)(t,function(t,r,i){return e(n,t,r,i)}),n}function Zs(t,e){return null==t||pi(t,e)}function Ks(t,e,n){return null==t?t:mi(t,e,Li(n))}function Xs(t,e,n,r){return r="function"==typeof r?r:nt,null==t?t:mi(t,e,Li(n),r)}function Qs(t){return null==t?[]:j(t,Is(t))}function tc(t){return null==t?[]:j(t,Rs(t))}function ec(t,e,n){return n===nt&&(n=e,e=nt),n!==nt&&(n=ws(n),n=n===n?n:0),e!==nt&&(e=ws(e),e=e===e?e:0),nr(ws(t),e,n)}function nc(t,e,n){return e=bs(e),n===nt?(n=e,e=0):n=bs(n),t=ws(t),Lr(t,e,n)}function rc(t,e,n){if(n&&"boolean"!=typeof n&&Ha(t,e,n)&&(e=n=nt),n===nt&&("boolean"==typeof e?(n=e,e=nt):"boolean"==typeof t&&(n=t,t=nt)),t===nt&&e===nt?(t=0,e=1):(t=bs(t),e===nt?(e=t,t=0):e=bs(e)),t>e){var r=t;t=e,e=r}if(n||t%1||e%1){var i=Jl();return $l(t+i*(e-t+Yn("1e-"+((i+"").length-1))),e)}return Qr(t,e)}function ic(t){return Jh(Ys(t).toLowerCase())}function ac(t){return(t=Ys(t))&&t.replace(Ve,qn).replace(_n,"")}function oc(t,e,n){t=Ys(t),e=fi(e);var r=t.length;n=n===nt?r:nr(Ls(n),0,r);var i=n;return(n-=e.length)>=0&&t.slice(n,i)==e}function uc(t){return t=Ys(t),t&&Le.test(t)?t.replace(Me,Un):t}function sc(t){return t=Ys(t),t&&Se.test(t)?t.replace(Ee,"\\$&"):t}function cc(t,e,n){t=Ys(t),e=Ls(e);var r=e?K(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return na(Bl(i),n)+t+na(Nl(i),n)}function lc(t,e,n){t=Ys(t),e=Ls(e);var r=e?K(t):0;return e&&r<e?t+na(e-r,n):t}function dc(t,e,n){t=Ys(t),e=Ls(e);var r=e?K(t):0;return e&&r<e?na(e-r,n)+t:t}function hc(t,e,n){return n||null==e?e=0:e&&(e=+e),Gl(Ys(t).replace(Ce,""),e||0)}function fc(t,e,n){return e=(n?Ha(t,e,n):e===nt)?1:Ls(e),ei(Ys(t),e)}function _c(){var t=arguments,e=Ys(t[0]);return t.length<3?e:e.replace(t[1],t[2])}function pc(t,e,n){return n&&"number"!=typeof n&&Ha(t,e,n)&&(e=n=nt),(n=n===nt?jt:n>>>0)?(t=Ys(t),t&&("string"==typeof e||null!=e&&!bh(e))&&!(e=fi(e))&&R(t)?wi(X(t),0,n):t.split(e,n)):[]}function mc(t,e,n){return t=Ys(t),n=null==n?0:nr(Ls(n),0,t.length),e=fi(e),t.slice(n,n+e.length)==e}function yc(t,e,r){var i=n.templateSettings;r&&Ha(t,e,r)&&(e=nt),t=Ys(t),e=Th({},e,i,la);var a,o,u=Th({},e.imports,i.imports,la),s=Is(u),c=j(u,s),l=0,d=e.interpolate||Ge,h="__p += '",f=sl((e.escape||Ge).source+"|"+d.source+"|"+(d===De?Ie:Ge).source+"|"+(e.evaluate||Ge).source+"|$","g"),_="//# sourceURL="+("sourceURL"in e?e.sourceURL:"lodash.templateSources["+ ++Mn+"]")+"\n";t.replace(f,function(e,n,r,i,u,s){return r||(r=i),h+=t.slice(l,s).replace(Je,B),n&&(a=!0,h+="' +\n__e("+n+") +\n'"),u&&(o=!0,h+="';\n"+u+";\n__p += '"),r&&(h+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),l=s+e.length,e}),h+="';\n";var p=e.variable;p||(h="with (obj) {\n"+h+"\n}\n"),h=(o?h.replace(me,""):h).replace(ye,"$1").replace(ge,"$1;"),h="function("+(p||"obj")+") {\n"+(p?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(a?", __e = _.escape":"")+(o?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+h+"return __p\n}";var m=Zh(function(){return al(s,_+"return "+h).apply(nt,c)});if(m.source=h,Qu(m))throw m;return m}function gc(t){return Ys(t).toLowerCase()}function vc(t){return Ys(t).toUpperCase()}function Mc(t,e,n){if((t=Ys(t))&&(n||e===nt))return t.replace(Fe,"");if(!t||!(e=fi(e)))return t;var r=X(t),i=X(e);return wi(r,O(r,i),P(r,i)+1).join("")}function bc(t,e,n){if((t=Ys(t))&&(n||e===nt))return t.replace(je,"");if(!t||!(e=fi(e)))return t;var r=X(t);return wi(r,0,P(r,X(e))+1).join("")}function Lc(t,e,n){if((t=Ys(t))&&(n||e===nt))return t.replace(Ce,"");if(!t||!(e=fi(e)))return t;var r=X(t);return wi(r,O(r,X(e))).join("")}function kc(t,e){var n=wt,r=Dt;if(is(e)){var i="separator"in e?e.separator:i;n="length"in e?Ls(e.length):n,r="omission"in e?fi(e.omission):r}t=Ys(t);var a=t.length;if(R(t)){var o=X(t);a=o.length}if(n>=a)return t;var u=n-K(r);if(u<1)return r;var s=o?wi(o,0,u).join(""):t.slice(0,u);if(i===nt)return s+r;if(o&&(u+=s.length-u),bh(i)){if(t.slice(u).search(i)){var c,l=s;for(i.global||(i=sl(i.source,Ys(Re.exec(i))+"g")),i.lastIndex=0;c=i.exec(l);)var d=c.index;s=s.slice(0,d===nt?u:d)}}else if(t.indexOf(fi(i),u)!=u){var h=s.lastIndexOf(i);h>-1&&(s=s.slice(0,h))}return s+r}function wc(t){return t=Ys(t),t&&be.test(t)?t.replace(ve,$n):t}function Dc(t,e,n){return t=Ys(t),e=n?nt:e,e===nt?W(t)?et(t):v(t):t.match(e)||[]}function xc(t){var e=null==t?0:t.length,n=ba();return t=e?f(t,function(t){if("function"!=typeof t[1])throw new ll(at);return[n(t[0]),t[1]]}):[],ni(function(n){for(var r=-1;++r<e;){var i=t[r];if(a(i[0],this,n))return a(i[1],this,n)}})}function Yc(t){return ir(rr(t,ct))}function Tc(t){return function(){return t}}function Ac(t,e){return null==t||t!==t?e:t}function Ec(t){return t}function Sc(t){return Pr("function"==typeof t?t:rr(t,ct))}function Fc(t){return Wr(rr(t,ct))}function Cc(t,e){return zr(t,rr(e,ct))}function jc(t,e,n){var r=Is(e),i=pr(e,r);null!=n||is(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=pr(e,Is(e)));var a=!(is(n)&&"chain"in n&&!n.chain),o=es(t);return u(i,function(n){var r=e[n];t[n]=r,o&&(t.prototype[n]=function(){var e=this.__chain__;if(a||e){var n=t(this.__wrapped__);return(n.__actions__=Pi(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,_([this.value()],arguments))})}),t}function Hc(){return Sn._===this&&(Sn._=bl),this}function Oc(){}function Pc(t){return t=Ls(t),ni(function(e){return $r(e,t)})}function Nc(t){return Oa(t)?x(Xa(t)):Zr(t)}function Bc(t){return function(e){return null==t?nt:mr(t,e)}}function Ic(){return[]}function Rc(){return!1}function Wc(){return{}}function zc(){return""}function qc(){return!0}function Uc(t,e){if((t=Ls(t))<1||t>St)return[];var n=jt,r=$l(t,jt);e=ba(e),t-=jt;for(var i=S(r,e);++n<t;)e(n);return i}function $c(t){return mh(t)?f(t,Xa):ms(t)?[t]:Pi(Sd(Ys(t)))}function Vc(t){var e=++yl;return Ys(t)+e}function Gc(t){return t&&t.length?cr(t,Ec,vr):nt}function Jc(t,e){return t&&t.length?cr(t,ba(e,2),vr):nt}function Zc(t){return D(t,Ec)}function Kc(t,e){return D(t,ba(e,2))}function Xc(t){return t&&t.length?cr(t,Ec,Ir):nt}function Qc(t,e){return t&&t.length?cr(t,ba(e,2),Ir):nt}function tl(t){return t&&t.length?E(t,Ec):0}function el(t,e){return t&&t.length?E(t,ba(e,2)):0}e=null==e?Sn:Vn.defaults(Sn.Object(),e,Vn.pick(Sn,vn));var nl=e.Array,rl=e.Date,il=e.Error,al=e.Function,ol=e.Math,ul=e.Object,sl=e.RegExp,cl=e.String,ll=e.TypeError,dl=nl.prototype,hl=al.prototype,fl=ul.prototype,_l=e["__core-js_shared__"],pl=hl.toString,ml=fl.hasOwnProperty,yl=0,gl=function(){var t=/[^.]+$/.exec(_l&&_l.keys&&_l.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""}(),vl=fl.toString,Ml=pl.call(ul),bl=Sn._,Ll=sl("^"+pl.call(ml).replace(Ee,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),kl=jn?e.Buffer:nt,wl=e.Symbol,Dl=e.Uint8Array,xl=kl?kl.allocUnsafe:nt,Yl=U(ul.getPrototypeOf,ul),Tl=ul.create,Al=fl.propertyIsEnumerable,El=dl.splice,Sl=wl?wl.isConcatSpreadable:nt,Fl=wl?wl.iterator:nt,Cl=wl?wl.toStringTag:nt,jl=function(){try{var t=wa(ul,"defineProperty");return t({},"",{}),t}catch(t){}}(),Hl=e.clearTimeout!==Sn.clearTimeout&&e.clearTimeout,Ol=rl&&rl.now!==Sn.Date.now&&rl.now,Pl=e.setTimeout!==Sn.setTimeout&&e.setTimeout,Nl=ol.ceil,Bl=ol.floor,Il=ul.getOwnPropertySymbols,Rl=kl?kl.isBuffer:nt,Wl=e.isFinite,zl=dl.join,ql=U(ul.keys,ul),Ul=ol.max,$l=ol.min,Vl=rl.now,Gl=e.parseInt,Jl=ol.random,Zl=dl.reverse,Kl=wa(e,"DataView"),Xl=wa(e,"Map"),Ql=wa(e,"Promise"),td=wa(e,"Set"),ed=wa(e,"WeakMap"),nd=wa(ul,"create"),rd=ed&&new ed,id={},ad=Qa(Kl),od=Qa(Xl),ud=Qa(Ql),sd=Qa(td),cd=Qa(ed),ld=wl?wl.prototype:nt,dd=ld?ld.valueOf:nt,hd=ld?ld.toString:nt,fd=function(){function t(){}return function(e){if(!is(e))return{};if(Tl)return Tl(e);t.prototype=e;var n=new t;return t.prototype=nt,n}}();n.templateSettings={escape:ke,evaluate:we,interpolate:De,variable:"",imports:{_:n}},n.prototype=g.prototype,n.prototype.constructor=n,Y.prototype=fd(g.prototype),Y.prototype.constructor=Y,J.prototype=fd(g.prototype),J.prototype.constructor=J,Ze.prototype.clear=Ke,Ze.prototype.delete=Xe,Ze.prototype.get=Qe,Ze.prototype.has=tn,Ze.prototype.set=en,nn.prototype.clear=rn,nn.prototype.delete=an,nn.prototype.get=on,nn.prototype.has=un,nn.prototype.set=sn,cn.prototype.clear=ln,cn.prototype.delete=dn,cn.prototype.get=hn,cn.prototype.has=pn,cn.prototype.set=mn,yn.prototype.add=yn.prototype.push=gn,yn.prototype.has=kn,wn.prototype.clear=Dn,wn.prototype.delete=xn,wn.prototype.get=An,wn.prototype.has=En,wn.prototype.set=Fn;var _d=zi(fr),pd=zi(_r,!0),md=qi(),yd=qi(!0),gd=rd?function(t,e){return rd.set(t,e),t}:Ec,vd=jl?function(t,e){return jl(t,"toString",{configurable:!0,enumerable:!1,value:Tc(e),writable:!0})}:Ec,Md=ni,bd=Hl||function(t){return Sn.clearTimeout(t)},Ld=td&&1/V(new td([,-0]))[1]==Et?function(t){return new td(t)}:Oc,kd=rd?function(t){return rd.get(t)}:Oc,wd=Il?function(t){return null==t?[]:(t=ul(t),l(Il(t),function(e){return Al.call(t,e)}))}:Ic,Dd=Il?function(t){for(var e=[];t;)_(e,wd(t)),t=Yl(t);return e}:Ic,xd=gr;(Kl&&xd(new Kl(new ArrayBuffer(1)))!=oe||Xl&&xd(new Xl)!=Vt||Ql&&"[object Promise]"!=xd(Ql.resolve())||td&&xd(new td)!=Qt||ed&&xd(new ed)!=re)&&(xd=function(t){var e=gr(t),n=e==Zt?t.constructor:nt,r=n?Qa(n):"";if(r)switch(r){case ad:return oe;case od:return Vt;case ud:return"[object Promise]";case sd:return Qt;case cd:return re}return e});var Yd=_l?es:Rc,Td=Za(gd),Ad=Pl||function(t,e){return Sn.setTimeout(t,e)},Ed=Za(vd),Sd=function(t){var e=Su(t,function(t){return n.size===ut&&n.clear(),t}),n=e.cache;return e}(function(t){var e=[];return Te.test(t)&&e.push(""),t.replace(Ae,function(t,n,r,i){e.push(r?i.replace(Be,"$1"):n||t)}),e}),Fd=ni(function(t,e){return Vu(t)?ur(t,hr(e,1,Vu,!0)):[]}),Cd=ni(function(t,e){var n=bo(e);return Vu(n)&&(n=nt),Vu(t)?ur(t,hr(e,1,Vu,!0),ba(n,2)):[]}),jd=ni(function(t,e){var n=bo(e);return Vu(n)&&(n=nt),Vu(t)?ur(t,hr(e,1,Vu,!0),nt,n):[]}),Hd=ni(function(t){var e=f(t,bi);return e.length&&e[0]===t[0]?kr(e):[]}),Od=ni(function(t){var e=bo(t),n=f(t,bi);return e===bo(n)?e=nt:n.pop(),n.length&&n[0]===t[0]?kr(n,ba(e,2)):[]}),Pd=ni(function(t){var e=bo(t),n=f(t,bi);return e="function"==typeof e?e:nt,e&&n.pop(),n.length&&n[0]===t[0]?kr(n,nt,e):[]}),Nd=ni(wo),Bd=ma(function(t,e){var n=null==t?0:t.length,r=er(t,e);return Xr(t,f(e,function(t){return ja(t,n)?+t:t}).sort(Ci)),r}),Id=ni(function(t){return _i(hr(t,1,Vu,!0))}),Rd=ni(function(t){var e=bo(t);return Vu(e)&&(e=nt),_i(hr(t,1,Vu,!0),ba(e,2))}),Wd=ni(function(t){var e=bo(t);return e="function"==typeof e?e:nt,_i(hr(t,1,Vu,!0),nt,e)}),zd=ni(function(t,e){return Vu(t)?ur(t,e):[]}),qd=ni(function(t){return vi(l(t,Vu))}),Ud=ni(function(t){var e=bo(t);return Vu(e)&&(e=nt),vi(l(t,Vu),ba(e,2))}),$d=ni(function(t){var e=bo(t);return e="function"==typeof e?e:nt,vi(l(t,Vu),nt,e)}),Vd=ni($o),Gd=ni(function(t){var e=t.length,n=e>1?t[e-1]:nt;return n="function"==typeof n?(t.pop(),n):nt,Vo(t,n)}),Jd=ma(function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,i=function(e){return er(e,t)};return!(e>1||this.__actions__.length)&&r instanceof J&&ja(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:Xo,args:[i],thisArg:nt}),new Y(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(nt),t})):this.thru(i)}),Zd=Ri(function(t,e,n){ml.call(t,n)?++t[n]:tr(t,n,1)}),Kd=Zi(lo),Xd=Zi(ho),Qd=Ri(function(t,e,n){ml.call(t,n)?t[n].push(e):tr(t,n,[e])}),th=ni(function(t,e,n){var r=-1,i="function"==typeof e,o=$u(t)?nl(t.length):[];return _d(t,function(t){o[++r]=i?a(e,t,n):Dr(t,e,n)}),o}),eh=Ri(function(t,e,n){tr(t,n,e)}),nh=Ri(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),rh=ni(function(t,e){if(null==t)return[];var n=e.length;return n>1&&Ha(t,e[0],e[1])?e=[]:n>2&&Ha(e[0],e[1],e[2])&&(e=[e[0]]),Vr(t,hr(e,1),[])}),ih=Ol||function(){return Sn.Date.now()},ah=ni(function(t,e,n){var r=_t;if(n.length){var i=$(n,Ma(ah));r|=vt}return ca(t,r,e,n,i)}),oh=ni(function(t,e,n){var r=_t|pt;if(n.length){var i=$(n,Ma(oh));r|=vt}return ca(e,r,t,n,i)}),uh=ni(function(t,e){return or(t,1,e)}),sh=ni(function(t,e,n){return or(t,ws(e)||0,n)});Su.Cache=cn;var ch=Md(function(t,e){e=1==e.length&&mh(e[0])?f(e[0],C(ba())):f(hr(e,1),C(ba()));var n=e.length;return ni(function(r){for(var i=-1,o=$l(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return a(t,this,r)})}),lh=ni(function(t,e){var n=$(e,Ma(lh));return ca(t,vt,nt,e,n)}),dh=ni(function(t,e){var n=$(e,Ma(dh));return ca(t,Mt,nt,e,n)}),hh=ma(function(t,e){return ca(t,Lt,nt,nt,nt,e)}),fh=aa(vr),_h=aa(function(t,e){return t>=e}),ph=xr(function(){return arguments}())?xr:function(t){return as(t)&&ml.call(t,"callee")&&!Al.call(t,"callee")},mh=nl.isArray,yh=Pn?C(Pn):Yr,gh=Rl||Rc,vh=Nn?C(Nn):Tr,Mh=Bn?C(Bn):Sr,bh=In?C(In):jr,Lh=Rn?C(Rn):Hr,kh=Wn?C(Wn):Or,wh=aa(Ir),Dh=aa(function(t,e){return t<=e}),xh=Wi(function(t,e){if(Ia(e)||$u(e))return void Ni(e,Is(e),t);for(var n in e)ml.call(e,n)&&Jn(t,n,e[n])}),Yh=Wi(function(t,e){Ni(e,Rs(e),t)}),Th=Wi(function(t,e,n,r){Ni(e,Rs(e),t,r)}),Ah=Wi(function(t,e,n,r){Ni(e,Is(e),t,r)}),Eh=ma(er),Sh=ni(function(t){return t.push(nt,la),a(Th,nt,t)}),Fh=ni(function(t){return t.push(nt,da),a(Ph,nt,t)}),Ch=Qi(function(t,e,n){t[e]=n},Tc(Ec)),jh=Qi(function(t,e,n){ml.call(t,e)?t[e].push(n):t[e]=[n]},ba),Hh=ni(Dr),Oh=Wi(function(t,e,n){qr(t,e,n)}),Ph=Wi(function(t,e,n,r){qr(t,e,n,r)}),Nh=ma(function(t,e){var n={};if(null==t)return n;var r=!1;e=f(e,function(e){return e=ki(e,t),r||(r=e.length>1),e}),Ni(t,ga(t),n),r&&(n=rr(n,ct|lt|dt,ha));for(var i=e.length;i--;)pi(n,e[i]);return n}),Bh=ma(function(t,e){return null==t?{}:Gr(t,e)}),Ih=sa(Is),Rh=sa(Rs),Wh=Vi(function(t,e,n){return e=e.toLowerCase(),t+(n?ic(e):e)}),zh=Vi(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),qh=Vi(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),Uh=$i("toLowerCase"),$h=Vi(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}),Vh=Vi(function(t,e,n){return t+(n?" ":"")+Jh(e)}),Gh=Vi(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),Jh=$i("toUpperCase"),Zh=ni(function(t,e){try{return a(t,nt,e)}catch(t){return Qu(t)?t:new il(t)}}),Kh=ma(function(t,e){return u(e,function(e){e=Xa(e),tr(t,e,ah(t[e],t))}),t}),Xh=Ki(),Qh=Ki(!0),tf=ni(function(t,e){return function(n){return Dr(n,t,e)}}),ef=ni(function(t,e){return function(n){return Dr(t,n,e)}}),nf=ea(f),rf=ea(c),af=ea(y),of=ia(),uf=ia(!0),sf=ta(function(t,e){return t+e},0),cf=ua("ceil"),lf=ta(function(t,e){return t/e},1),df=ua("floor"),hf=ta(function(t,e){return t*e},1),ff=ua("round"),_f=ta(function(t,e){return t-e},0);return n.after=wu,n.ary=Du,n.assign=xh,n.assignIn=Yh,n.assignInWith=Th,n.assignWith=Ah,n.at=Eh,n.before=xu,n.bind=ah,n.bindAll=Kh,n.bindKey=oh,n.castArray=Bu,n.chain=Zo,n.chunk=no,n.compact=ro,n.concat=io,n.cond=xc,n.conforms=Yc,n.constant=Tc,n.countBy=Zd,n.create=Ts,n.curry=Yu,n.curryRight=Tu,n.debounce=Au,n.defaults=Sh,n.defaultsDeep=Fh,n.defer=uh,n.delay=sh,n.difference=Fd,n.differenceBy=Cd,n.differenceWith=jd,n.drop=ao,n.dropRight=oo,n.dropRightWhile=uo,n.dropWhile=so,n.fill=co,n.filter=uu,n.flatMap=su,n.flatMapDeep=cu,n.flatMapDepth=lu,n.flatten=fo,n.flattenDeep=_o,n.flattenDepth=po,n.flip=Eu,n.flow=Xh,n.flowRight=Qh,n.fromPairs=mo,n.functions=Hs,n.functionsIn=Os,n.groupBy=Qd,n.initial=vo,n.intersection=Hd,n.intersectionBy=Od,n.intersectionWith=Pd,n.invert=Ch,n.invertBy=jh,n.invokeMap=th,n.iteratee=Sc,n.keyBy=eh,n.keys=Is,n.keysIn=Rs,n.map=_u,n.mapKeys=Ws,n.mapValues=zs,n.matches=Fc,n.matchesProperty=Cc,n.memoize=Su,n.merge=Oh,n.mergeWith=Ph,n.method=tf,n.methodOf=ef,n.mixin=jc,n.negate=Fu,n.nthArg=Pc,n.omit=Nh,n.omitBy=qs,n.once=Cu,n.orderBy=pu,n.over=nf,n.overArgs=ch,n.overEvery=rf,n.overSome=af,n.partial=lh,n.partialRight=dh,n.partition=nh,n.pick=Bh,n.pickBy=Us,n.property=Nc,n.propertyOf=Bc,n.pull=Nd,n.pullAll=wo,n.pullAllBy=Do,n.pullAllWith=xo,n.pullAt=Bd,n.range=of,n.rangeRight=uf,n.rearg=hh,n.reject=gu,n.remove=Yo,n.rest=ju,n.reverse=To,n.sampleSize=Mu,n.set=Vs,n.setWith=Gs,n.shuffle=bu,n.slice=Ao,n.sortBy=rh,n.sortedUniq=Oo,n.sortedUniqBy=Po,n.split=pc,n.spread=Hu,n.tail=No,n.take=Bo,n.takeRight=Io,n.takeRightWhile=Ro,n.takeWhile=Wo,n.tap=Ko,n.throttle=Ou,n.thru=Xo,n.toArray=Ms,n.toPairs=Ih,n.toPairsIn=Rh,n.toPath=$c,n.toPlainObject=Ds,n.transform=Js,n.unary=Pu,n.union=Id,n.unionBy=Rd,n.unionWith=Wd,n.uniq=zo,n.uniqBy=qo,n.uniqWith=Uo,n.unset=Zs,n.unzip=$o,n.unzipWith=Vo,n.update=Ks,n.updateWith=Xs,n.values=Qs,n.valuesIn=tc,n.without=zd,n.words=Dc,n.wrap=Nu,n.xor=qd,n.xorBy=Ud,n.xorWith=$d,n.zip=Vd,n.zipObject=Go,n.zipObjectDeep=Jo,n.zipWith=Gd,n.entries=Ih,n.entriesIn=Rh,n.extend=Yh,n.extendWith=Th,jc(n,n),n.add=sf,n.attempt=Zh,n.camelCase=Wh,n.capitalize=ic,n.ceil=cf,n.clamp=ec,n.clone=Iu,n.cloneDeep=Wu,n.cloneDeepWith=zu,n.cloneWith=Ru,n.conformsTo=qu,n.deburr=ac,n.defaultTo=Ac,n.divide=lf,n.endsWith=oc,n.eq=Uu,n.escape=uc,n.escapeRegExp=sc,n.every=ou,n.find=Kd,n.findIndex=lo,n.findKey=As,n.findLast=Xd,n.findLastIndex=ho,n.findLastKey=Es,n.floor=df,n.forEach=du,n.forEachRight=hu,n.forIn=Ss,n.forInRight=Fs,n.forOwn=Cs,n.forOwnRight=js,n.get=Ps,n.gt=fh,n.gte=_h,n.has=Ns,n.hasIn=Bs,n.head=yo,n.identity=Ec,n.includes=fu,n.indexOf=go,n.inRange=nc,n.invoke=Hh,n.isArguments=ph,n.isArray=mh,n.isArrayBuffer=yh,n.isArrayLike=$u,n.isArrayLikeObject=Vu,n.isBoolean=Gu,n.isBuffer=gh,n.isDate=vh,n.isElement=Ju,n.isEmpty=Zu,n.isEqual=Ku,n.isEqualWith=Xu,n.isError=Qu,n.isFinite=ts,n.isFunction=es,n.isInteger=ns,n.isLength=rs,n.isMap=Mh,n.isMatch=os,n.isMatchWith=us,n.isNaN=ss,n.isNative=cs,n.isNil=ds,n.isNull=ls,n.isNumber=hs,n.isObject=is,n.isObjectLike=as,n.isPlainObject=fs,n.isRegExp=bh,n.isSafeInteger=_s,n.isSet=Lh,n.isString=ps,n.isSymbol=ms,n.isTypedArray=kh,n.isUndefined=ys,n.isWeakMap=gs,n.isWeakSet=vs,n.join=Mo,n.kebabCase=zh,n.last=bo,n.lastIndexOf=Lo,n.lowerCase=qh,n.lowerFirst=Uh,n.lt=wh,n.lte=Dh,n.max=Gc,n.maxBy=Jc,n.mean=Zc,n.meanBy=Kc,n.min=Xc,n.minBy=Qc,n.stubArray=Ic,n.stubFalse=Rc,n.stubObject=Wc,n.stubString=zc,n.stubTrue=qc,n.multiply=hf,n.nth=ko,n.noConflict=Hc,n.noop=Oc,n.now=ih,n.pad=cc,n.padEnd=lc,n.padStart=dc,n.parseInt=hc,n.random=rc,n.reduce=mu,n.reduceRight=yu,n.repeat=fc,n.replace=_c,n.result=$s,n.round=ff,n.runInContext=t,n.sample=vu,n.size=Lu,n.snakeCase=$h,n.some=ku,n.sortedIndex=Eo,n.sortedIndexBy=So,n.sortedIndexOf=Fo,n.sortedLastIndex=Co,n.sortedLastIndexBy=jo,n.sortedLastIndexOf=Ho,n.startCase=Vh,n.startsWith=mc,n.subtract=_f,n.sum=tl,n.sumBy=el,n.template=yc,n.times=Uc,n.toFinite=bs,n.toInteger=Ls,n.toLength=ks,n.toLower=gc,n.toNumber=ws,n.toSafeInteger=xs,n.toString=Ys,n.toUpper=vc,n.trim=Mc,n.trimEnd=bc,n.trimStart=Lc,n.truncate=kc,n.unescape=wc,n.uniqueId=Vc,n.upperCase=Gh,n.upperFirst=Jh,n.each=du,n.eachRight=hu,n.first=yo,jc(n,function(){var t={};return fr(n,function(e,r){ml.call(n.prototype,r)||(t[r]=e)}),t}(),{chain:!1}),n.VERSION="4.17.4",u(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){n[t].placeholder=n}),u(["drop","take"],function(t,e){J.prototype[t]=function(n){n=n===nt?1:Ul(Ls(n),0);var r=this.__filtered__&&!e?new J(this):this.clone();return r.__filtered__?r.__takeCount__=$l(n,r.__takeCount__):r.__views__.push({size:$l(n,jt),type:t+(r.__dir__<0?"Right":"")}),r},J.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),u(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==Tt||3==n;J.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:ba(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),u(["head","last"],function(t,e){var n="take"+(e?"Right":"");J.prototype[t]=function(){return this[n](1).value()[0]}}),u(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");J.prototype[t]=function(){return this.__filtered__?new J(this):this[n](1)}}),J.prototype.compact=function(){return this.filter(Ec)},J.prototype.find=function(t){return this.filter(t).head()},J.prototype.findLast=function(t){return this.reverse().find(t)},J.prototype.invokeMap=ni(function(t,e){return"function"==typeof t?new J(this):this.map(function(n){return Dr(n,t,e)})}),J.prototype.reject=function(t){return this.filter(Fu(ba(t)))},J.prototype.slice=function(t,e){t=Ls(t);var n=this;return n.__filtered__&&(t>0||e<0)?new J(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==nt&&(e=Ls(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},J.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},J.prototype.toArray=function(){return this.take(jt)},fr(J.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),a=n[i?"take"+("last"==e?"Right":""):e],o=i||/^find/.test(e);a&&(n.prototype[e]=function(){var e=this.__wrapped__,u=i?[1]:arguments,s=e instanceof J,c=u[0],l=s||mh(e),d=function(t){var e=a.apply(n,_([t],u));return i&&h?e[0]:e};l&&r&&"function"==typeof c&&1!=c.length&&(s=l=!1);var h=this.__chain__,f=!!this.__actions__.length,p=o&&!h,m=s&&!f;if(!o&&l){e=m?e:new J(this);var y=t.apply(e,u);return y.__actions__.push({func:Xo,args:[d],thisArg:nt}),new Y(y,h)}return p&&m?t.apply(this,u):(y=this.thru(d),p?i?y.value()[0]:y.value():y)})}),u(["pop","push","shift","sort","splice","unshift"],function(t){var e=dl[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",i=/^(?:pop|shift)$/.test(t);n.prototype[t]=function(){var t=arguments;if(i&&!this.__chain__){var n=this.value();return e.apply(mh(n)?n:[],t)}return this[r](function(n){return e.apply(mh(n)?n:[],t)})}}),fr(J.prototype,function(t,e){var r=n[e];if(r){var i=r.name+"";(id[i]||(id[i]=[])).push({name:e,func:r})}}),id[Xi(nt,pt).name]=[{name:"wrapper",func:nt}],J.prototype.clone=Q,J.prototype.reverse=tt,J.prototype.value=Ne,n.prototype.at=Jd,n.prototype.chain=Qo,n.prototype.commit=tu,n.prototype.next=eu,n.prototype.plant=ru,n.prototype.reverse=iu,n.prototype.toJSON=n.prototype.valueOf=n.prototype.value=au,n.prototype.first=n.prototype.head,Fl&&(n.prototype[Fl]=nu),n}();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Sn._=Vn,define(function(){return Vn})):Cn?((Cn.exports=Vn)._=Vn,Fn._=Vn):Sn._=Vn}).call(this)}).call(e,n(9),n(4)(t))},function(t,e,n){"use strict";function r(t){function e(r){var i=t.node(r);if(a.has(n,r))return i.rank;n[r]=!0;var o=a.min(a.map(t.outEdges(r),function(n){return e(n.w)-t.edge(n).minlen}));return o===Number.POSITIVE_INFINITY&&(o=0),i.rank=o}var n={};a.each(t.sources(),e)}function i(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}var a=n(1);t.exports={longestPath:r,slack:i}},function(t,e,n){"use strict";function r(t){this._isDirected=!c.has(t,"directed")||t.directed,this._isMultigraph=!!c.has(t,"multigraph")&&t.multigraph,this._isCompound=!!c.has(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=c.constant(void 0),this._defaultEdgeLabelFn=c.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[d]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function i(t,e){t[e]?t[e]++:t[e]=1}function a(t,e){--t[e]||delete t[e]}function o(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var o=i;i=a,a=o}return i+h+a+h+(c.isUndefined(r)?l:r)}function u(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var o=i;i=a,a=o}var u={v:i,w:a};return r&&(u.name=r),u}function s(t,e){return o(t,e.v,e.w,e.name)}var c=n(5);t.exports=r;var l="\0",d="\0",h="";r.prototype._nodeCount=0,r.prototype._edgeCount=0,r.prototype.isDirected=function(){return this._isDirected},r.prototype.isMultigraph=function(){return this._isMultigraph},r.prototype.isCompound=function(){return this._isCompound},r.prototype.setGraph=function(t){return this._label=t,this},r.prototype.graph=function(){return this._label},r.prototype.setDefaultNodeLabel=function(t){return c.isFunction(t)||(t=c.constant(t)),this._defaultNodeLabelFn=t,this},r.prototype.nodeCount=function(){return this._nodeCount},r.prototype.nodes=function(){return c.keys(this._nodes)},r.prototype.sources=function(){return c.filter(this.nodes(),c.bind(function(t){return c.isEmpty(this._in[t])},this))},r.prototype.sinks=function(){return c.filter(this.nodes(),c.bind(function(t){return c.isEmpty(this._out[t])},this))},r.prototype.setNodes=function(t,e){var n=arguments;return c.each(t,c.bind(function(t){n.length>1?this.setNode(t,e):this.setNode(t)},this)),this},r.prototype.setNode=function(t,e){return c.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]=d,this._children[t]={},this._children[d][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},r.prototype.node=function(t){return this._nodes[t]},r.prototype.hasNode=function(t){return c.has(this._nodes,t)},r.prototype.removeNode=function(t){var e=this;if(c.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],c.each(this.children(t),c.bind(function(t){this.setParent(t)},this)),delete this._children[t]),c.each(c.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],c.each(c.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},r.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(c.isUndefined(e))e=d;else{e+="";for(var n=e;!c.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},r.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},r.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if(e!==d)return e}},r.prototype.children=function(t){if(c.isUndefined(t)&&(t=d),this._isCompound){var e=this._children[t];if(e)return c.keys(e)}else{if(t===d)return this.nodes();if(this.hasNode(t))return[]}},r.prototype.predecessors=function(t){var e=this._preds[t];if(e)return c.keys(e)},r.prototype.successors=function(t){var e=this._sucs[t];if(e)return c.keys(e)},r.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return c.union(e,this.successors(t))},r.prototype.filterNodes=function(t){function e(t){var a=r.parent(t);return void 0===a||n.hasNode(a)?(i[t]=a,a):a in i?i[a]:e(a)}var n=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});n.setGraph(this.graph()),c.each(this._nodes,c.bind(function(e,r){t(r)&&n.setNode(r,e)},this)),c.each(this._edgeObjs,c.bind(function(t){n.hasNode(t.v)&&n.hasNode(t.w)&&n.setEdge(t,this.edge(t))},this));var r=this,i={};return this._isCompound&&c.each(n.nodes(),function(t){n.setParent(t,e(t))}),n},r.prototype.setDefaultEdgeLabel=function(t){return c.isFunction(t)||(t=c.constant(t)),this._defaultEdgeLabelFn=t,this},r.prototype.edgeCount=function(){return this._edgeCount},r.prototype.edges=function(){return c.values(this._edgeObjs)},r.prototype.setPath=function(t,e){var n=this,r=arguments;return c.reduce(t,function(t,i){return r.length>1?n.setEdge(t,i,e):n.setEdge(t,i),i}),this},r.prototype.setEdge=function(){var t,e,n,r,a=!1,s=arguments[0];"object"==typeof s&&null!==s&&"v"in s?(t=s.v,e=s.w,n=s.name,2===arguments.length&&(r=arguments[1],a=!0)):(t=s,e=arguments[1],n=arguments[3],arguments.length>2&&(r=arguments[2],a=!0)),t=""+t,e=""+e,c.isUndefined(n)||(n=""+n);var l=o(this._isDirected,t,e,n);if(c.has(this._edgeLabels,l))return a&&(this._edgeLabels[l]=r),this;if(!c.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[l]=a?r:this._defaultEdgeLabelFn(t,e,n);var d=u(this._isDirected,t,e,n);return t=d.v,e=d.w,Object.freeze(d),this._edgeObjs[l]=d,i(this._preds[e],t),i(this._sucs[t],e),this._in[e][l]=d,this._out[t][l]=d,this._edgeCount++,this},r.prototype.edge=function(t,e,n){var r=1===arguments.length?s(this._isDirected,arguments[0]):o(this._isDirected,t,e,n);return this._edgeLabels[r]},r.prototype.hasEdge=function(t,e,n){var r=1===arguments.length?s(this._isDirected,arguments[0]):o(this._isDirected,t,e,n);return c.has(this._edgeLabels,r)},r.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?s(this._isDirected,arguments[0]):o(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],a(this._preds[e],t),a(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},r.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var r=c.values(n);return e?c.filter(r,function(t){return t.v===e}):r}},r.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var r=c.values(n);return e?c.filter(r,function(t){return t.w===e}):r}},r.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},function(t,e,n){"use strict";function r(t){this._isDirected=!c.has(t,"directed")||t.directed,this._isMultigraph=!!c.has(t,"multigraph")&&t.multigraph,this._isCompound=!!c.has(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=c.constant(void 0),this._defaultEdgeLabelFn=c.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children[d]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function i(t,e){t[e]?t[e]++:t[e]=1}function a(t,e){--t[e]||delete t[e]}function o(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var o=i;i=a,a=o}return i+h+a+h+(c.isUndefined(r)?l:r)}function u(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var o=i;i=a,a=o}var u={v:i,w:a};return r&&(u.name=r),u}function s(t,e){return o(t,e.v,e.w,e.name)}var c=n(6);t.exports=r;var l="\0",d="\0",h="";r.prototype._nodeCount=0,r.prototype._edgeCount=0,r.prototype.isDirected=function(){return this._isDirected},r.prototype.isMultigraph=function(){return this._isMultigraph},r.prototype.isCompound=function(){return this._isCompound},r.prototype.setGraph=function(t){return this._label=t,this},r.prototype.graph=function(){return this._label},r.prototype.setDefaultNodeLabel=function(t){return c.isFunction(t)||(t=c.constant(t)),this._defaultNodeLabelFn=t,this},r.prototype.nodeCount=function(){return this._nodeCount},r.prototype.nodes=function(){return c.keys(this._nodes)},r.prototype.sources=function(){return c.filter(this.nodes(),function(t){return c.isEmpty(this._in[t])},this)},r.prototype.sinks=function(){return c.filter(this.nodes(),function(t){return c.isEmpty(this._out[t])},this)},r.prototype.setNodes=function(t,e){var n=arguments;return c.each(t,function(t){n.length>1?this.setNode(t,e):this.setNode(t)},this),this},r.prototype.setNode=function(t,e){return c.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]=d,this._children[t]={},this._children[d][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},r.prototype.node=function(t){return this._nodes[t]},r.prototype.hasNode=function(t){return c.has(this._nodes,t)},r.prototype.removeNode=function(t){var e=this;if(c.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],c.each(this.children(t),function(t){this.setParent(t)},this),delete this._children[t]),c.each(c.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],c.each(c.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},r.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(c.isUndefined(e))e=d;else{e+="";for(var n=e;!c.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},r.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},r.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if(e!==d)return e}},r.prototype.children=function(t){if(c.isUndefined(t)&&(t=d),this._isCompound){var e=this._children[t];if(e)return c.keys(e)}else{if(t===d)return this.nodes();if(this.hasNode(t))return[]}},r.prototype.predecessors=function(t){var e=this._preds[t];if(e)return c.keys(e)},r.prototype.successors=function(t){var e=this._sucs[t];if(e)return c.keys(e)},r.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return c.union(e,this.successors(t))},r.prototype.filterNodes=function(t){function e(t){var a=r.parent(t);return void 0===a||n.hasNode(a)?(i[t]=a,a):a in i?i[a]:e(a)}var n=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});n.setGraph(this.graph()),c.each(this._nodes,function(e,r){t(r)&&n.setNode(r,e)},this),c.each(this._edgeObjs,function(t){n.hasNode(t.v)&&n.hasNode(t.w)&&n.setEdge(t,this.edge(t))},this);var r=this,i={};return this._isCompound&&c.each(n.nodes(),function(t){n.setParent(t,e(t))}),n},r.prototype.setDefaultEdgeLabel=function(t){return c.isFunction(t)||(t=c.constant(t)),this._defaultEdgeLabelFn=t,this},r.prototype.edgeCount=function(){return this._edgeCount},r.prototype.edges=function(){return c.values(this._edgeObjs)},r.prototype.setPath=function(t,e){var n=this,r=arguments;return c.reduce(t,function(t,i){return r.length>1?n.setEdge(t,i,e):n.setEdge(t,i),i}),this},r.prototype.setEdge=function(){var t,e,n,r,a=!1,s=arguments[0];"object"==typeof s&&null!==s&&"v"in s?(t=s.v,e=s.w,n=s.name,2===arguments.length&&(r=arguments[1],a=!0)):(t=s,e=arguments[1],n=arguments[3],arguments.length>2&&(r=arguments[2],a=!0)),t=""+t,e=""+e,c.isUndefined(n)||(n=""+n);var l=o(this._isDirected,t,e,n);if(c.has(this._edgeLabels,l))return a&&(this._edgeLabels[l]=r),this;if(!c.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[l]=a?r:this._defaultEdgeLabelFn(t,e,n);var d=u(this._isDirected,t,e,n);return t=d.v,e=d.w,Object.freeze(d),this._edgeObjs[l]=d,i(this._preds[e],t),i(this._sucs[t],e),this._in[e][l]=d,this._out[t][l]=d,this._edgeCount++,this},r.prototype.edge=function(t,e,n){var r=1===arguments.length?s(this._isDirected,arguments[0]):o(this._isDirected,t,e,n);return this._edgeLabels[r]},r.prototype.hasEdge=function(t,e,n){var r=1===arguments.length?s(this._isDirected,arguments[0]):o(this._isDirected,t,e,n);return c.has(this._edgeLabels,r)},r.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?s(this._isDirected,arguments[0]):o(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],a(this._preds[e],t),a(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},r.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var r=c.values(n);return e?c.filter(r,function(t){return t.v===e}):r}},r.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var r=c.values(n);return e?c.filter(r,function(t){return t.w===e}):r}},r.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},function(t,e){function n(t,e,n,r){var i=t.x,a=t.y,o=i-r.x,u=a-r.y,s=Math.sqrt(e*e*u*u+n*n*o*o),c=Math.abs(e*n*o/s);r.x<i&&(c=-c);var l=Math.abs(e*n*u/s);return r.y<a&&(l=-l),{x:i+c,y:a+l}}t.exports=n},function(t,e,n){function r(t,e,n){var r=e.label,u=t.append("g");"svg"===e.labelType?o(u,e):"string"!=typeof r||"html"===e.labelType?a(u,e):i(u,e);var s,c=u.node().getBBox();switch(n){case"top":s=-e.height/2;break;case"bottom":s=e.height/2-c.height;break;default:s=-c.height/2}return u.attr("transform","translate("+-c.width/2+","+s+")"),u}var i=n(231),a=n(232),o=n(233);t.exports=r},function(t,e,n){(function(t){var r,i="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},a=n(2),o=a.Log,u=n(23),s=n(10),c={},l=[],d=[],h=[],f={},_=0,p=[];e.addVertex=function(t,e,n,r){var i;void 0!==t&&0!==t.trim().length&&(void 0===c[t]&&(c[t]={id:t,styles:[],classes:[]}),void 0!==e&&(i=e.trim(),'"'===i[0]&&'"'===i[i.length-1]&&(i=i.substring(1,i.length-1)),c[t].text=i),void 0!==n&&(c[t].type=n),void 0!==n&&(c[t].type=n),void 0!==r&&null!==r&&r.forEach(function(e){c[t].styles.push(e)}))},e.addLink=function(t,e,n,r){o.info("Got edge...",t,e);var i={start:t,end:e,type:void 0,text:""};r=n.text,void 0!==r&&(i.text=r.trim(),'"'===i.text[0]&&'"'===i.text[i.text.length-1]&&(i.text=i.text.substring(1,i.text.length-1))),void 0!==n&&(i.type=n.type,i.stroke=n.stroke),l.push(i)},e.updateLinkInterpolate=function(t,e){"default"===t?l.defaultInterpolate=e:l[t].interpolate=e},e.updateLink=function(t,e){"default"===t?l.defaultStyle=e:(-1===u.isSubstringInArray("fill",e)&&e.push("fill:none"),l[t].style=e)},e.addClass=function(t,e){void 0===d[t]&&(d[t]={id:t,styles:[]}),void 0!==e&&null!==e&&e.forEach(function(e){d[t].styles.push(e)})},e.setDirection=function(t){r=t},e.setClass=function(t,e){t.indexOf(",")>0?t.split(",").forEach(function(t){void 0!==c[t]&&c[t].classes.push(e)}):void 0!==c[t]&&c[t].classes.push(e)};var m=function(t,e){void 0!==e&&(f[t]=e)},y=function(t,e){void 0!==e&&void 0!==c[t]&&p.push(function(n){var r=s.select(n).select("#"+t);null!==r&&r.on("click",function(){window[e](t)})})},g=function(t,e){void 0!==e&&void 0!==c[t]&&p.push(function(n){var r=s.select(n).select("#"+t);null!==r&&r.on("click",function(){window.open(e,"newTab")})})};e.getTooltip=function(t){return f[t]},e.setClickEvent=function(t,e,n,r){t.indexOf(",")>0?t.split(",").forEach(function(t){m(t,r),y(t,e),g(t,n)}):(m(t,r),y(t,e),g(t,n))},e.bindFunctions=function(t){p.forEach(function(e){e(t)})},e.getDirection=function(){return r},e.getVertices=function(){return c},e.getEdges=function(){return l},e.getClasses=function(){return d};var v=function(t){var e=s.select(".mermaidTooltip");null===e[0][0]&&(e=s.select("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),s.select(t).select("svg").selectAll("g.node").on("mouseover",function(){var t=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",n.left+(n.right-n.left)/2+"px").style("top",n.top-14+document.body.scrollTop+"px"),t.classed("hover",!0)}}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),s.select(this).classed("hover",!1)})};p.push(v),e.clear=function(){c={},d={},l=[],p=[],p.push(v),h=[],_=0,f=[]},e.defaultStyle=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},e.addSubGraph=function(t,e){var n=[];n=function(t){var e={boolean:{},number:{},string:{}},n=[];return t.filter(function(t){var r=void 0===t?"undefined":i(t);return" "!==t&&(r in e?!e[r].hasOwnProperty(t)&&(e[r][t]=!0):!(n.indexOf(t)>=0)&&n.push(t))})}(n.concat.apply(n,t));var r={id:"subGraph"+_,nodes:n,title:e};return h.push(r),_+=1,r.id};var M=function(t){var e;for(e=0;e<h.length;e++)if(h[e].id===t)return e;return-1},b=-1,L=[],k=function t(e,n){var r=h[n].nodes;if(!((b+=1)>2e3)){if(L[b]=n,h[n].id===e)return{result:!0,count:0};for(var i=0,a=1;i<r.length;){var o=M(r[i]);if(o>=0){var u=t(e,o);if(u.result)return{result:!0,count:a+u.count};a+=u.count}i+=1}return{result:!1,count:a}}};e.getDepthFirstPos=function(t){return L[t]},e.indexNodes=function(){b=-1,h.length>0&&k("none",h.length-1)},e.getSubGraphs=function(){return h},e.parseError=function(e,n){t.mermaidAPI.parseError(e,n)}}).call(e,n(9))},function(t,e,n){var r=n(2),i=r.Log,a=function(t){return t=t.replace(/^\s*%%.*\n/g,"\n"),t.match(/^\s*sequenceDiagram/)?"sequenceDiagram":t.match(/^\s*digraph/)?"dotGraph":t.match(/^\s*info/)?"info":t.match(/^\s*gantt/)?"gantt":t.match(/^\s*classDiagram/)?(i.debug("Detected classDiagram syntax"),"classDiagram"):t.match(/^\s*gitGraph/)?(i.debug("Detected gitGraph syntax"),"gitGraph"):"graph"};e.detectType=a;var o=function(t,e){for(var n,r="",a=document.styleSheets,o=0;o<a.length;o++)if("mermaid-svg-internal-css"!==a[o].title)try{var u=a[o].cssRules;if(null!==u)for(var s=0;s<u.length;s++)if(n=u[s],void 0!==n.style){var c;c=t.querySelectorAll(n.selectorText),c.length>0&&(r+=n.selectorText+" { "+n.style.cssText+"}\n")}}catch(t){void 0!==n&&i.warn('Invalid CSS selector "'+n.selectorText+'"',t)}var l="",d="";for(var h in e)e.hasOwnProperty(h)&&void 0!==h&&("default"===h?(e.default.styles instanceof Array&&(l+="#"+t.id.trim()+" .node>rect { "+e[h].styles.join("; ")+"; }\n"),e.default.nodeLabelStyles instanceof Array&&(l+="#"+t.id.trim()+" .node text { "+e[h].nodeLabelStyles.join("; ")+"; }\n"),e.default.edgeLabelStyles instanceof Array&&(l+="#"+t.id.trim()+" .edgeLabel text { "+e[h].edgeLabelStyles.join("; ")+"; }\n"),e.default.clusterStyles instanceof Array&&(l+="#"+t.id.trim()+" .cluster rect { "+e[h].clusterStyles.join("; ")+"; }\n")):e[h].styles instanceof Array&&(d+="#"+t.id.trim()+" ."+h+">rect, ."+h+">polygon, ."+h+">circle, ."+h+">ellipse { "+e[h].styles.join("; ")+"; }\n"));if(""!==r||""!==l||""!==d){var f=document.createElement("style");f.setAttribute("type","text/css"),f.setAttribute("title","mermaid-svg-internal-css"),f.innerHTML="/* <![CDATA[ */\n",""!==l&&(f.innerHTML+=l),""!==r&&(f.innerHTML+=r),""!==d&&(f.innerHTML+=d),f.innerHTML+="/* ]]> */\n",t.insertBefore(f,t.firstChild)}};e.cloneCssStyles=o;var u=function(t,e){for(var n=0;n<e.length;n++)if(e[n].match(t))return n;return-1};e.isSubstringInArray=u},function(t,e,n){var r,i;!function(){function a(t){return t&&(t.ownerDocument||t.document||t).documentElement}function o(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}function u(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function s(t){return null===t?NaN:+t}function c(t){return!isNaN(t)}function l(t){return{left:function(e,n,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=e.length);r<i;){var a=r+i>>>1;t(e[a],n)<0?r=a+1:i=a}return r},right:function(e,n,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=e.length);r<i;){var a=r+i>>>1;t(e[a],n)>0?i=a:r=a+1}return r}}}function d(t){return t.length}function h(t){for(var e=1;t*e%1;)e*=10;return e}function f(t,e){for(var n in e)Object.defineProperty(t.prototype,n,{value:e[n],enumerable:!1})}function _(){this._=Object.create(null)}function p(t){return(t+="")===wo||t[0]===Do?Do+t:t}function m(t){return(t+="")[0]===Do?t.slice(1):t}function y(t){return p(t)in this._}function g(t){return(t=p(t))in this._&&delete this._[t]}function v(){var t=[];for(var e in this._)t.push(m(e));return t}function M(){var t=0;for(var e in this._)++t;return t}function b(){for(var t in this._)return!1;return!0}function L(){this._=Object.create(null)}function k(t){return t}function w(t,e,n){return function(){var r=n.apply(e,arguments);return r===e?t:r}}function D(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var n=0,r=xo.length;n<r;++n){var i=xo[n]+e;if(i in t)return i}}function x(){}function Y(){}function T(t){function e(){for(var e,r=n,i=-1,a=r.length;++i<a;)(e=r[i].on)&&e.apply(this,arguments);return t}var n=[],r=new _;return e.on=function(e,i){var a,o=r.get(e);return arguments.length<2?o&&o.on:(o&&(o.on=null,n=n.slice(0,a=n.indexOf(o)).concat(n.slice(a+1)),r.remove(e)),i&&n.push(r.set(e,{on:i})),t)},e}function A(){fo.event.preventDefault()}function E(){for(var t,e=fo.event;t=e.sourceEvent;)e=t;return e}function S(t){for(var e=new Y,n=0,r=arguments.length;++n<r;)e[arguments[n]]=T(e);return e.of=function(n,r){return function(i){try{var a=i.sourceEvent=fo.event;i.target=t,fo.event=i,e[i.type].apply(n,r)}finally{fo.event=a}}},e}function F(t){return To(t,Fo),t}function C(t){return"function"==typeof t?t:function(){return Ao(t,this)}}function j(t){return"function"==typeof t?t:function(){return Eo(t,this)}}function H(t,e){function n(){this.removeAttribute(t)}function r(){this.removeAttributeNS(t.space,t.local)}function i(){this.setAttribute(t,e)}function a(){this.setAttributeNS(t.space,t.local,e)}function o(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}function u(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}return t=fo.ns.qualify(t),null==e?t.local?r:n:"function"==typeof e?t.local?u:o:t.local?a:i}function O(t){return t.trim().replace(/\s+/g," ")}function P(t){return new RegExp("(?:^|\\s+)"+fo.requote(t)+"(?:\\s+|$)","g")}function N(t){return(t+"").trim().split(/^|\s+/)}function B(t,e){function n(){for(var n=-1;++n<i;)t[n](this,e)}function r(){for(var n=-1,r=e.apply(this,arguments);++n<i;)t[n](this,r)}t=N(t).map(I);var i=t.length;return"function"==typeof e?r:n}function I(t){var e=P(t);return function(n,r){if(i=n.classList)return r?i.add(t):i.remove(t);var i=n.getAttribute("class")||"";r?(e.lastIndex=0,e.test(i)||n.setAttribute("class",O(i+" "+t))):n.setAttribute("class",O(i.replace(e," ")))}}function R(t,e,n){function r(){this.style.removeProperty(t)}function i(){this.style.setProperty(t,e,n)}function a(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}return null==e?r:"function"==typeof e?a:i}function W(t,e){function n(){delete this[t]}function r(){this[t]=e}function i(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}return null==e?n:"function"==typeof e?i:r}function z(t){function e(){var e=this.ownerDocument,n=this.namespaceURI;return n===Co&&e.documentElement.namespaceURI===Co?e.createElement(t):e.createElementNS(n,t)}function n(){return this.ownerDocument.createElementNS(t.space,t.local)}return"function"==typeof t?t:(t=fo.ns.qualify(t)).local?n:e}function q(){var t=this.parentNode;t&&t.removeChild(this)}function U(t){return{__data__:t}}function $(t){return function(){return So(this,t)}}function V(t){return arguments.length||(t=u),function(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}}function G(t,e){for(var n=0,r=t.length;n<r;n++)for(var i,a=t[n],o=0,u=a.length;o<u;o++)(i=a[o])&&e(i,o,n);return t}function J(t){return To(t,Ho),t}function Z(t){var e,n;return function(r,i,a){var o,u=t[a].update,s=u.length;for(a!=n&&(n=a,e=0),i>=e&&(e=i+1);!(o=u[e])&&++e<s;);return o}}function K(t,e,n){function r(){var e=this[o];e&&(this.removeEventListener(t,e,e.$),delete this[o])}function i(){var i=s(e,po(arguments));r.call(this),this.addEventListener(t,this[o]=i,i.$=n),i._=e}function a(){var e,n=new RegExp("^__on([^.]+)"+fo.requote(t)+"$");for(var r in this)if(e=r.match(n)){var i=this[r];this.removeEventListener(e[1],i,i.$),delete this[r]}}var o="__on"+t,u=t.indexOf("."),s=X;u>0&&(t=t.slice(0,u));var c=Oo.get(t);return c&&(t=c,s=Q),u?e?i:r:e?x:a}function X(t,e){return function(n){var r=fo.event;fo.event=n,e[0]=this.__data__;try{t.apply(this,e)}finally{fo.event=r}}}function Q(t,e){var n=X(t,e);return function(t){var e=this,r=t.relatedTarget;r&&(r===e||8&r.compareDocumentPosition(e))||n.call(e,t)}}function tt(t){var e=".dragsuppress-"+ ++No,n="click"+e,r=fo.select(o(t)).on("touchmove"+e,A).on("dragstart"+e,A).on("selectstart"+e,A);if(null==Po&&(Po=!("onselectstart"in t)&&D(t.style,"userSelect")),Po){var i=a(t).style,u=i[Po];i[Po]="none"}return function(t){if(r.on(e,null),Po&&(i[Po]=u),t){var a=function(){r.on(n,null)};r.on(n,function(){A(),a()},!0),setTimeout(a,0)}}}function et(t,e){e.changedTouches&&(e=e.changedTouches[0]);var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();if(Bo<0){var i=o(t);if(i.scrollX||i.scrollY){n=fo.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var a=n[0][0].getScreenCTM();Bo=!(a.f||a.e),n.remove()}}return Bo?(r.x=e.pageX,r.y=e.pageY):(r.x=e.clientX,r.y=e.clientY),r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}var u=t.getBoundingClientRect();return[e.clientX-u.left-t.clientLeft,e.clientY-u.top-t.clientTop]}function nt(){return fo.event.changedTouches[0].identifier}function rt(t){return t>0?1:t<0?-1:0}function it(t,e,n){return(e[0]-t[0])*(n[1]-t[1])-(e[1]-t[1])*(n[0]-t[0])}function at(t){return t>1?0:t<-1?Wo:Math.acos(t)}function ot(t){return t>1?Uo:t<-1?-Uo:Math.asin(t)}function ut(t){return((t=Math.exp(t))-1/t)/2}function st(t){return((t=Math.exp(t))+1/t)/2}function ct(t){return((t=Math.exp(2*t))-1)/(t+1)}function lt(t){return(t=Math.sin(t/2))*t}function dt(){}function ht(t,e,n){return this instanceof ht?(this.h=+t,this.s=+e,void(this.l=+n)):arguments.length<2?t instanceof ht?new ht(t.h,t.s,t.l):xt(""+t,Yt,ht):new ht(t,e,n)}function ft(t,e,n){function r(t){return t>360?t-=360:t<0&&(t+=360),t<60?a+(o-a)*t/60:t<180?o:t<240?a+(o-a)*(240-t)/60:a}function i(t){return Math.round(255*r(t))}var a,o;return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)?0:e<0?0:e>1?1:e,n=n<0?0:n>1?1:n,o=n<=.5?n*(1+e):n+e-n*e,a=2*n-o,new Lt(i(t+120),i(t),i(t-120))}function _t(t,e,n){return this instanceof _t?(this.h=+t,this.c=+e,void(this.l=+n)):arguments.length<2?t instanceof _t?new _t(t.h,t.c,t.l):t instanceof mt?gt(t.l,t.a,t.b):gt((t=Tt((t=fo.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new _t(t,e,n)}function pt(t,e,n){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new mt(n,Math.cos(t*=$o)*e,Math.sin(t)*e)}function mt(t,e,n){return this instanceof mt?(this.l=+t,this.a=+e,void(this.b=+n)):arguments.length<2?t instanceof mt?new mt(t.l,t.a,t.b):t instanceof _t?pt(t.h,t.c,t.l):Tt((t=Lt(t)).r,t.g,t.b):new mt(t,e,n)}function yt(t,e,n){var r=(t+16)/116,i=r+e/500,a=r-n/200;return i=vt(i)*eu,r=vt(r)*nu,a=vt(a)*ru,new Lt(bt(3.2404542*i-1.5371385*r-.4985314*a),bt(-.969266*i+1.8760108*r+.041556*a),bt(.0556434*i-.2040259*r+1.0572252*a))}function gt(t,e,n){return t>0?new _t(Math.atan2(n,e)*Vo,Math.sqrt(e*e+n*n),t):new _t(NaN,NaN,t)}function vt(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function Mt(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function bt(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function Lt(t,e,n){return this instanceof Lt?(this.r=~~t,this.g=~~e,void(this.b=~~n)):arguments.length<2?t instanceof Lt?new Lt(t.r,t.g,t.b):xt(""+t,Lt,ft):new Lt(t,e,n)}function kt(t){return new Lt(t>>16,t>>8&255,255&t)}function wt(t){return kt(t)+""}function Dt(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function xt(t,e,n){var r,i,a,o=0,u=0,s=0;if(r=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return n(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return e(Et(i[0]),Et(i[1]),Et(i[2]))}return(a=ou.get(t))?e(a.r,a.g,a.b):(null==t||"#"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&a)>>4,o|=o>>4,u=240&a,u|=u>>4,s=15&a,s|=s<<4):7===t.length&&(o=(16711680&a)>>16,u=(65280&a)>>8,s=255&a)),e(o,u,s))}function Yt(t,e,n){var r,i,a=Math.min(t/=255,e/=255,n/=255),o=Math.max(t,e,n),u=o-a,s=(o+a)/2;return u?(i=s<.5?u/(o+a):u/(2-o-a),r=t==o?(e-n)/u+(e<n?6:0):e==o?(n-t)/u+2:(t-e)/u+4,r*=60):(r=NaN,i=s>0&&s<1?0:r),new ht(r,i,s)}function Tt(t,e,n){t=At(t),e=At(e),n=At(n);var r=Mt((.4124564*t+.3575761*e+.1804375*n)/eu),i=Mt((.2126729*t+.7151522*e+.072175*n)/nu);return mt(116*i-16,500*(r-i),200*(i-Mt((.0193339*t+.119192*e+.9503041*n)/ru)))}function At(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Et(t){var e=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*e):e}function St(t){return"function"==typeof t?t:function(){return t}}function Ft(t){return function(e,n,r){return 2===arguments.length&&"function"==typeof n&&(r=n,n=null),Ct(e,n,t,r)}}function Ct(t,e,n,r){function i(){var t,e=s.status;if(!e&&Ht(s)||e>=200&&e<300||304===e){try{t=n.call(a,s)}catch(t){return void o.error.call(a,t)}o.load.call(a,t)}else o.error.call(a,s)}var a={},o=fo.dispatch("beforesend","progress","load","error"),u={},s=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in s||!/^(http(s)?:)?\/\//.test(t)||(s=new XDomainRequest),"onload"in s?s.onload=s.onerror=i:s.onreadystatechange=function(){s.readyState>3&&i()},s.onprogress=function(t){var e=fo.event;fo.event=t;try{o.progress.call(a,s)}finally{fo.event=e}},a.header=function(t,e){return t=(t+"").toLowerCase(),arguments.length<2?u[t]:(null==e?delete u[t]:u[t]=e+"",a)},a.mimeType=function(t){return arguments.length?(e=null==t?null:t+"",a):e},a.responseType=function(t){return arguments.length?(c=t,a):c},a.response=function(t){return n=t,a},["get","post"].forEach(function(t){a[t]=function(){return a.send.apply(a,[t].concat(po(arguments)))}}),a.send=function(n,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),s.open(n,t,!0),null==e||"accept"in u||(u.accept=e+",*/*"),s.setRequestHeader)for(var l in u)s.setRequestHeader(l,u[l]);return null!=e&&s.overrideMimeType&&s.overrideMimeType(e),null!=c&&(s.responseType=c),null!=i&&a.on("error",i).on("load",function(t){i(null,t)}),o.beforesend.call(a,s),s.send(null==r?null:r),a},a.abort=function(){return s.abort(),a},fo.rebind(a,o,"on"),null==r?a:a.get(jt(r))}function jt(t){return 1===t.length?function(e,n){t(null==e?n:null)}:t}function Ht(t){var e=t.responseType;return e&&"text"!==e?t.response:t.responseText}function Ot(t,e,n){var r=arguments.length;r<2&&(e=0),r<3&&(n=Date.now());var i=n+e,a={c:t,t:i,n:null};return su?su.n=a:uu=a,su=a,cu||(lu=clearTimeout(lu),cu=1,du(Pt)),a}function Pt(){var t=Nt(),e=Bt()-t;e>24?(isFinite(e)&&(clearTimeout(lu),lu=setTimeout(Pt,e)),cu=0):(cu=1,du(Pt))}function Nt(){for(var t=Date.now(),e=uu;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function Bt(){for(var t,e=uu,n=1/0;e;)e.c?(e.t<n&&(n=e.t),e=(t=e).n):e=t?t.n=e.n:uu=e.n;return su=t,n}function It(t,e){return e-(t?Math.ceil(Math.log(t)/Math.LN10):1)}function Rt(t,e){var n=Math.pow(10,3*ko(8-e));return{scale:e>8?function(t){return t/n}:function(t){return t*n},symbol:t}}function Wt(t){var e=t.decimal,n=t.thousands,r=t.grouping,i=t.currency,a=r&&n?function(t,e){for(var i=t.length,a=[],o=0,u=r[0],s=0;i>0&&u>0&&(s+u+1>e&&(u=Math.max(1,e-s)),a.push(t.substring(i-=u,i+u)),!((s+=u+1)>e));)u=r[o=(o+1)%r.length];return a.reverse().join(n)}:k;return function(t){var n=fu.exec(t),r=n[1]||" ",o=n[2]||">",u=n[3]||"-",s=n[4]||"",c=n[5],l=+n[6],d=n[7],h=n[8],f=n[9],_=1,p="",m="",y=!1,g=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),f){case"n":d=!0,f="g";break;case"%":_=100,m="%",f="f";break;case"p":_=100,m="%",f="r";break;case"b":case"o":case"x":case"X":"#"===s&&(p="0"+f.toLowerCase());case"c":g=!1;case"d":y=!0,h=0;break;case"s":_=-1,f="r"}"$"===s&&(p=i[0],m=i[1]),"r"!=f||h||(f="g"),null!=h&&("g"==f?h=Math.max(1,Math.min(21,h)):"e"!=f&&"f"!=f||(h=Math.max(0,Math.min(20,h)))),f=_u.get(f)||zt;var v=c&&d;return function(t){var n=m;if(y&&t%1)return"";var i=t<0||0===t&&1/t<0?(t=-t,"-"):"-"===u?"":u;if(_<0){var s=fo.formatPrefix(t,h);t=s.scale(t),n=s.symbol+m}else t*=_;t=f(t,h);var M,b,L=t.lastIndexOf(".");if(L<0){var k=g?t.lastIndexOf("e"):-1;k<0?(M=t,b=""):(M=t.substring(0,k),b=t.substring(k))}else M=t.substring(0,L),b=e+t.substring(L+1);!c&&d&&(M=a(M,1/0));var w=p.length+M.length+b.length+(v?0:i.length),D=w<l?new Array(w=l-w+1).join(r):"";return v&&(M=a(D+M,D.length?l-b.length:1/0)),i+=p,t=M+b,("<"===o?i+t+D:">"===o?D+i+t:"^"===o?D.substring(0,w>>=1)+i+t+D.substring(w):i+(v?t:D+t))+n}}}function zt(t){return t+""}function qt(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Ut(t,e,n){function r(e){var n=t(e),r=a(n,1);return e-n<r-e?n:r}function i(n){return e(n=t(new mu(n-1)),1),n}function a(t,n){return e(t=new mu(+t),n),t}function o(t,r,a){var o=i(t),u=[];if(a>1)for(;o<r;)n(o)%a||u.push(new Date(+o)),e(o,1);else for(;o<r;)u.push(new Date(+o)),e(o,1);return u}function u(t,e,n){try{mu=qt;var r=new qt;return r._=t,o(r,e,n)}finally{mu=Date}}t.floor=t,t.round=r,t.ceil=i,t.offset=a,t.range=o;var s=t.utc=$t(t);return s.floor=s,s.round=$t(r),s.ceil=$t(i),s.offset=$t(a),s.range=u,t}function $t(t){return function(e,n){try{mu=qt;var r=new qt;return r._=e,t(r,n)._}finally{mu=Date}}}function Vt(t){function e(t){function e(e){for(var n,i,a,o=[],u=-1,s=0;++u<r;)37===t.charCodeAt(u)&&(o.push(t.slice(s,u)),null!=(i=gu[n=t.charAt(++u)])&&(n=t.charAt(++u)),(a=T[n])&&(n=a(e,null==i?"e"===n?" ":"0":i)),o.push(n),s=u+1);return o.push(t.slice(s,u)),o.join("")}var r=t.length;return e.parse=function(e){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null};if(n(r,t,e,0)!=e.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var i=null!=r.Z&&mu!==qt,a=new(i?qt:mu);return"j"in r?a.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),a.setFullYear(r.y,0,1),a.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(a.getDay()+5)%7:r.w+7*r.U-(a.getDay()+6)%7)):a.setFullYear(r.y,r.m,r.d),a.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),i?a._:a},e.toString=function(){return t},e}function n(t,e,n,r){for(var i,a,o,u=0,s=e.length,c=n.length;u<s;){if(r>=c)return-1;if(37===(i=e.charCodeAt(u++))){if(o=e.charAt(u++),!(a=A[o in gu?e.charAt(u++):o])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}function r(t,e,n){L.lastIndex=0;var r=L.exec(e.slice(n));return r?(t.w=k.get(r[0].toLowerCase()),n+r[0].length):-1}function i(t,e,n){M.lastIndex=0;var r=M.exec(e.slice(n));return r?(t.w=b.get(r[0].toLowerCase()),n+r[0].length):-1}function a(t,e,n){x.lastIndex=0;var r=x.exec(e.slice(n));return r?(t.m=Y.get(r[0].toLowerCase()),n+r[0].length):-1}function o(t,e,n){w.lastIndex=0;var r=w.exec(e.slice(n));return r?(t.m=D.get(r[0].toLowerCase()),n+r[0].length):-1}function u(t,e,r){return n(t,T.c.toString(),e,r)}function s(t,e,r){return n(t,T.x.toString(),e,r)}function c(t,e,r){return n(t,T.X.toString(),e,r)}function l(t,e,n){var r=v.get(e.slice(n,n+=2).toLowerCase());return null==r?-1:(t.p=r,n)}var d=t.dateTime,h=t.date,f=t.time,_=t.periods,p=t.days,m=t.shortDays,y=t.months,g=t.shortMonths;e.utc=function(t){function n(t){try{mu=qt;var e=new mu;return e._=t,r(e)}finally{mu=Date}}var r=e(t);return n.parse=function(t){try{mu=qt;var e=r.parse(t);return e&&e._}finally{mu=Date}},n.toString=r.toString,n},e.multi=e.utc.multi=fe;var v=fo.map(),M=Jt(p),b=Zt(p),L=Jt(m),k=Zt(m),w=Jt(y),D=Zt(y),x=Jt(g),Y=Zt(g);_.forEach(function(t,e){v.set(t.toLowerCase(),e)});var T={a:function(t){return m[t.getDay()]},A:function(t){return p[t.getDay()]},b:function(t){return g[t.getMonth()]},B:function(t){return y[t.getMonth()]},c:e(d),d:function(t,e){return Gt(t.getDate(),e,2)},e:function(t,e){return Gt(t.getDate(),e,2)},H:function(t,e){return Gt(t.getHours(),e,2)},I:function(t,e){return Gt(t.getHours()%12||12,e,2)},j:function(t,e){return Gt(1+pu.dayOfYear(t),e,3)},L:function(t,e){return Gt(t.getMilliseconds(),e,3)},m:function(t,e){return Gt(t.getMonth()+1,e,2)},M:function(t,e){return Gt(t.getMinutes(),e,2)},p:function(t){return _[+(t.getHours()>=12)]},S:function(t,e){return Gt(t.getSeconds(),e,2)},U:function(t,e){return Gt(pu.sundayOfYear(t),e,2)},w:function(t){return t.getDay()},W:function(t,e){return Gt(pu.mondayOfYear(t),e,2)},x:e(h),X:e(f),y:function(t,e){return Gt(t.getFullYear()%100,e,2)},Y:function(t,e){return Gt(t.getFullYear()%1e4,e,4)},Z:de,"%":function(){return"%"}},A={a:r,A:i,b:a,B:o,c:u,d:ae,e:ae,H:ue,I:ue,j:oe,L:le,m:ie,M:se,p:l,S:ce,U:Xt,w:Kt,W:Qt,x:s,X:c,y:ee,Y:te,Z:ne,"%":he};return e}function Gt(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a<n?new Array(n-a+1).join(e)+i:i)}function Jt(t){return new RegExp("^(?:"+t.map(fo.requote).join("|")+")","i")}function Zt(t){for(var e=new _,n=-1,r=t.length;++n<r;)e.set(t[n].toLowerCase(),n);return e}function Kt(t,e,n){vu.lastIndex=0;var r=vu.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Xt(t,e,n){vu.lastIndex=0;var r=vu.exec(e.slice(n));return r?(t.U=+r[0],n+r[0].length):-1}function Qt(t,e,n){vu.lastIndex=0;var r=vu.exec(e.slice(n));return r?(t.W=+r[0],n+r[0].length):-1}function te(t,e,n){vu.lastIndex=0;var r=vu.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function ee(t,e,n){vu.lastIndex=0;var r=vu.exec(e.slice(n,n+2));return r?(t.y=re(+r[0]),n+r[0].length):-1}function ne(t,e,n){return/^[+-]\d{4}$/.test(e=e.slice(n,n+5))?(t.Z=-e,n+5):-1}function re(t){return t+(t>68?1900:2e3)}function ie(t,e,n){vu.lastIndex=0;var r=vu.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function ae(t,e,n){vu.lastIndex=0;var r=vu.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function oe(t,e,n){vu.lastIndex=0;var r=vu.exec(e.slice(n,n+3));return r?(t.j=+r[0],n+r[0].length):-1}function ue(t,e,n){vu.lastIndex=0;var r=vu.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function se(t,e,n){vu.lastIndex=0;var r=vu.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function ce(t,e,n){vu.lastIndex=0;var r=vu.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function le(t,e,n){vu.lastIndex=0;var r=vu.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function de(t){var e=t.getTimezoneOffset(),n=e>0?"-":"+",r=ko(e)/60|0,i=ko(e)%60;return n+Gt(r,"0",2)+Gt(i,"0",2)}function he(t,e,n){Mu.lastIndex=0;var r=Mu.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function fe(t){for(var e=t.length,n=-1;++n<e;)t[n][0]=this(t[n][0]);return function(e){for(var n=0,r=t[n];!r[1](e);)r=t[++n];return r[0](e)}}function _e(){}function pe(t,e,n){var r=n.s=t+e,i=r-t,a=r-i;n.t=t-a+(e-i)}function me(t,e){t&&wu.hasOwnProperty(t.type)&&wu[t.type](t,e)}function ye(t,e,n){var r,i=-1,a=t.length-n;for(e.lineStart();++i<a;)r=t[i],e.point(r[0],r[1],r[2]);e.lineEnd()}function ge(t,e){var n=-1,r=t.length;for(e.polygonStart();++n<r;)ye(t[n],e,1);e.polygonEnd()}function ve(){function t(t,e){t*=$o,e=e*$o/2+Wo/4;var n=t-r,o=n>=0?1:-1,u=o*n,s=Math.cos(e),c=Math.sin(e),l=a*c,d=i*s+l*Math.cos(u),h=l*o*Math.sin(u);xu.add(Math.atan2(h,d)),r=t,i=s,a=c}var e,n,r,i,a;Yu.point=function(o,u){Yu.point=t,r=(e=o)*$o,i=Math.cos(u=(n=u)*$o/2+Wo/4),a=Math.sin(u)},Yu.lineEnd=function(){t(e,n)}}function Me(t){var e=t[0],n=t[1],r=Math.cos(n);return[r*Math.cos(e),r*Math.sin(e),Math.sin(n)]}function be(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Le(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 ke(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function we(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function De(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}function xe(t){return[Math.atan2(t[1],t[0]),ot(t[2])]}function Ye(t,e){return ko(t[0]-e[0])<Io&&ko(t[1]-e[1])<Io}function Te(t,e){t*=$o;var n=Math.cos(e*=$o);Ae(n*Math.cos(t),n*Math.sin(t),Math.sin(e))}function Ae(t,e,n){++Tu,Eu+=(t-Eu)/Tu,Su+=(e-Su)/Tu,Fu+=(n-Fu)/Tu}function Ee(){function t(t,i){t*=$o;var a=Math.cos(i*=$o),o=a*Math.cos(t),u=a*Math.sin(t),s=Math.sin(i),c=Math.atan2(Math.sqrt((c=n*s-r*u)*c+(c=r*o-e*s)*c+(c=e*u-n*o)*c),e*o+n*u+r*s);Au+=c,Cu+=c*(e+(e=o)),ju+=c*(n+(n=u)),Hu+=c*(r+(r=s)),Ae(e,n,r)}var e,n,r;Bu.point=function(i,a){i*=$o;var o=Math.cos(a*=$o);e=o*Math.cos(i),n=o*Math.sin(i),r=Math.sin(a),Bu.point=t,Ae(e,n,r)}}function Se(){Bu.point=Te}function Fe(){function t(t,e){t*=$o;var n=Math.cos(e*=$o),o=n*Math.cos(t),u=n*Math.sin(t),s=Math.sin(e),c=i*s-a*u,l=a*o-r*s,d=r*u-i*o,h=Math.sqrt(c*c+l*l+d*d),f=r*o+i*u+a*s,_=h&&-at(f)/h,p=Math.atan2(h,f);Ou+=_*c,Pu+=_*l,Nu+=_*d,Au+=p,Cu+=p*(r+(r=o)),ju+=p*(i+(i=u)),Hu+=p*(a+(a=s)),Ae(r,i,a)}var e,n,r,i,a;Bu.point=function(o,u){e=o,n=u,Bu.point=t,o*=$o;var s=Math.cos(u*=$o);r=s*Math.cos(o),i=s*Math.sin(o),a=Math.sin(u),Ae(r,i,a)},Bu.lineEnd=function(){t(e,n),Bu.lineEnd=Se,Bu.point=Te}}function Ce(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 je(){return!0}function He(t,e,n,r,i){var a=[],o=[];if(t.forEach(function(t){if(!((e=t.length-1)<=0)){var e,n=t[0],r=t[e];if(Ye(n,r)){i.lineStart();for(var u=0;u<e;++u)i.point((n=t[u])[0],n[1]);return void i.lineEnd()}var s=new Pe(n,t,null,!0),c=new Pe(n,null,s,!1);s.o=c,a.push(s),o.push(c),s=new Pe(r,t,null,!1),c=new Pe(r,null,s,!0),s.o=c,a.push(s),o.push(c)}}),o.sort(e),Oe(a),Oe(o),a.length){for(var u=0,s=n,c=o.length;u<c;++u)o[u].e=s=!s;for(var l,d,h=a[0];;){for(var f=h,_=!0;f.v;)if((f=f.n)===h)return;l=f.z,i.lineStart();do{if(f.v=f.o.v=!0,f.e){if(_)for(var u=0,c=l.length;u<c;++u)i.point((d=l[u])[0],d[1]);else r(f.x,f.n.x,1,i);f=f.n}else{if(_){l=f.p.z;for(var u=l.length-1;u>=0;--u)i.point((d=l[u])[0],d[1])}else r(f.x,f.p.x,-1,i);f=f.p}f=f.o,l=f.z,_=!_}while(!f.v);i.lineEnd()}}}function Oe(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r<e;)i.n=n=t[r],n.p=i,i=n;i.n=n=t[0],n.p=i}}function Pe(t,e,n,r){this.x=t,this.z=e,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}function Ne(t,e,n,r){return function(i,a){function o(e,n){var r=i(e,n);t(e=r[0],n=r[1])&&a.point(e,n)}function u(t,e){var n=i(t,e);m.point(n[0],n[1])}function s(){g.point=u,m.lineStart()}function c(){g.point=o,m.lineEnd()}function l(t,e){p.push([t,e]);var n=i(t,e);M.point(n[0],n[1])}function d(){M.lineStart(),p=[]}function h(){l(p[0][0],p[0][1]),M.lineEnd();var t,e=M.clean(),n=v.buffer(),r=n.length;if(p.pop(),_.push(p),p=null,r)if(1&e){t=n[0];var i,r=t.length-1,o=-1;if(r>0){for(b||(a.polygonStart(),b=!0),a.lineStart();++o<r;)a.point((i=t[o])[0],i[1]);a.lineEnd()}}else r>1&&2&e&&n.push(n.pop().concat(n.shift())),f.push(n.filter(Be))}var f,_,p,m=e(a),y=i.invert(r[0],r[1]),g={point:o,lineStart:s,lineEnd:c,polygonStart:function(){g.point=l,g.lineStart=d,g.lineEnd=h,f=[],_=[]},polygonEnd:function(){g.point=o,g.lineStart=s,g.lineEnd=c,f=fo.merge(f);var t=Ue(y,_);f.length?(b||(a.polygonStart(),b=!0),He(f,Re,t,n,a)):t&&(b||(a.polygonStart(),b=!0),a.lineStart(),n(null,null,1,a),a.lineEnd()),b&&(a.polygonEnd(),b=!1),f=_=null},sphere:function(){a.polygonStart(),a.lineStart(),n(null,null,1,a),a.lineEnd(),a.polygonEnd()}},v=Ie(),M=e(v),b=!1;return g}}function Be(t){return t.length>1}function Ie(){var t,e=[];return{lineStart:function(){e.push(t=[])},point:function(e,n){t.push([e,n])},lineEnd:x,buffer:function(){var n=e;return e=[],t=null,n},rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))}}}function Re(t,e){return((t=t.x)[0]<0?t[1]-Uo-Io:Uo-t[1])-((e=e.x)[0]<0?e[1]-Uo-Io:Uo-e[1])}function We(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var u=a>0?Wo:-Wo,s=ko(a-n);ko(s-Wo)<Io?(t.point(n,r=(r+o)/2>0?Uo:-Uo),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),t.point(a,r),e=0):i!==u&&s>=Wo&&(ko(n-i)<Io&&(n-=i*Io),ko(a-u)<Io&&(a-=u*Io),r=ze(n,r,a,o),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(u,r),e=0),t.point(n=a,r=o),i=u},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}function ze(t,e,n,r){var i,a,o=Math.sin(t-n);return ko(o)>Io?Math.atan((Math.sin(e)*(a=Math.cos(r))*Math.sin(n)-Math.sin(r)*(i=Math.cos(e))*Math.sin(t))/(i*a*o)):(e+r)/2}function qe(t,e,n,r){var i;if(null==t)i=n*Uo,r.point(-Wo,i),r.point(0,i),r.point(Wo,i),r.point(Wo,0),r.point(Wo,-i),r.point(0,-i),r.point(-Wo,-i),r.point(-Wo,0),r.point(-Wo,i);else if(ko(t[0]-e[0])>Io){var a=t[0]<e[0]?Wo:-Wo;i=n*a/2,r.point(-a,i),r.point(0,i),r.point(a,i)}else r.point(e[0],e[1])}function Ue(t,e){var n=t[0],r=t[1],i=[Math.sin(n),-Math.cos(n),0],a=0,o=0;xu.reset();for(var u=0,s=e.length;u<s;++u){var c=e[u],l=c.length;if(l)for(var d=c[0],h=d[0],f=d[1]/2+Wo/4,_=Math.sin(f),p=Math.cos(f),m=1;;){m===l&&(m=0),t=c[m];var y=t[0],g=t[1]/2+Wo/4,v=Math.sin(g),M=Math.cos(g),b=y-h,L=b>=0?1:-1,k=L*b,w=k>Wo,D=_*v;if(xu.add(Math.atan2(D*L*Math.sin(k),p*M+D*Math.cos(k))),a+=w?b+L*zo:b,w^h>=n^y>=n){var x=Le(Me(d),Me(t));De(x);var Y=Le(i,x);De(Y);var T=(w^b>=0?-1:1)*ot(Y[2]);(r>T||r===T&&(x[0]||x[1]))&&(o+=w^b>=0?1:-1)}if(!m++)break;h=y,_=v,p=M,d=t}}return(a<-Io||a<Io&&xu<-Io)^1&o}function $e(t){function e(t,e){return Math.cos(t)*Math.cos(e)>a}function n(t){var n,a,s,c,l;return{lineStart:function(){c=s=!1,l=1},point:function(d,h){var f,_=[d,h],p=e(d,h),m=o?p?0:i(d,h):p?i(d+(d<0?Wo:-Wo),h):0;if(!n&&(c=s=p)&&t.lineStart(),p!==s&&(f=r(n,_),(Ye(n,f)||Ye(_,f))&&(_[0]+=Io,_[1]+=Io,p=e(_[0],_[1]))),p!==s)l=0,p?(t.lineStart(),f=r(_,n),t.point(f[0],f[1])):(f=r(n,_),t.point(f[0],f[1]),t.lineEnd()),n=f;else if(u&&n&&o^p){var y;m&a||!(y=r(_,n,!0))||(l=0,o?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1])))}!p||n&&Ye(n,_)||t.point(_[0],_[1]),n=_,s=p,a=m},lineEnd:function(){s&&t.lineEnd(),n=null},clean:function(){return l|(c&&s)<<1}}}function r(t,e,n){var r=Me(t),i=Me(e),o=[1,0,0],u=Le(r,i),s=be(u,u),c=u[0],l=s-c*c;if(!l)return!n&&t;var d=a*s/l,h=-a*c/l,f=Le(o,u),_=we(o,d);ke(_,we(u,h));var p=f,m=be(_,p),y=be(p,p),g=m*m-y*(be(_,_)-1);if(!(g<0)){var v=Math.sqrt(g),M=we(p,(-m-v)/y);if(ke(M,_),M=xe(M),!n)return M;var b,L=t[0],k=e[0],w=t[1],D=e[1];k<L&&(b=L,L=k,k=b);var x=k-L,Y=ko(x-Wo)<Io,T=Y||x<Io;if(!Y&&D<w&&(b=w,w=D,D=b),T?Y?w+D>0^M[1]<(ko(M[0]-L)<Io?w:D):w<=M[1]&&M[1]<=D:x>Wo^(L<=M[0]&&M[0]<=k)){var A=we(p,(-m+v)/y);return ke(A,_),[M,xe(A)]}}}function i(e,n){var r=o?t:Wo-t,i=0;return e<-r?i|=1:e>r&&(i|=2),n<-r?i|=4:n>r&&(i|=8),i}var a=Math.cos(t),o=a>0,u=ko(a)>Io;return Ne(e,n,Mn(t,6*$o),o?[0,-t]:[-Wo,t-Wo])}function Ve(t,e,n,r){return function(i){var a,o=i.a,u=i.b,s=o.x,c=o.y,l=u.x,d=u.y,h=0,f=1,_=l-s,p=d-c;if(a=t-s,_||!(a>0)){if(a/=_,_<0){if(a<h)return;a<f&&(f=a)}else if(_>0){if(a>f)return;a>h&&(h=a)}if(a=n-s,_||!(a<0)){if(a/=_,_<0){if(a>f)return;a>h&&(h=a)}else if(_>0){if(a<h)return;a<f&&(f=a)}if(a=e-c,p||!(a>0)){if(a/=p,p<0){if(a<h)return;a<f&&(f=a)}else if(p>0){if(a>f)return;a>h&&(h=a)}if(a=r-c,p||!(a<0)){if(a/=p,p<0){if(a>f)return;a>h&&(h=a)}else if(p>0){if(a<h)return;a<f&&(f=a)}return h>0&&(i.a={x:s+h*_,y:c+h*p}),f<1&&(i.b={x:s+f*_,y:c+f*p}),i}}}}}}function Ge(t,e,n,r){function i(r,i){return ko(r[0]-t)<Io?i>0?0:3:ko(r[0]-n)<Io?i>0?2:1:ko(r[1]-e)<Io?i>0?1:0:i>0?3:2}function a(t,e){return o(t.x,e.x)}function o(t,e){var n=i(t,1),r=i(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(u){function s(t){for(var e=0,n=m.length,r=t[1],i=0;i<n;++i)for(var a,o=1,u=m[i],s=u.length,c=u[0];o<s;++o)a=u[o],c[1]<=r?a[1]>r&&it(c,a,t)>0&&++e:a[1]<=r&&it(c,a,t)<0&&--e,c=a;return 0!==e}function c(a,u,s,c){var l=0,d=0;if(null==a||(l=i(a,s))!==(d=i(u,s))||o(a,u)<0^s>0)do{c.point(0===l||3===l?t:n,l>1?r:e)}while((l=(l+s+4)%4)!==d);else c.point(u[0],u[1])}function l(i,a){return t<=i&&i<=n&&e<=a&&a<=r}function d(t,e){l(t,e)&&u.point(t,e)}function h(){A.point=_,m&&m.push(y=[]),w=!0,k=!1,b=L=NaN}function f(){p&&(_(g,v),M&&k&&Y.rejoin(),p.push(Y.buffer())),A.point=d,k&&u.lineEnd()}function _(t,e){t=Math.max(-Ru,Math.min(Ru,t)),e=Math.max(-Ru,Math.min(Ru,e));var n=l(t,e);if(m&&y.push([t,e]),w)g=t,v=e,M=n,w=!1,n&&(u.lineStart(),u.point(t,e));else if(n&&k)u.point(t,e);else{var r={a:{x:b,y:L},b:{x:t,y:e}};T(r)?(k||(u.lineStart(),u.point(r.a.x,r.a.y)),u.point(r.b.x,r.b.y),n||u.lineEnd(),D=!1):n&&(u.lineStart(),u.point(t,e),D=!1)}b=t,L=e,k=n}var p,m,y,g,v,M,b,L,k,w,D,x=u,Y=Ie(),T=Ve(t,e,n,r),A={point:d,lineStart:h,lineEnd:f,polygonStart:function(){u=Y,p=[],m=[],D=!0},polygonEnd:function(){u=x,p=fo.merge(p);var e=s([t,r]),n=D&&e,i=p.length;(n||i)&&(u.polygonStart(),n&&(u.lineStart(),c(null,null,1,u),u.lineEnd()),i&&He(p,a,e,c,u),u.polygonEnd()),p=m=y=null}};return A}}function Je(t){var e=0,n=Wo/3,r=hn(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*Wo/180,n=t[1]*Wo/180):[e/Wo*180,n/Wo*180]},i}function Ze(t,e){function n(t,e){var n=Math.sqrt(a-2*i*Math.sin(e))/i;return[n*Math.sin(t*=i),o-n*Math.cos(t)]}var r=Math.sin(t),i=(r+Math.sin(e))/2,a=1+r*(2*i-r),o=Math.sqrt(a)/i;return n.invert=function(t,e){var n=o-e;return[Math.atan2(t,n)/i,ot((a-(t*t+n*n)*i*i)/(2*i))]},n}function Ke(){function t(t,e){zu+=i*t-r*e,r=t,i=e}var e,n,r,i;Gu.point=function(a,o){Gu.point=t,e=r=a,n=i=o},Gu.lineEnd=function(){t(e,n)}}function Xe(t,e){t<qu&&(qu=t),t>$u&&($u=t),e<Uu&&(Uu=e),e>Vu&&(Vu=e)}function Qe(){function t(t,e){o.push("M",t,",",e,a)}function e(t,e){o.push("M",t,",",e),u.point=n}function n(t,e){o.push("L",t,",",e)}function r(){u.point=t}function i(){o.push("Z")}var a=tn(4.5),o=[],u={point:t,lineStart:function(){u.point=e},lineEnd:r,polygonStart:function(){u.lineEnd=i},polygonEnd:function(){u.lineEnd=r,u.point=t},pointRadius:function(t){return a=tn(t),u},result:function(){if(o.length){var t=o.join("");return o=[],t}}};return u}function tn(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function en(t,e){Eu+=t,Su+=e,++Fu}function nn(){function t(t,r){var i=t-e,a=r-n,o=Math.sqrt(i*i+a*a);Cu+=o*(e+t)/2,ju+=o*(n+r)/2,Hu+=o,en(e=t,n=r)}var e,n;Zu.point=function(r,i){Zu.point=t,en(e=r,n=i)}}function rn(){Zu.point=en}function an(){function t(t,e){var n=t-r,a=e-i,o=Math.sqrt(n*n+a*a);Cu+=o*(r+t)/2,ju+=o*(i+e)/2,Hu+=o,o=i*t-r*e,Ou+=o*(r+t),Pu+=o*(i+e),Nu+=3*o,en(r=t,i=e)}var e,n,r,i;Zu.point=function(a,o){Zu.point=t,en(e=r=a,n=i=o)},Zu.lineEnd=function(){t(e,n)}}function on(t){function e(e,n){t.moveTo(e+o,n),t.arc(e,n,o,0,zo)}function n(e,n){t.moveTo(e,n),u.point=r}function r(e,n){t.lineTo(e,n)}function i(){u.point=e}function a(){t.closePath()}var o=4.5,u={point:e,lineStart:function(){u.point=n},lineEnd:i,polygonStart:function(){u.lineEnd=a},polygonEnd:function(){u.lineEnd=i,u.point=e},pointRadius:function(t){return o=t,u},result:x};return u}function un(t){function e(t){return(u?r:n)(t)}function n(e){return ln(e,function(n,r){n=t(n,r),e.point(n[0],n[1])})}function r(e){function n(n,r){n=t(n,r),e.point(n[0],n[1])}function r(){v=NaN,w.point=a,e.lineStart()}function a(n,r){var a=Me([n,r]),o=t(n,r);i(v,M,g,b,L,k,v=o[0],M=o[1],g=n,b=a[0],L=a[1],k=a[2],u,e),e.point(v,M)}function o(){w.point=n,e.lineEnd()}function s(){r(),w.point=c,w.lineEnd=l}function c(t,e){a(d=t,h=e),f=v,_=M,p=b,m=L,y=k,w.point=a}function l(){i(v,M,g,b,L,k,f,_,d,p,m,y,u,e),w.lineEnd=o,o()}var d,h,f,_,p,m,y,g,v,M,b,L,k,w={point:n,lineStart:r,lineEnd:o,polygonStart:function(){e.polygonStart(),w.lineStart=s},polygonEnd:function(){e.polygonEnd(),w.lineStart=r}};return w}function i(e,n,r,u,s,c,l,d,h,f,_,p,m,y){var g=l-e,v=d-n,M=g*g+v*v;if(M>4*a&&m--){var b=u+f,L=s+_,k=c+p,w=Math.sqrt(b*b+L*L+k*k),D=Math.asin(k/=w),x=ko(ko(k)-1)<Io||ko(r-h)<Io?(r+h)/2:Math.atan2(L,b),Y=t(x,D),T=Y[0],A=Y[1],E=T-e,S=A-n,F=v*E-g*S;(F*F/M>a||ko((g*E+v*S)/M-.5)>.3||u*f+s*_+c*p<o)&&(i(e,n,r,u,s,c,T,A,x,b/=w,L/=w,k,m,y),y.point(T,A),i(T,A,x,b,L,k,l,d,h,f,_,p,m,y))}}var a=.5,o=Math.cos(30*$o),u=16;return e.precision=function(t){return arguments.length?(u=(a=t*t)>0&&16,e):Math.sqrt(a)},e}function sn(t){var e=un(function(e,n){return t([e*Vo,n*Vo])});return function(t){return fn(e(t))}}function cn(t){this.stream=t}function ln(t,e){return{point:e,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function dn(t){return hn(function(){return t})()}function hn(t){function e(t){return t=u(t[0]*$o,t[1]*$o),[t[0]*h+s,c-t[1]*h]}function n(t){return(t=u.invert((t[0]-s)/h,(c-t[1])/h))&&[t[0]*Vo,t[1]*Vo]}function r(){u=Ce(o=mn(y,g,v),a);var t=a(p,m);return s=f-t[0]*h,c=_+t[1]*h,i()}function i(){return l&&(l.valid=!1,l=null),e}var a,o,u,s,c,l,d=un(function(t,e){return t=a(t,e),[t[0]*h+s,c-t[1]*h]}),h=150,f=480,_=250,p=0,m=0,y=0,g=0,v=0,M=Iu,b=k,L=null,w=null;return e.stream=function(t){return l&&(l.valid=!1),l=fn(M(o,d(b(t)))),l.valid=!0,l},e.clipAngle=function(t){return arguments.length?(M=null==t?(L=t,Iu):$e((L=+t)*$o),i()):L},e.clipExtent=function(t){return arguments.length?(w=t,b=t?Ge(t[0][0],t[0][1],t[1][0],t[1][1]):k,i()):w},e.scale=function(t){return arguments.length?(h=+t,r()):h},e.translate=function(t){return arguments.length?(f=+t[0],_=+t[1],r()):[f,_]},e.center=function(t){return arguments.length?(p=t[0]%360*$o,m=t[1]%360*$o,r()):[p*Vo,m*Vo]},e.rotate=function(t){return arguments.length?(y=t[0]%360*$o,g=t[1]%360*$o,v=t.length>2?t[2]%360*$o:0,r()):[y*Vo,g*Vo,v*Vo]},fo.rebind(e,d,"precision"),function(){return a=t.apply(this,arguments),e.invert=a.invert&&n,r()}}function fn(t){return ln(t,function(e,n){t.point(e*$o,n*$o)})}function _n(t,e){return[t,e]}function pn(t,e){return[t>Wo?t-zo:t<-Wo?t+zo:t,e]}function mn(t,e,n){return t?e||n?Ce(gn(t),vn(e,n)):gn(t):e||n?vn(e,n):pn}function yn(t){return function(e,n){return e+=t,[e>Wo?e-zo:e<-Wo?e+zo:e,n]}}function gn(t){var e=yn(t);return e.invert=yn(-t),e}function vn(t,e){function n(t,e){var n=Math.cos(e),u=Math.cos(t)*n,s=Math.sin(t)*n,c=Math.sin(e),l=c*r+u*i;return[Math.atan2(s*a-l*o,u*r-c*i),ot(l*a+s*o)]}var r=Math.cos(t),i=Math.sin(t),a=Math.cos(e),o=Math.sin(e);return n.invert=function(t,e){var n=Math.cos(e),u=Math.cos(t)*n,s=Math.sin(t)*n,c=Math.sin(e),l=c*a-s*o;return[Math.atan2(s*a+c*o,u*r+l*i),ot(l*r-u*i)]},n}function Mn(t,e){var n=Math.cos(t),r=Math.sin(t);return function(i,a,o,u){var s=o*e;null!=i?(i=bn(n,i),a=bn(n,a),(o>0?i<a:i>a)&&(i+=o*zo)):(i=t+o*zo,a=t-.5*s);for(var c,l=i;o>0?l>a:l<a;l-=s)u.point((c=xe([n,-r*Math.cos(l),-r*Math.sin(l)]))[0],c[1])}}function bn(t,e){var n=Me(e);n[0]-=t,De(n);var r=at(-n[1]);return((-n[2]<0?-r:r)+2*Math.PI-Io)%(2*Math.PI)}function Ln(t,e,n){var r=fo.range(t,e-Io,n).concat(e);return function(t){return r.map(function(e){return[t,e]})}}function kn(t,e,n){var r=fo.range(t,e-Io,n).concat(e);return function(t){return r.map(function(e){return[e,t]})}}function wn(t){return t.source}function Dn(t){return t.target}function xn(t,e,n,r){var i=Math.cos(e),a=Math.sin(e),o=Math.cos(r),u=Math.sin(r),s=i*Math.cos(t),c=i*Math.sin(t),l=o*Math.cos(n),d=o*Math.sin(n),h=2*Math.asin(Math.sqrt(lt(r-e)+i*o*lt(n-t))),f=1/Math.sin(h),_=h?function(t){var e=Math.sin(t*=h)*f,n=Math.sin(h-t)*f,r=n*s+e*l,i=n*c+e*d,o=n*a+e*u;return[Math.atan2(i,r)*Vo,Math.atan2(o,Math.sqrt(r*r+i*i))*Vo]}:function(){return[t*Vo,e*Vo]};return _.distance=h,_}function Yn(){function t(t,i){var a=Math.sin(i*=$o),o=Math.cos(i),u=ko((t*=$o)-e),s=Math.cos(u);Ku+=Math.atan2(Math.sqrt((u=o*Math.sin(u))*u+(u=r*a-n*o*s)*u),n*a+r*o*s),e=t,n=a,r=o}var e,n,r;Xu.point=function(i,a){e=i*$o,n=Math.sin(a*=$o),r=Math.cos(a),Xu.point=t},Xu.lineEnd=function(){Xu.point=Xu.lineEnd=x}}function Tn(t,e){function n(e,n){var r=Math.cos(e),i=Math.cos(n),a=t(r*i);return[a*i*Math.sin(e),a*Math.sin(n)]}return n.invert=function(t,n){var r=Math.sqrt(t*t+n*n),i=e(r),a=Math.sin(i),o=Math.cos(i);return[Math.atan2(t*a,r*o),Math.asin(r&&n*a/r)]},n}function An(t,e){function n(t,e){o>0?e<-Uo+Io&&(e=-Uo+Io):e>Uo-Io&&(e=Uo-Io);var n=o/Math.pow(i(e),a);return[n*Math.sin(a*t),o-n*Math.cos(a*t)]}var r=Math.cos(t),i=function(t){return Math.tan(Wo/4+t/2)},a=t===e?Math.sin(t):Math.log(r/Math.cos(e))/Math.log(i(e)/i(t)),o=r*Math.pow(i(t),a)/a;return a?(n.invert=function(t,e){var n=o-e,r=rt(a)*Math.sqrt(t*t+n*n);return[Math.atan2(t,n)/a,2*Math.atan(Math.pow(o/r,1/a))-Uo]},n):Sn}function En(t,e){function n(t,e){var n=a-e;return[n*Math.sin(i*t),a-n*Math.cos(i*t)]}var r=Math.cos(t),i=t===e?Math.sin(t):(r-Math.cos(e))/(e-t),a=r/i+t;return ko(i)<Io?_n:(n.invert=function(t,e){var n=a-e;return[Math.atan2(t,n)/i,a-rt(i)*Math.sqrt(t*t+n*n)]},n)}function Sn(t,e){return[t,Math.log(Math.tan(Wo/4+e/2))]}function Fn(t){var e,n=dn(t),r=n.scale,i=n.translate,a=n.clipExtent;return n.scale=function(){var t=r.apply(n,arguments);return t===n?e?n.clipExtent(null):n:t},n.translate=function(){var t=i.apply(n,arguments);return t===n?e?n.clipExtent(null):n:t},n.clipExtent=function(t){var o=a.apply(n,arguments);if(o===n){if(e=null==t){var u=Wo*r(),s=i();a([[s[0]-u,s[1]-u],[s[0]+u,s[1]+u]])}}else e&&(o=null);return o},n.clipExtent(null)}function Cn(t,e){return[Math.log(Math.tan(Wo/4+e/2)),-t]}function jn(t){return t[0]}function Hn(t){return t[1]}function On(t){for(var e=t.length,n=[0,1],r=2,i=2;i<e;i++){for(;r>1&&it(t[n[r-2]],t[n[r-1]],t[i])<=0;)--r;n[r++]=i}return n.slice(0,r)}function Pn(t,e){return t[0]-e[0]||t[1]-e[1]}function Nn(t,e,n){return(n[0]-e[0])*(t[1]-e[1])<(n[1]-e[1])*(t[0]-e[0])}function Bn(t,e,n,r){var i=t[0],a=n[0],o=e[0]-i,u=r[0]-a,s=t[1],c=n[1],l=e[1]-s,d=r[1]-c,h=(u*(s-c)-d*(i-a))/(d*o-u*l);return[i+h*o,s+h*l]}function In(t){var e=t[0],n=t[t.length-1];return!(e[0]-n[0]||e[1]-n[1])}function Rn(){sr(this),this.edge=this.site=this.circle=null}function Wn(t){var e=ls.pop()||new Rn;return e.site=t,e}function zn(t){Qn(t),us.remove(t),ls.push(t),sr(t)}function qn(t){var e=t.circle,n=e.x,r=e.cy,i={x:n,y:r},a=t.P,o=t.N,u=[t];zn(t);for(var s=a;s.circle&&ko(n-s.circle.x)<Io&&ko(r-s.circle.cy)<Io;)a=s.P,u.unshift(s),zn(s),s=a;u.unshift(s),Qn(s);for(var c=o;c.circle&&ko(n-c.circle.x)<Io&&ko(r-c.circle.cy)<Io;)o=c.N,u.push(c),zn(c),c=o;u.push(c),Qn(c);var l,d=u.length;for(l=1;l<d;++l)c=u[l],s=u[l-1],ar(c.edge,s.site,c.site,i);s=u[0],c=u[d-1],c.edge=rr(s.site,c.site,null,i),Xn(s),Xn(c)}function Un(t){for(var e,n,r,i,a=t.x,o=t.y,u=us._;u;)if((r=$n(u,o)-a)>Io)u=u.L;else{if(!((i=a-Vn(u,o))>Io)){r>-Io?(e=u.P,n=u):i>-Io?(e=u,n=u.N):e=n=u;break}if(!u.R){e=u;break}u=u.R}var s=Wn(t);if(us.insert(e,s),e||n){if(e===n)return Qn(e),n=Wn(e.site),us.insert(s,n),s.edge=n.edge=rr(e.site,s.site),Xn(e),void Xn(n);if(!n)return void(s.edge=rr(e.site,s.site));Qn(e),Qn(n);var c=e.site,l=c.x,d=c.y,h=t.x-l,f=t.y-d,_=n.site,p=_.x-l,m=_.y-d,y=2*(h*m-f*p),g=h*h+f*f,v=p*p+m*m,M={x:(m*g-f*v)/y+l,y:(h*v-p*g)/y+d};ar(n.edge,c,_,M),s.edge=rr(c,t,null,M),n.edge=rr(t,_,null,M),Xn(e),Xn(n)}}function $n(t,e){var n=t.site,r=n.x,i=n.y,a=i-e;if(!a)return r;var o=t.P;if(!o)return-1/0;n=o.site;var u=n.x,s=n.y,c=s-e;if(!c)return u;var l=u-r,d=1/a-1/c,h=l/c;return d?(-h+Math.sqrt(h*h-2*d*(l*l/(-2*c)-s+c/2+i-a/2)))/d+r:(r+u)/2}function Vn(t,e){var n=t.N;if(n)return $n(n,e);var r=t.site;return r.y===e?r.x:1/0}function Gn(t){this.site=t,this.edges=[]}function Jn(t){for(var e,n,r,i,a,o,u,s,c,l,d=t[0][0],h=t[1][0],f=t[0][1],_=t[1][1],p=os,m=p.length;m--;)if((a=p[m])&&a.prepare())for(u=a.edges,s=u.length,o=0;o<s;)l=u[o].end(),r=l.x,i=l.y,c=u[++o%s].start(),e=c.x,n=c.y,(ko(r-e)>Io||ko(i-n)>Io)&&(u.splice(o,0,new or(ir(a.site,l,ko(r-d)<Io&&_-i>Io?{x:d,y:ko(e-d)<Io?n:_}:ko(i-_)<Io&&h-r>Io?{x:ko(n-_)<Io?e:h,y:_}:ko(r-h)<Io&&i-f>Io?{x:h,y:ko(e-h)<Io?n:f}:ko(i-f)<Io&&r-d>Io?{x:ko(n-f)<Io?e:d,y:f}:null),a.site,null)),++s)}function Zn(t,e){return e.angle-t.angle}function Kn(){sr(this),this.x=this.y=this.arc=this.site=this.cy=null}function Xn(t){var e=t.P,n=t.N;if(e&&n){var r=e.site,i=t.site,a=n.site;if(r!==a){var o=i.x,u=i.y,s=r.x-o,c=r.y-u,l=a.x-o,d=a.y-u,h=2*(s*d-c*l);if(!(h>=-Ro)){var f=s*s+c*c,_=l*l+d*d,p=(d*f-c*_)/h,m=(s*_-l*f)/h,d=m+u,y=ds.pop()||new Kn;y.arc=t,y.site=i,y.x=p+o,y.y=d+Math.sqrt(p*p+m*m),y.cy=d,t.circle=y;for(var g=null,v=cs._;v;)if(y.y<v.y||y.y===v.y&&y.x<=v.x){if(!v.L){g=v.P;break}v=v.L}else{if(!v.R){g=v;break}v=v.R}cs.insert(g,y),g||(ss=y)}}}}function Qn(t){var e=t.circle;e&&(e.P||(ss=e.N),cs.remove(e),ds.push(e),sr(e),t.circle=null)}function tr(t){for(var e,n=as,r=Ve(t[0][0],t[0][1],t[1][0],t[1][1]),i=n.length;i--;)e=n[i],(!er(e,t)||!r(e)||ko(e.a.x-e.b.x)<Io&&ko(e.a.y-e.b.y)<Io)&&(e.a=e.b=null,n.splice(i,1))}function er(t,e){var n=t.b;if(n)return!0;var r,i,a=t.a,o=e[0][0],u=e[1][0],s=e[0][1],c=e[1][1],l=t.l,d=t.r,h=l.x,f=l.y,_=d.x,p=d.y,m=(h+_)/2,y=(f+p)/2;if(p===f){if(m<o||m>=u)return;if(h>_){if(a){if(a.y>=c)return}else a={x:m,y:s};n={x:m,y:c}}else{if(a){if(a.y<s)return}else a={x:m,y:c};n={x:m,y:s}}}else if(r=(h-_)/(p-f),i=y-r*m,r<-1||r>1)if(h>_){if(a){if(a.y>=c)return}else a={x:(s-i)/r,y:s};n={x:(c-i)/r,y:c}}else{if(a){if(a.y<s)return}else a={x:(c-i)/r,y:c};n={x:(s-i)/r,y:s}}else if(f<p){if(a){if(a.x>=u)return}else a={x:o,y:r*o+i};n={x:u,y:r*u+i}}else{if(a){if(a.x<o)return}else a={x:u,y:r*u+i};n={x:o,y:r*o+i}}return t.a=a,t.b=n,!0}function nr(t,e){this.l=t,this.r=e,this.a=this.b=null}function rr(t,e,n,r){var i=new nr(t,e);return as.push(i),n&&ar(i,t,e,n),r&&ar(i,e,t,r),os[t.i].edges.push(new or(i,t,e)),os[e.i].edges.push(new or(i,e,t)),i}function ir(t,e,n){var r=new nr(t,null);return r.a=e,r.b=n,as.push(r),r}function ar(t,e,n,r){t.a||t.b?t.l===n?t.b=r:t.a=r:(t.a=r,t.l=e,t.r=n)}function or(t,e,n){var r=t.a,i=t.b;this.edge=t,this.site=e,this.angle=n?Math.atan2(n.y-e.y,n.x-e.x):t.l===e?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function ur(){this._=null}function sr(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function cr(t,e){var n=e,r=e.R,i=n.U;i?i.L===n?i.L=r:i.R=r:t._=r,r.U=i,n.U=r,n.R=r.L,n.R&&(n.R.U=n),r.L=n}function lr(t,e){var n=e,r=e.L,i=n.U;i?i.L===n?i.L=r:i.R=r:t._=r,r.U=i,n.U=r,n.L=r.R,n.L&&(n.L.U=n),r.R=n}function dr(t){for(;t.L;)t=t.L;return t}function hr(t,e){var n,r,i,a=t.sort(fr).pop();for(as=[],os=new Array(t.length),us=new ur,cs=new ur;;)if(i=ss,a&&(!i||a.y<i.y||a.y===i.y&&a.x<i.x))a.x===n&&a.y===r||(os[a.i]=new Gn(a),Un(a),n=a.x,r=a.y),a=t.pop();else{if(!i)break;qn(i.arc)}e&&(tr(e),Jn(e));var o={cells:os,edges:as};return us=cs=as=os=null,o}function fr(t,e){return e.y-t.y||e.x-t.x}function _r(t,e,n){return(t.x-n.x)*(e.y-t.y)-(t.x-e.x)*(n.y-t.y)}function pr(t){return t.x}function mr(t){return t.y}function yr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function gr(t,e,n,r,i,a){if(!t(e,n,r,i,a)){var o=.5*(n+i),u=.5*(r+a),s=e.nodes;s[0]&&gr(t,s[0],n,r,o,u),s[1]&&gr(t,s[1],o,r,i,u),s[2]&&gr(t,s[2],n,u,o,a),s[3]&&gr(t,s[3],o,u,i,a)}}function vr(t,e,n,r,i,a,o){var u,s=1/0;return function t(c,l,d,h,f){if(!(l>a||d>o||h<r||f<i)){if(_=c.point){var _,p=e-c.x,m=n-c.y,y=p*p+m*m;if(y<s){var g=Math.sqrt(s=y);r=e-g,i=n-g,a=e+g,o=n+g,u=_}}for(var v=c.nodes,M=.5*(l+h),b=.5*(d+f),L=e>=M,k=n>=b,w=k<<1|L,D=w+4;w<D;++w)if(c=v[3&w])switch(3&w){case 0:t(c,l,d,M,b);break;case 1:t(c,M,d,h,b);break;case 2:t(c,l,b,M,f);break;case 3:t(c,M,b,h,f)}}}(t,r,i,a,o),u}function Mr(t,e){t=fo.rgb(t),e=fo.rgb(e);var n=t.r,r=t.g,i=t.b,a=e.r-n,o=e.g-r,u=e.b-i;return function(t){return"#"+Dt(Math.round(n+a*t))+Dt(Math.round(r+o*t))+Dt(Math.round(i+u*t))}}function br(t,e){var n,r={},i={};for(n in t)n in e?r[n]=wr(t[n],e[n]):i[n]=t[n];for(n in e)n in t||(i[n]=e[n]);return function(t){for(n in r)i[n]=r[n](t);return i}}function Lr(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function kr(t,e){var n,r,i,a=fs.lastIndex=_s.lastIndex=0,o=-1,u=[],s=[];for(t+="",e+="";(n=fs.exec(t))&&(r=_s.exec(e));)(i=r.index)>a&&(i=e.slice(a,i),u[o]?u[o]+=i:u[++o]=i),(n=n[0])===(r=r[0])?u[o]?u[o]+=r:u[++o]=r:(u[++o]=null,s.push({i:o,x:Lr(n,r)})),a=_s.lastIndex;return a<e.length&&(i=e.slice(a),u[o]?u[o]+=i:u[++o]=i),u.length<2?s[0]?(e=s[0].x,function(t){return e(t)+""}):function(){return e}:(e=s.length,function(t){for(var n,r=0;r<e;++r)u[(n=s[r]).i]=n.x(t);return u.join("")})}function wr(t,e){for(var n,r=fo.interpolators.length;--r>=0&&!(n=fo.interpolators[r](t,e)););return n}function Dr(t,e){var n,r=[],i=[],a=t.length,o=e.length,u=Math.min(t.length,e.length);for(n=0;n<u;++n)r.push(wr(t[n],e[n]));for(;n<a;++n)i[n]=t[n];for(;n<o;++n)i[n]=e[n];return function(t){for(n=0;n<u;++n)i[n]=r[n](t);return i}}function xr(t){return function(e){return e<=0?0:e>=1?1:t(e)}}function Yr(t){return function(e){return 1-t(1-e)}}function Tr(t){return function(e){return.5*(e<.5?t(2*e):2-t(2-2*e))}}function Ar(t){return t*t}function Er(t){return t*t*t}function Sr(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,n=e*t;return 4*(t<.5?n:3*(t-e)+n-.75)}function Fr(t){return function(e){return Math.pow(e,t)}}function Cr(t){return 1-Math.cos(t*Uo)}function jr(t){return Math.pow(2,10*(t-1))}function Hr(t){return 1-Math.sqrt(1-t*t)}function Or(t,e){var n;return arguments.length<2&&(e=.45),arguments.length?n=e/zo*Math.asin(1/t):(t=1,n=e/4),function(r){return 1+t*Math.pow(2,-10*r)*Math.sin((r-n)*zo/e)}}function Pr(t){return t||(t=1.70158),function(e){return e*e*((t+1)*e-t)}}function Nr(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function Br(t,e){t=fo.hcl(t),e=fo.hcl(e);var n=t.h,r=t.c,i=t.l,a=e.h-n,o=e.c-r,u=e.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?e.c:r),isNaN(a)?(a=0,n=isNaN(n)?e.h:n):a>180?a-=360:a<-180&&(a+=360),function(t){return pt(n+a*t,r+o*t,i+u*t)+""}}function Ir(t,e){t=fo.hsl(t),e=fo.hsl(e);var n=t.h,r=t.s,i=t.l,a=e.h-n,o=e.s-r,u=e.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?e.s:r),isNaN(a)?(a=0,n=isNaN(n)?e.h:n):a>180?a-=360:a<-180&&(a+=360),function(t){return ft(n+a*t,r+o*t,i+u*t)+""}}function Rr(t,e){t=fo.lab(t),e=fo.lab(e);var n=t.l,r=t.a,i=t.b,a=e.l-n,o=e.a-r,u=e.b-i;return function(t){return yt(n+a*t,r+o*t,i+u*t)+""}}function Wr(t,e){return e-=t,function(n){return Math.round(t+e*n)}}function zr(t){var e=[t.a,t.b],n=[t.c,t.d],r=Ur(e),i=qr(e,n),a=Ur($r(n,e,-i))||0;e[0]*n[1]<n[0]*e[1]&&(e[0]*=-1,e[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(e[1],e[0]):Math.atan2(-n[0],n[1]))*Vo,this.translate=[t.e,t.f],this.scale=[r,a],this.skew=a?Math.atan2(i,a)*Vo:0}function qr(t,e){return t[0]*e[0]+t[1]*e[1]}function Ur(t){var e=Math.sqrt(qr(t,t));return e&&(t[0]/=e,t[1]/=e),e}function $r(t,e,n){return t[0]+=n*e[0],t[1]+=n*e[1],t}function Vr(t){return t.length?t.pop()+",":""}function Gr(t,e,n,r){if(t[0]!==e[0]||t[1]!==e[1]){var i=n.push("translate(",null,",",null,")");r.push({i:i-4,x:Lr(t[0],e[0])},{i:i-2,x:Lr(t[1],e[1])})}else(e[0]||e[1])&&n.push("translate("+e+")")}function Jr(t,e,n,r){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),r.push({i:n.push(Vr(n)+"rotate(",null,")")-2,x:Lr(t,e)})):e&&n.push(Vr(n)+"rotate("+e+")")}function Zr(t,e,n,r){t!==e?r.push({i:n.push(Vr(n)+"skewX(",null,")")-2,x:Lr(t,e)}):e&&n.push(Vr(n)+"skewX("+e+")")}function Kr(t,e,n,r){if(t[0]!==e[0]||t[1]!==e[1]){var i=n.push(Vr(n)+"scale(",null,",",null,")");r.push({i:i-4,x:Lr(t[0],e[0])},{i:i-2,x:Lr(t[1],e[1])})}else 1===e[0]&&1===e[1]||n.push(Vr(n)+"scale("+e+")")}function Xr(t,e){var n=[],r=[];return t=fo.transform(t),e=fo.transform(e),Gr(t.translate,e.translate,n,r),Jr(t.rotate,e.rotate,n,r),Zr(t.skew,e.skew,n,r),Kr(t.scale,e.scale,n,r),t=e=null,function(t){for(var e,i=-1,a=r.length;++i<a;)n[(e=r[i]).i]=e.x(t);return n.join("")}}function Qr(t,e){return e=(e-=t=+t)||1/e,function(n){return(n-t)/e}}function ti(t,e){return e=(e-=t=+t)||1/e,function(n){return Math.max(0,Math.min(1,(n-t)/e))}}function ei(t){for(var e=t.source,n=t.target,r=ri(e,n),i=[e];e!==r;)e=e.parent,i.push(e);for(var a=i.length;n!==r;)i.splice(a,0,n),n=n.parent;return i}function ni(t){for(var e=[],n=t.parent;null!=n;)e.push(t),t=n,n=n.parent;return e.push(t),e}function ri(t,e){if(t===e)return t;for(var n=ni(t),r=ni(e),i=n.pop(),a=r.pop(),o=null;i===a;)o=i,i=n.pop(),a=r.pop();return o}function ii(t){t.fixed|=2}function ai(t){t.fixed&=-7}function oi(t){t.fixed|=4,t.px=t.x,t.py=t.y}function ui(t){t.fixed&=-5}function si(t,e,n){var r=0,i=0;if(t.charge=0,!t.leaf)for(var a,o=t.nodes,u=o.length,s=-1;++s<u;)null!=(a=o[s])&&(si(a,e,n),t.charge+=a.charge,r+=a.charge*a.cx,i+=a.charge*a.cy);if(t.point){t.leaf||(t.point.x+=Math.random()-.5,t.point.y+=Math.random()-.5);var c=e*n[t.point.index];t.charge+=t.pointCharge=c,r+=c*t.point.x,i+=c*t.point.y}t.cx=r/t.charge,t.cy=i/t.charge}function ci(t,e){return fo.rebind(t,e,"sort","children","value"),t.nodes=t,t.links=pi,t}function li(t,e){for(var n=[t];null!=(t=n.pop());)if(e(t),(i=t.children)&&(r=i.length))for(var r,i;--r>=0;)n.push(i[r])}function di(t,e){for(var n=[t],r=[];null!=(t=n.pop());)if(r.push(t),(a=t.children)&&(i=a.length))for(var i,a,o=-1;++o<i;)n.push(a[o]);for(;null!=(t=r.pop());)e(t)}function hi(t){return t.children}function fi(t){return t.value}function _i(t,e){return e.value-t.value}function pi(t){return fo.merge(t.map(function(t){return(t.children||[]).map(function(e){return{source:t,target:e}})}))}function mi(t){return t.x}function yi(t){return t.y}function gi(t,e,n){t.y0=e,t.y=n}function vi(t){return fo.range(t.length)}function Mi(t){for(var e=-1,n=t[0].length,r=[];++e<n;)r[e]=0;return r}function bi(t){for(var e,n=1,r=0,i=t[0][1],a=t.length;n<a;++n)(e=t[n][1])>i&&(r=n,i=e);return r}function Li(t){return t.reduce(ki,0)}function ki(t,e){return t+e[1]}function wi(t,e){return Di(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function Di(t,e){for(var n=-1,r=+t[0],i=(t[1]-r)/e,a=[];++n<=e;)a[n]=i*n+r;return a}function xi(t){return[fo.min(t),fo.max(t)]}function Yi(t,e){return t.value-e.value}function Ti(t,e){var n=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=n,n._pack_prev=e}function Ai(t,e){t._pack_next=e,e._pack_prev=t}function Ei(t,e){var n=e.x-t.x,r=e.y-t.y,i=t.r+e.r;return.999*i*i>n*n+r*r}function Si(t){function e(t){l=Math.min(t.x-t.r,l),d=Math.max(t.x+t.r,d),h=Math.min(t.y-t.r,h),f=Math.max(t.y+t.r,f)}if((n=t.children)&&(c=n.length)){var n,r,i,a,o,u,s,c,l=1/0,d=-1/0,h=1/0,f=-1/0;if(n.forEach(Fi),r=n[0],r.x=-r.r,r.y=0,e(r),c>1&&(i=n[1],i.x=i.r,i.y=0,e(i),c>2))for(a=n[2],Hi(r,i,a),e(a),Ti(r,a),r._pack_prev=a,Ti(a,i),i=r._pack_next,o=3;o<c;o++){Hi(r,i,a=n[o]);var _=0,p=1,m=1;for(u=i._pack_next;u!==i;u=u._pack_next,p++)if(Ei(u,a)){_=1;break}if(1==_)for(s=r._pack_prev;s!==u._pack_prev&&!Ei(s,a);s=s._pack_prev,m++);_?(p<m||p==m&&i.r<r.r?Ai(r,i=u):Ai(r=s,i),o--):(Ti(r,a),i=a,e(a))}var y=(l+d)/2,g=(h+f)/2,v=0;for(o=0;o<c;o++)a=n[o],a.x-=y,a.y-=g,v=Math.max(v,a.r+Math.sqrt(a.x*a.x+a.y*a.y));t.r=v,n.forEach(Ci)}}function Fi(t){t._pack_next=t._pack_prev=t}function Ci(t){delete t._pack_next,delete t._pack_prev}function ji(t,e,n,r){var i=t.children;if(t.x=e+=r*t.x,t.y=n+=r*t.y,t.r*=r,i)for(var a=-1,o=i.length;++a<o;)ji(i[a],e,n,r)}function Hi(t,e,n){var r=t.r+n.r,i=e.x-t.x,a=e.y-t.y;if(r&&(i||a)){var o=e.r+n.r,u=i*i+a*a;o*=o,r*=r;var s=.5+(r-o)/(2*u),c=Math.sqrt(Math.max(0,2*o*(r+u)-(r-=u)*r-o*o))/(2*u);n.x=t.x+s*i+c*a,n.y=t.y+s*a-c*i}else n.x=t.x+r,n.y=t.y}function Oi(t,e){return t.parent==e.parent?1:2}function Pi(t){var e=t.children;return e.length?e[0]:t.t}function Ni(t){var e,n=t.children;return(e=n.length)?n[e-1]:t.t}function Bi(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 Ii(t){for(var e,n=0,r=0,i=t.children,a=i.length;--a>=0;)e=i[a],e.z+=n,e.m+=n,n+=e.s+(r+=e.c)}function Ri(t,e,n){return t.a.parent===e.parent?t.a:n}function Wi(t){return 1+fo.max(t,function(t){return t.y})}function zi(t){return t.reduce(function(t,e){return t+e.x},0)/t.length}function qi(t){var e=t.children;return e&&e.length?qi(e[0]):t}function Ui(t){var e,n=t.children;return n&&(e=n.length)?Ui(n[e-1]):t}function $i(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function Vi(t,e){var n=t.x+e[3],r=t.y+e[0],i=t.dx-e[1]-e[3],a=t.dy-e[0]-e[2];return i<0&&(n+=i/2,i=0),a<0&&(r+=a/2,a=0),{x:n,y:r,dx:i,dy:a}}function Gi(t){var e=t[0],n=t[t.length-1];return e<n?[e,n]:[n,e]}function Ji(t){return t.rangeExtent?t.rangeExtent():Gi(t.range())}function Zi(t,e,n,r){var i=n(t[0],t[1]),a=r(e[0],e[1]);return function(t){return a(i(t))}}function Ki(t,e){var n,r=0,i=t.length-1,a=t[r],o=t[i];return o<a&&(n=r,r=i,i=n,n=a,a=o,o=n),t[r]=e.floor(a),t[i]=e.ceil(o),t}function Xi(t){return t?{floor:function(e){return Math.floor(e/t)*t},ceil:function(e){return Math.ceil(e/t)*t}}:Ds}function Qi(t,e,n,r){var i=[],a=[],o=0,u=Math.min(t.length,e.length)-1;for(t[u]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++o<=u;)i.push(n(t[o-1],t[o])),a.push(r(e[o-1],e[o]));return function(e){var n=fo.bisect(t,e,1,u)-1;return a[n](i[n](e))}}function ta(t,e,n,r){function i(){var i=Math.min(t.length,e.length)>2?Qi:Zi,s=r?ti:Qr;return o=i(t,e,s,n),u=i(e,t,s,wr),a}function a(t){return o(t)}var o,u;return a.invert=function(t){return u(t)},a.domain=function(e){return arguments.length?(t=e.map(Number),i()):t},a.range=function(t){return arguments.length?(e=t,i()):e},a.rangeRound=function(t){return a.range(t).interpolate(Wr)},a.clamp=function(t){return arguments.length?(r=t,i()):r},a.interpolate=function(t){return arguments.length?(n=t,i()):n},a.ticks=function(e){return ia(t,e)},a.tickFormat=function(e,n){return aa(t,e,n)},a.nice=function(e){return na(t,e),i()},a.copy=function(){return ta(t,e,n,r)},i()}function ea(t,e){return fo.rebind(t,e,"range","rangeRound","interpolate","clamp")}function na(t,e){return Ki(t,Xi(ra(t,e)[2])),Ki(t,Xi(ra(t,e)[2])),t}function ra(t,e){null==e&&(e=10);var n=Gi(t),r=n[1]-n[0],i=Math.pow(10,Math.floor(Math.log(r/e)/Math.LN10)),a=e/r*i;return a<=.15?i*=10:a<=.35?i*=5:a<=.75&&(i*=2),n[0]=Math.ceil(n[0]/i)*i,n[1]=Math.floor(n[1]/i)*i+.5*i,n[2]=i,n}function ia(t,e){return fo.range.apply(fo,ra(t,e))}function aa(t,e,n){var r=ra(t,e);if(n){var i=fu.exec(n);if(i.shift(),"s"===i[8]){var a=fo.formatPrefix(Math.max(ko(r[0]),ko(r[1])));return i[7]||(i[7]="."+oa(a.scale(r[2]))),i[8]="f",n=fo.format(i.join("")),function(t){return n(a.scale(t))+a.symbol}}i[7]||(i[7]="."+ua(i[8],r)),n=i.join("")}else n=",."+oa(r[2])+"f";return fo.format(n)}function oa(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}function ua(t,e){var n=oa(e[2]);return t in xs?Math.abs(n-oa(Math.max(ko(e[0]),ko(e[1]))))+ +("e"!==t):n-2*("%"===t)}function sa(t,e,n,r){function i(t){return(n?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function a(t){return n?Math.pow(e,t):-Math.pow(e,-t)}function o(e){return t(i(e))}return o.invert=function(e){return a(t.invert(e))},o.domain=function(e){return arguments.length?(n=e[0]>=0,t.domain((r=e.map(Number)).map(i)),o):r},o.base=function(n){return arguments.length?(e=+n,t.domain(r.map(i)),o):e},o.nice=function(){var e=Ki(r.map(i),n?Math:Ts);return t.domain(e),r=e.map(a),o},o.ticks=function(){var t=Gi(r),o=[],u=t[0],s=t[1],c=Math.floor(i(u)),l=Math.ceil(i(s)),d=e%1?2:e;if(isFinite(l-c)){if(n){for(;c<l;c++)for(var h=1;h<d;h++)o.push(a(c)*h);o.push(a(c))}else for(o.push(a(c));c++<l;)for(var h=d-1;h>0;h--)o.push(a(c)*h);for(c=0;o[c]<u;c++);for(l=o.length;o[l-1]>s;l--);o=o.slice(c,l)}return o},o.tickFormat=function(t,n){if(!arguments.length)return Ys;arguments.length<2?n=Ys:"function"!=typeof n&&(n=fo.format(n));var r=Math.max(1,e*t/o.ticks().length);return function(t){var o=t/a(Math.round(i(t)));return o*e<e-.5&&(o*=e),o<=r?n(t):""}},o.copy=function(){return sa(t.copy(),e,n,r)},ea(o,t)}function ca(t,e,n){function r(e){return t(i(e))}var i=la(e),a=la(1/e);return r.invert=function(e){return a(t.invert(e))},r.domain=function(e){return arguments.length?(t.domain((n=e.map(Number)).map(i)),r):n},r.ticks=function(t){return ia(n,t)},r.tickFormat=function(t,e){return aa(n,t,e)},r.nice=function(t){return r.domain(na(n,t))},r.exponent=function(o){return arguments.length?(i=la(e=o),a=la(1/e),t.domain(n.map(i)),r):e},r.copy=function(){return ca(t.copy(),e,n)},ea(r,t)}function la(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function da(t,e){function n(n){return a[((i.get(n)||("range"===e.t?i.set(n,t.push(n)):NaN))-1)%a.length]}function r(e,n){return fo.range(t.length).map(function(t){return e+n*t})}var i,a,o;return n.domain=function(r){if(!arguments.length)return t;t=[],i=new _;for(var a,o=-1,u=r.length;++o<u;)i.has(a=r[o])||i.set(a,t.push(a));return n[e.t].apply(n,e.a)},n.range=function(t){return arguments.length?(a=t,o=0,e={t:"range",a:arguments},n):a},n.rangePoints=function(i,u){arguments.length<2&&(u=0);var s=i[0],c=i[1],l=t.length<2?(s=(s+c)/2,0):(c-s)/(t.length-1+u);return a=r(s+l*u/2,l),o=0,e={t:"rangePoints",a:arguments},n},n.rangeRoundPoints=function(i,u){arguments.length<2&&(u=0);var s=i[0],c=i[1],l=t.length<2?(s=c=Math.round((s+c)/2),0):(c-s)/(t.length-1+u)|0;return a=r(s+Math.round(l*u/2+(c-s-(t.length-1+u)*l)/2),l),o=0,e={t:"rangeRoundPoints",a:arguments},n},n.rangeBands=function(i,u,s){arguments.length<2&&(u=0),arguments.length<3&&(s=u);var c=i[1]<i[0],l=i[c-0],d=i[1-c],h=(d-l)/(t.length-u+2*s);return a=r(l+h*s,h),c&&a.reverse(),o=h*(1-u),e={t:"rangeBands",a:arguments},n},n.rangeRoundBands=function(i,u,s){arguments.length<2&&(u=0),arguments.length<3&&(s=u);var c=i[1]<i[0],l=i[c-0],d=i[1-c],h=Math.floor((d-l)/(t.length-u+2*s));return a=r(l+Math.round((d-l-(t.length-u)*h)/2),h),c&&a.reverse(),o=Math.round(h*(1-u)),e={t:"rangeRoundBands",a:arguments},n},n.rangeBand=function(){return o},n.rangeExtent=function(){return Gi(e.a[0])},n.copy=function(){return da(t,e)},n.domain(t)}function ha(t,e){function n(){var n=0,a=e.length;for(i=[];++n<a;)i[n-1]=fo.quantile(t,n/a);return r}function r(t){if(!isNaN(t=+t))return e[fo.bisect(i,t)]}var i;return r.domain=function(e){return arguments.length?(t=e.map(s).filter(c).sort(u),n()):t},r.range=function(t){return arguments.length?(e=t,n()):e},r.quantiles=function(){return i},r.invertExtent=function(n){return n=e.indexOf(n),n<0?[NaN,NaN]:[n>0?i[n-1]:t[0],n<i.length?i[n]:t[t.length-1]]},r.copy=function(){return ha(t,e)},n()}function fa(t,e,n){function r(e){return n[Math.max(0,Math.min(o,Math.floor(a*(e-t))))]}function i(){return a=n.length/(e-t),o=n.length-1,r}var a,o;return r.domain=function(n){return arguments.length?(t=+n[0],e=+n[n.length-1],i()):[t,e]},r.range=function(t){return arguments.length?(n=t,i()):n},r.invertExtent=function(e){return e=n.indexOf(e),e=e<0?NaN:e/a+t,[e,e+1/a]},r.copy=function(){return fa(t,e,n)},i()}function _a(t,e){function n(n){if(n<=n)return e[fo.bisect(t,n)]}return n.domain=function(e){return arguments.length?(t=e,n):t},n.range=function(t){return arguments.length?(e=t,n):e},n.invertExtent=function(n){return n=e.indexOf(n),[t[n-1],t[n]]},n.copy=function(){return _a(t,e)},n}function pa(t){function e(t){return+t}return e.invert=e,e.domain=e.range=function(n){return arguments.length?(t=n.map(e),e):t},e.ticks=function(e){return ia(t,e)},e.tickFormat=function(e,n){return aa(t,e,n)},e.copy=function(){return pa(t)},e}function ma(){return 0}function ya(t){return t.innerRadius}function ga(t){return t.outerRadius}function va(t){return t.startAngle}function Ma(t){return t.endAngle}function ba(t){return t&&t.padAngle}function La(t,e,n,r){return(t-n)*e-(e-r)*t>0?0:1}function ka(t,e,n,r,i){var a=t[0]-e[0],o=t[1]-e[1],u=(i?r:-r)/Math.sqrt(a*a+o*o),s=u*o,c=-u*a,l=t[0]+s,d=t[1]+c,h=e[0]+s,f=e[1]+c,_=(l+h)/2,p=(d+f)/2,m=h-l,y=f-d,g=m*m+y*y,v=n-r,M=l*f-h*d,b=(y<0?-1:1)*Math.sqrt(Math.max(0,v*v*g-M*M)),L=(M*y-m*b)/g,k=(-M*m-y*b)/g,w=(M*y+m*b)/g,D=(-M*m+y*b)/g,x=L-_,Y=k-p,T=w-_,A=D-p;return x*x+Y*Y>T*T+A*A&&(L=w,k=D),[[L-s,k-c],[L*n/v,k*n/v]]}function wa(t){function e(e){function o(){c.push("M",a(t(l),u))}for(var s,c=[],l=[],d=-1,h=e.length,f=St(n),_=St(r);++d<h;)i.call(this,s=e[d],d)?l.push([+f.call(this,s,d),+_.call(this,s,d)]):l.length&&(o(),l=[]);return l.length&&o(),c.length?c.join(""):null}var n=jn,r=Hn,i=je,a=Da,o=a.key,u=.7;return e.x=function(t){return arguments.length?(n=t,e):n},e.y=function(t){return arguments.length?(r=t,e):r},e.defined=function(t){return arguments.length?(i=t,e):i},e.interpolate=function(t){return arguments.length?(o="function"==typeof t?a=t:(a=js.get(t)||Da).key,e):o},e.tension=function(t){return arguments.length?(u=t,e):u},e}function Da(t){return t.length>1?t.join("L"):t+"Z"}function xa(t){return t.join("L")+"Z"}function Ya(t){for(var e=0,n=t.length,r=t[0],i=[r[0],",",r[1]];++e<n;)i.push("H",(r[0]+(r=t[e])[0])/2,"V",r[1]);return n>1&&i.push("H",r[0]),i.join("")}function Ta(t){for(var e=0,n=t.length,r=t[0],i=[r[0],",",r[1]];++e<n;)i.push("V",(r=t[e])[1],"H",r[0]);return i.join("")}function Aa(t){for(var e=0,n=t.length,r=t[0],i=[r[0],",",r[1]];++e<n;)i.push("H",(r=t[e])[0],"V",r[1]);return i.join("")}function Ea(t,e){return t.length<4?Da(t):t[1]+Ca(t.slice(1,-1),ja(t,e))}function Sa(t,e){return t.length<3?xa(t):t[0]+Ca((t.push(t[0]),t),ja([t[t.length-2]].concat(t,[t[1]]),e))}function Fa(t,e){return t.length<3?Da(t):t[0]+Ca(t,ja(t,e))}function Ca(t,e){if(e.length<1||t.length!=e.length&&t.length!=e.length+2)return Da(t);var n=t.length!=e.length,r="",i=t[0],a=t[1],o=e[0],u=o,s=1;if(n&&(r+="Q"+(a[0]-2*o[0]/3)+","+(a[1]-2*o[1]/3)+","+a[0]+","+a[1],i=t[1],s=2),e.length>1){u=e[1],a=t[s],s++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(a[0]-u[0])+","+(a[1]-u[1])+","+a[0]+","+a[1];for(var c=2;c<e.length;c++,s++)a=t[s],u=e[c],r+="S"+(a[0]-u[0])+","+(a[1]-u[1])+","+a[0]+","+a[1]}if(n){var l=t[s];r+="Q"+(a[0]+2*u[0]/3)+","+(a[1]+2*u[1]/3)+","+l[0]+","+l[1]}return r}function ja(t,e){for(var n,r=[],i=(1-e)/2,a=t[0],o=t[1],u=1,s=t.length;++u<s;)n=a,a=o,o=t[u],r.push([i*(o[0]-n[0]),i*(o[1]-n[1])]);return r}function Ha(t){if(t.length<3)return Da(t);var e=1,n=t.length,r=t[0],i=r[0],a=r[1],o=[i,i,i,(r=t[1])[0]],u=[a,a,a,r[1]],s=[i,",",a,"L",Ba(Ps,o),",",Ba(Ps,u)];for(t.push(t[n-1]);++e<=n;)r=t[e],o.shift(),o.push(r[0]),u.shift(),u.push(r[1]),Ia(s,o,u);return t.pop(),s.push("L",r),s.join("")}function Oa(t){if(t.length<4)return Da(t);for(var e,n=[],r=-1,i=t.length,a=[0],o=[0];++r<3;)e=t[r],a.push(e[0]),o.push(e[1]);for(n.push(Ba(Ps,a)+","+Ba(Ps,o)),--r;++r<i;)e=t[r],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),Ia(n,a,o);return n.join("")}function Pa(t){for(var e,n,r=-1,i=t.length,a=i+4,o=[],u=[];++r<4;)n=t[r%i],o.push(n[0]),u.push(n[1]);for(e=[Ba(Ps,o),",",Ba(Ps,u)],--r;++r<a;)n=t[r%i],o.shift(),o.push(n[0]),u.shift(),u.push(n[1]),Ia(e,o,u);return e.join("")}function Na(t,e){var n=t.length-1;if(n)for(var r,i,a=t[0][0],o=t[0][1],u=t[n][0]-a,s=t[n][1]-o,c=-1;++c<=n;)r=t[c],i=c/n,r[0]=e*r[0]+(1-e)*(a+i*u),r[1]=e*r[1]+(1-e)*(o+i*s);return Ha(t)}function Ba(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function Ia(t,e,n){t.push("C",Ba(Hs,e),",",Ba(Hs,n),",",Ba(Os,e),",",Ba(Os,n),",",Ba(Ps,e),",",Ba(Ps,n))}function Ra(t,e){return(e[1]-t[1])/(e[0]-t[0])}function Wa(t){for(var e=0,n=t.length-1,r=[],i=t[0],a=t[1],o=r[0]=Ra(i,a);++e<n;)r[e]=(o+(o=Ra(i=a,a=t[e+1])))/2;return r[e]=o,r}function za(t){for(var e,n,r,i,a=[],o=Wa(t),u=-1,s=t.length-1;++u<s;)e=Ra(t[u],t[u+1]),ko(e)<Io?o[u]=o[u+1]=0:(n=o[u]/e,r=o[u+1]/e,(i=n*n+r*r)>9&&(i=3*e/Math.sqrt(i),o[u]=i*n,o[u+1]=i*r));for(u=-1;++u<=s;)i=(t[Math.min(s,u+1)][0]-t[Math.max(0,u-1)][0])/(6*(1+o[u]*o[u])),a.push([i||0,o[u]*i||0]);return a}function qa(t){return t.length<3?Da(t):t[0]+Ca(t,za(t))}function Ua(t){for(var e,n,r,i=-1,a=t.length;++i<a;)e=t[i],n=e[0],r=e[1]-Uo,e[0]=n*Math.cos(r),e[1]=n*Math.sin(r);return t}function $a(t){function e(e){function s(){p.push("M",u(t(y),d),l,c(t(m.reverse()),d),"Z")}for(var h,f,_,p=[],m=[],y=[],g=-1,v=e.length,M=St(n),b=St(i),L=n===r?function(){return f}:St(r),k=i===a?function(){return _}:St(a);++g<v;)o.call(this,h=e[g],g)?(m.push([f=+M.call(this,h,g),_=+b.call(this,h,g)]),y.push([+L.call(this,h,g),+k.call(this,h,g)])):m.length&&(s(),m=[],y=[]);return m.length&&s(),p.length?p.join(""):null}var n=jn,r=jn,i=0,a=Hn,o=je,u=Da,s=u.key,c=u,l="L",d=.7;return e.x=function(t){return arguments.length?(n=r=t,e):r},e.x0=function(t){return arguments.length?(n=t,e):n},e.x1=function(t){return arguments.length?(r=t,e):r},e.y=function(t){return arguments.length?(i=a=t,e):a},e.y0=function(t){return arguments.length?(i=t,e):i},e.y1=function(t){return arguments.length?(a=t,e):a},e.defined=function(t){return arguments.length?(o=t,e):o},e.interpolate=function(t){return arguments.length?(s="function"==typeof t?u=t:(u=js.get(t)||Da).key,c=u.reverse||u,l=u.closed?"M":"L",e):s},e.tension=function(t){return arguments.length?(d=t,e):d},e}function Va(t){return t.radius}function Ga(t){return[t.x,t.y]}function Ja(t){return function(){var e=t.apply(this,arguments),n=e[0],r=e[1]-Uo;return[n*Math.cos(r),n*Math.sin(r)]}}function Za(){return 64}function Ka(){return"circle"}function Xa(t){var e=Math.sqrt(t/Wo);return"M0,"+e+"A"+e+","+e+" 0 1,1 0,"+-e+"A"+e+","+e+" 0 1,1 0,"+e+"Z"}function Qa(t){return function(){var e,n,r;(e=this[t])&&(r=e[n=e.active])&&(r.timer.c=null,r.timer.t=NaN,--e.count?delete e[n]:delete this[t],e.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function to(t,e,n){return To(t,qs),t.namespace=e,t.id=n,t}function eo(t,e,n,r){var i=t.id,a=t.namespace;return G(t,"function"==typeof n?function(t,o,u){t[a][i].tween.set(e,r(n.call(t,t.__data__,o,u)))}:(n=r(n),function(t){t[a][i].tween.set(e,n)}))}function no(t){return null==t&&(t=""),function(){this.textContent=t}}function ro(t){return null==t?"__transition__":"__transition_"+t+"__"}function io(t,e,n,r,i){function a(t){var e=p.delay;if(c.t=e+s,e<=t)return o(t-e);c.c=o}function o(n){var i=f.active,a=f[i];a&&(a.timer.c=null,a.timer.t=NaN,--f.count,delete f[i],a.event&&a.event.interrupt.call(t,t.__data__,a.index));for(var o in f)if(+o<r){var _=f[o];_.timer.c=null,_.timer.t=NaN,--f.count,delete f[o]}c.c=u,Ot(function(){return c.c&&u(n||1)&&(c.c=null,c.t=NaN),1},0,s),f.active=r,p.event&&p.event.start.call(t,t.__data__,e),h=[],p.tween.forEach(function(n,r){(r=r.call(t,t.__data__,e))&&h.push(r)}),d=p.ease,l=p.duration}function u(i){for(var a=i/l,o=d(a),u=h.length;u>0;)h[--u].call(t,o);if(a>=1)return p.event&&p.event.end.call(t,t.__data__,e),--f.count?delete f[r]:delete t[n],1}var s,c,l,d,h,f=t[n]||(t[n]={active:0,count:0}),p=f[r];p||(s=i.time,c=Ot(a,0,s),p=f[r]={tween:new _,time:s,timer:c,delay:i.delay,duration:i.duration,ease:i.ease,index:e},i=null,++f.count)}function ao(t,e,n){t.attr("transform",function(t){var r=e(t);return"translate("+(isFinite(r)?r:n(t))+",0)"})}function oo(t,e,n){t.attr("transform",function(t){var r=e(t);return"translate(0,"+(isFinite(r)?r:n(t))+")"})}function uo(t){return t.toISOString()}function so(t,e,n){function r(e){return t(e)}function i(t,n){var r=t[1]-t[0],i=r/n,a=fo.bisect(Qs,i);return a==Qs.length?[e.year,ra(t.map(function(t){return t/31536e6}),n)[2]]:a?e[i/Qs[a-1]<Qs[a]/i?a-1:a]:[nc,ra(t,n)[2]]}return r.invert=function(e){return co(t.invert(e))},r.domain=function(e){return arguments.length?(t.domain(e),r):t.domain().map(co)},r.nice=function(t,e){function n(n){return!isNaN(n)&&!t.range(n,co(+n+1),e).length}var a=r.domain(),o=Gi(a),u=null==t?i(o,10):"number"==typeof t&&i(o,t);return u&&(t=u[0],e=u[1]),r.domain(Ki(a,e>1?{floor:function(e){for(;n(e=t.floor(e));)e=co(e-1);return e},ceil:function(e){for(;n(e=t.ceil(e));)e=co(+e+1);return e}}:t))},r.ticks=function(t,e){var n=Gi(r.domain()),a=null==t?i(n,10):"number"==typeof t?i(n,t):!t.range&&[{range:t},e];return a&&(t=a[0],e=a[1]),t.range(n[0],co(+n[1]+1),e<1?1:e)},r.tickFormat=function(){return n},r.copy=function(){return so(t.copy(),e,n)},ea(r,t)}function co(t){return new Date(t)}function lo(t){return JSON.parse(t.responseText)}function ho(t){var e=mo.createRange();return e.selectNode(mo.body),e.createContextualFragment(t.responseText)}var fo={version:"3.5.17"},_o=[].slice,po=function(t){return _o.call(t)},mo=this.document;if(mo)try{po(mo.documentElement.childNodes)[0].nodeType}catch(t){po=function(t){for(var e=t.length,n=new Array(e);e--;)n[e]=t[e];return n}}if(Date.now||(Date.now=function(){return+new Date}),mo)try{mo.createElement("DIV").style.setProperty("opacity",0,"")}catch(t){var yo=this.Element.prototype,go=yo.setAttribute,vo=yo.setAttributeNS,Mo=this.CSSStyleDeclaration.prototype,bo=Mo.setProperty;yo.setAttribute=function(t,e){go.call(this,t,e+"")},yo.setAttributeNS=function(t,e,n){vo.call(this,t,e,n+"")},Mo.setProperty=function(t,e,n){bo.call(this,t,e+"",n)}}fo.ascending=u,fo.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},fo.min=function(t,e){var n,r,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(r=t[i])&&r>=r){n=r;break}for(;++i<a;)null!=(r=t[i])&&n>r&&(n=r)}else{for(;++i<a;)if(null!=(r=e.call(t,t[i],i))&&r>=r){n=r;break}for(;++i<a;)null!=(r=e.call(t,t[i],i))&&n>r&&(n=r)}return n},fo.max=function(t,e){var n,r,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(r=t[i])&&r>=r){n=r;break}for(;++i<a;)null!=(r=t[i])&&r>n&&(n=r)}else{for(;++i<a;)if(null!=(r=e.call(t,t[i],i))&&r>=r){n=r;break}for(;++i<a;)null!=(r=e.call(t,t[i],i))&&r>n&&(n=r)}return n},fo.extent=function(t,e){var n,r,i,a=-1,o=t.length;if(1===arguments.length){for(;++a<o;)if(null!=(r=t[a])&&r>=r){n=i=r;break}for(;++a<o;)null!=(r=t[a])&&(n>r&&(n=r),i<r&&(i=r))}else{for(;++a<o;)if(null!=(r=e.call(t,t[a],a))&&r>=r){n=i=r;break}for(;++a<o;)null!=(r=e.call(t,t[a],a))&&(n>r&&(n=r),i<r&&(i=r))}return[n,i]},fo.sum=function(t,e){var n,r=0,i=t.length,a=-1;if(1===arguments.length)for(;++a<i;)c(n=+t[a])&&(r+=n);else for(;++a<i;)c(n=+e.call(t,t[a],a))&&(r+=n);return r},fo.mean=function(t,e){var n,r=0,i=t.length,a=-1,o=i;if(1===arguments.length)for(;++a<i;)c(n=s(t[a]))?r+=n:--o;else for(;++a<i;)c(n=s(e.call(t,t[a],a)))?r+=n:--o;if(o)return r/o},fo.quantile=function(t,e){var n=(t.length-1)*e+1,r=Math.floor(n),i=+t[r-1],a=n-r;return a?i+a*(t[r]-i):i},fo.median=function(t,e){var n,r=[],i=t.length,a=-1;if(1===arguments.length)for(;++a<i;)c(n=s(t[a]))&&r.push(n);else for(;++a<i;)c(n=s(e.call(t,t[a],a)))&&r.push(n);if(r.length)return fo.quantile(r.sort(u),.5)},fo.variance=function(t,e){var n,r,i=t.length,a=0,o=0,u=-1,l=0;if(1===arguments.length)for(;++u<i;)c(n=s(t[u]))&&(r=n-a,a+=r/++l,o+=r*(n-a));else for(;++u<i;)c(n=s(e.call(t,t[u],u)))&&(r=n-a,a+=r/++l,o+=r*(n-a));if(l>1)return o/(l-1)},fo.deviation=function(){var t=fo.variance.apply(this,arguments);return t?Math.sqrt(t):t};var Lo=l(u);fo.bisectLeft=Lo.left,fo.bisect=fo.bisectRight=Lo.right,fo.bisector=function(t){return l(1===t.length?function(e,n){return u(t(e),n)}:t)},fo.shuffle=function(t,e,n){(a=arguments.length)<3&&(n=t.length,a<2&&(e=0));for(var r,i,a=n-e;a;)i=Math.random()*a--|0,r=t[a+e],t[a+e]=t[i+e],t[i+e]=r;return t},fo.permute=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},fo.pairs=function(t){for(var e=0,n=t.length-1,r=t[0],i=new Array(n<0?0:n);e<n;)i[e]=[r,r=t[++e]];return i},fo.transpose=function(t){if(!(i=t.length))return[];for(var e=-1,n=fo.min(t,d),r=new Array(n);++e<n;)for(var i,a=-1,o=r[e]=new Array(i);++a<i;)o[a]=t[a][e];return r},fo.zip=function(){return fo.transpose(arguments)},fo.keys=function(t){var e=[];for(var n in t)e.push(n);return e},fo.values=function(t){var e=[];for(var n in t)e.push(t[n]);return e},fo.entries=function(t){var e=[];for(var n in t)e.push({key:n,value:t[n]});return e},fo.merge=function(t){for(var e,n,r,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(n=new Array(o);--i>=0;)for(r=t[i],e=r.length;--e>=0;)n[--o]=r[e];return n};var ko=Math.abs;fo.range=function(t,e,n){if(arguments.length<3&&(n=1,arguments.length<2&&(e=t,t=0)),(e-t)/n==1/0)throw new Error("infinite range");var r,i=[],a=h(ko(n)),o=-1;if(t*=a,e*=a,n*=a,n<0)for(;(r=t+n*++o)>e;)i.push(r/a);else for(;(r=t+n*++o)<e;)i.push(r/a);return i},fo.map=function(t,e){var n=new _;if(t instanceof _)t.forEach(function(t,e){n.set(t,e)});else if(Array.isArray(t)){var r,i=-1,a=t.length;if(1===arguments.length)for(;++i<a;)n.set(i,t[i]);else for(;++i<a;)n.set(e.call(t,r=t[i],i),r)}else for(var o in t)n.set(o,t[o]);return n};var wo="__proto__",Do="\0";f(_,{has:y,get:function(t){return this._[p(t)]},set:function(t,e){return this._[p(t)]=e},remove:g,keys:v,values:function(){var t=[];for(var e in this._)t.push(this._[e]);return t},entries:function(){var t=[];for(var e in this._)t.push({key:m(e),value:this._[e]});return t},size:M,empty:b,forEach:function(t){for(var e in this._)t.call(this,m(e),this._[e])}}),fo.nest=function(){function t(e,o,u){if(u>=a.length)return r?r.call(i,o):n?o.sort(n):o;for(var s,c,l,d,h=-1,f=o.length,p=a[u++],m=new _;++h<f;)(d=m.get(s=p(c=o[h])))?d.push(c):m.set(s,[c]);return e?(c=e(),l=function(n,r){c.set(n,t(e,r,u))}):(c={},l=function(n,r){c[n]=t(e,r,u)}),m.forEach(l),c}function e(t,n){if(n>=a.length)return t;var r=[],i=o[n++];return t.forEach(function(t,i){r.push({key:t,values:e(i,n)})}),i?r.sort(function(t,e){return i(t.key,e.key)}):r}var n,r,i={},a=[],o=[];return i.map=function(e,n){return t(n,e,0)},i.entries=function(n){return e(t(fo.map,n,0),0)},i.key=function(t){return a.push(t),i},i.sortKeys=function(t){return o[a.length-1]=t,i},i.sortValues=function(t){return n=t,i},i.rollup=function(t){return r=t,i},i},fo.set=function(t){var e=new L;if(t)for(var n=0,r=t.length;n<r;++n)e.add(t[n]);return e},f(L,{has:y,add:function(t){return this._[p(t+="")]=!0,t},remove:g,values:v,size:M,empty:b,forEach:function(t){for(var e in this._)t.call(this,m(e))}}),fo.behavior={},fo.rebind=function(t,e){for(var n,r=1,i=arguments.length;++r<i;)t[n=arguments[r]]=w(t,e,e[n]);return t};var xo=["webkit","ms","moz","Moz","o","O"];fo.dispatch=function(){for(var t=new Y,e=-1,n=arguments.length;++e<n;)t[arguments[e]]=T(t);return t},Y.prototype.on=function(t,e){var n=t.indexOf("."),r="";if(n>=0&&(r=t.slice(n+1),t=t.slice(0,n)),t)return arguments.length<2?this[t].on(r):this[t].on(r,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(r,null);return this}},fo.event=null,fo.requote=function(t){return t.replace(Yo,"\\$&")};var Yo=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,To={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var n in e)t[n]=e[n]},Ao=function(t,e){return e.querySelector(t)},Eo=function(t,e){return e.querySelectorAll(t)},So=function(t,e){var n=t.matches||t[D(t,"matchesSelector")];return(So=function(t,e){return n.call(t,e)})(t,e)};"function"==typeof Sizzle&&(Ao=function(t,e){return Sizzle(t,e)[0]||null},Eo=Sizzle,So=Sizzle.matchesSelector),fo.selection=function(){return fo.select(mo.documentElement)};var Fo=fo.selection.prototype=[];Fo.select=function(t){var e,n,r,i,a=[];t=C(t);for(var o=-1,u=this.length;++o<u;){a.push(e=[]),e.parentNode=(r=this[o]).parentNode;for(var s=-1,c=r.length;++s<c;)(i=r[s])?(e.push(n=t.call(i,i.__data__,s,o)),n&&"__data__"in i&&(n.__data__=i.__data__)):e.push(null)}return F(a)},Fo.selectAll=function(t){var e,n,r=[];t=j(t);for(var i=-1,a=this.length;++i<a;)for(var o=this[i],u=-1,s=o.length;++u<s;)(n=o[u])&&(r.push(e=po(t.call(n,n.__data__,u,i))),e.parentNode=n);return F(r)};var Co="http://www.w3.org/1999/xhtml",jo={svg:"http://www.w3.org/2000/svg",xhtml:Co,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};fo.ns={prefix:jo,qualify:function(t){var e=t.indexOf(":"),n=t;return e>=0&&"xmlns"!==(n=t.slice(0,e))&&(t=t.slice(e+1)),jo.hasOwnProperty(n)?{space:jo[n],local:t}:t}},Fo.attr=function(t,e){if(arguments.length<2){if("string"==typeof t){var n=this.node();return t=fo.ns.qualify(t),t.local?n.getAttributeNS(t.space,t.local):n.getAttribute(t)}for(e in t)this.each(H(e,t[e]));return this}return this.each(H(t,e))},Fo.classed=function(t,e){if(arguments.length<2){if("string"==typeof t){var n=this.node(),r=(t=N(t)).length,i=-1;if(e=n.classList){for(;++i<r;)if(!e.contains(t[i]))return!1}else for(e=n.getAttribute("class");++i<r;)if(!P(t[i]).test(e))return!1;return!0}for(e in t)this.each(B(e,t[e]));return this}return this.each(B(t,e))},Fo.style=function(t,e,n){var r=arguments.length;if(r<3){if("string"!=typeof t){r<2&&(e="");for(n in t)this.each(R(n,t[n],e));return this}if(r<2){var i=this.node();return o(i).getComputedStyle(i,null).getPropertyValue(t)}n=""}return this.each(R(t,e,n))},Fo.property=function(t,e){if(arguments.length<2){if("string"==typeof t)return this.node()[t];for(e in t)this.each(W(e,t[e]));return this}return this.each(W(t,e))},Fo.text=function(t){return arguments.length?this.each("function"==typeof t?function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}:null==t?function(){this.textContent=""}:function(){this.textContent=t}):this.node().textContent},Fo.html=function(t){return arguments.length?this.each("function"==typeof t?function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}:null==t?function(){this.innerHTML=""}:function(){this.innerHTML=t}):this.node().innerHTML},Fo.append=function(t){return t=z(t),this.select(function(){return this.appendChild(t.apply(this,arguments))})},Fo.insert=function(t,e){return t=z(t),e=C(e),this.select(function(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)})},Fo.remove=function(){return this.each(q)},Fo.data=function(t,e){function n(t,n){var r,i,a,o=t.length,l=n.length,d=Math.min(o,l),h=new Array(l),f=new Array(l),p=new Array(o);if(e){var m,y=new _,g=new Array(o);for(r=-1;++r<o;)(i=t[r])&&(y.has(m=e.call(i,i.__data__,r))?p[r]=i:y.set(m,i),g[r]=m);for(r=-1;++r<l;)(i=y.get(m=e.call(n,a=n[r],r)))?!0!==i&&(h[r]=i,i.__data__=a):f[r]=U(a),y.set(m,!0);for(r=-1;++r<o;)r in g&&!0!==y.get(g[r])&&(p[r]=t[r])}else{for(r=-1;++r<d;)i=t[r],a=n[r],i?(i.__data__=a,h[r]=i):f[r]=U(a);for(;r<l;++r)f[r]=U(n[r]);for(;r<o;++r)p[r]=t[r]}f.update=h,f.parentNode=h.parentNode=p.parentNode=t.parentNode,u.push(f),s.push(h),c.push(p)}var r,i,a=-1,o=this.length;if(!arguments.length){for(t=new Array(o=(r=this[0]).length);++a<o;)(i=r[a])&&(t[a]=i.__data__);return t}var u=J([]),s=F([]),c=F([]);if("function"==typeof t)for(;++a<o;)n(r=this[a],t.call(r,r.parentNode.__data__,a));else for(;++a<o;)n(r=this[a],t);return s.enter=function(){return u},s.exit=function(){return c},s},Fo.datum=function(t){return arguments.length?this.property("__data__",t):this.property("__data__")},Fo.filter=function(t){var e,n,r,i=[];"function"!=typeof t&&(t=$(t));for(var a=0,o=this.length;a<o;a++){i.push(e=[]),e.parentNode=(n=this[a]).parentNode;for(var u=0,s=n.length;u<s;u++)(r=n[u])&&t.call(r,r.__data__,u,a)&&e.push(r)}return F(i)},Fo.order=function(){for(var t=-1,e=this.length;++t<e;)for(var n,r=this[t],i=r.length-1,a=r[i];--i>=0;)(n=r[i])&&(a&&a!==n.nextSibling&&a.parentNode.insertBefore(n,a),a=n);return this},Fo.sort=function(t){t=V.apply(this,arguments);for(var e=-1,n=this.length;++e<n;)this[e].sort(t);return this.order()},Fo.each=function(t){return G(this,function(e,n,r){t.call(e,e.__data__,n,r)})},Fo.call=function(t){var e=po(arguments);return t.apply(e[0]=this,e),this},Fo.empty=function(){return!this.node()},Fo.node=function(){for(var t=0,e=this.length;t<e;t++)for(var n=this[t],r=0,i=n.length;r<i;r++){var a=n[r];if(a)return a}return null},Fo.size=function(){var t=0;return G(this,function(){++t}),t};var Ho=[];fo.selection.enter=J,fo.selection.enter.prototype=Ho,Ho.append=Fo.append,Ho.empty=Fo.empty,Ho.node=Fo.node,Ho.call=Fo.call,Ho.size=Fo.size,Ho.select=function(t){for(var e,n,r,i,a,o=[],u=-1,s=this.length;++u<s;){r=(i=this[u]).update,o.push(e=[]),e.parentNode=i.parentNode;for(var c=-1,l=i.length;++c<l;)(a=i[c])?(e.push(r[c]=n=t.call(i.parentNode,a.__data__,c,u)),n.__data__=a.__data__):e.push(null)}return F(o)},Ho.insert=function(t,e){return arguments.length<2&&(e=Z(this)),Fo.insert.call(this,t,e)},fo.select=function(t){var e;return"string"==typeof t?(e=[Ao(t,mo)],e.parentNode=mo.documentElement):(e=[t],e.parentNode=a(t)),F([e])},fo.selectAll=function(t){var e;return"string"==typeof t?(e=po(Eo(t,mo)),e.parentNode=mo.documentElement):(e=po(t),e.parentNode=null),F([e])},Fo.on=function(t,e,n){var r=arguments.length;if(r<3){if("string"!=typeof t){r<2&&(e=!1);for(n in t)this.each(K(n,t[n],e));return this}if(r<2)return(r=this.node()["__on"+t])&&r._;n=!1}return this.each(K(t,e,n))};var Oo=fo.map({mouseenter:"mouseover",mouseleave:"mouseout"});mo&&Oo.forEach(function(t){"on"+t in mo&&Oo.remove(t)});var Po,No=0;fo.mouse=function(t){return et(t,E())};var Bo=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;fo.touch=function(t,e,n){if(arguments.length<3&&(n=e,e=E().changedTouches),e)for(var r,i=0,a=e.length;i<a;++i)if((r=e[i]).identifier===n)return et(t,r)},fo.behavior.drag=function(){function t(){this.on("mousedown.drag",i).on("touchstart.drag",a)}function e(t,e,i,a,o){return function(){function u(){var t,n,r=e(h,p);r&&(t=r[0]-v[0],n=r[1]-v[1],_|=t|n,v=r,f({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:t,dy:n}))}function s(){e(h,p)&&(y.on(a+m,null).on(o+m,null),g(_),f({type:"dragend"}))}var c,l=this,d=fo.event.target.correspondingElement||fo.event.target,h=l.parentNode,f=n.of(l,arguments),_=0,p=t(),m=".drag"+(null==p?"":"-"+p),y=fo.select(i(d)).on(a+m,u).on(o+m,s),g=tt(d),v=e(h,p);r?(c=r.apply(l,arguments),c=[c.x-v[0],c.y-v[1]]):c=[0,0],f({type:"dragstart"})}}var n=S(t,"drag","dragstart","dragend"),r=null,i=e(x,fo.mouse,o,"mousemove","mouseup"),a=e(nt,fo.touch,k,"touchmove","touchend");return t.origin=function(e){return arguments.length?(r=e,t):r},fo.rebind(t,n,"on")},fo.touches=function(t,e){return arguments.length<2&&(e=E().touches),e?po(e).map(function(e){var n=et(t,e);return n.identifier=e.identifier,n}):[]};var Io=1e-6,Ro=Io*Io,Wo=Math.PI,zo=2*Wo,qo=zo-Io,Uo=Wo/2,$o=Wo/180,Vo=180/Wo,Go=Math.SQRT2;fo.interpolateZoom=function(t,e){var n,r,i=t[0],a=t[1],o=t[2],u=e[0],s=e[1],c=e[2],l=u-i,d=s-a,h=l*l+d*d;if(h<Ro)r=Math.log(c/o)/Go,n=function(t){return[i+t*l,a+t*d,o*Math.exp(Go*t*r)]};else{var f=Math.sqrt(h),_=(c*c-o*o+4*h)/(2*o*2*f),p=(c*c-o*o-4*h)/(2*c*2*f),m=Math.log(Math.sqrt(_*_+1)-_),y=Math.log(Math.sqrt(p*p+1)-p);r=(y-m)/Go,n=function(t){var e=t*r,n=st(m),u=o/(2*f)*(n*ct(Go*e+m)-ut(m));return[i+u*l,a+u*d,o*n/st(Go*e+m)]}}return n.duration=1e3*r,n},fo.behavior.zoom=function(){function t(t){t.on(E,d).on(Zo+".zoom",f).on("dblclick.zoom",_).on(j,h)}function e(t){return[(t[0]-w.x)/w.k,(t[1]-w.y)/w.k]}function n(t){return[t[0]*w.k+w.x,t[1]*w.k+w.y]}function r(t){w.k=Math.max(x[0],Math.min(x[1],t))}function i(t,e){e=n(e),w.x+=t[0]-e[0],w.y+=t[1]-e[1]}function a(e,n,a,o){e.__chart__={x:w.x,y:w.y,k:w.k},r(Math.pow(2,o)),i(m=n,a),e=fo.select(e),Y>0&&(e=e.transition().duration(Y)),e.call(t.event)}function u(){b&&b.domain(M.range().map(function(t){return(t-w.x)/w.k}).map(M.invert)),k&&k.domain(L.range().map(function(t){return(t-w.y)/w.k}).map(L.invert))}function s(t){T++||t({type:"zoomstart"})}function c(t){u(),t({type:"zoom",scale:w.k,translate:[w.x,w.y]})}function l(t){--T||(t({type:"zoomend"}),m=null)}function d(){function t(){u=1,i(fo.mouse(r),h),c(a)}function n(){d.on(F,null).on(C,null),f(u),l(a)}var r=this,a=H.of(r,arguments),u=0,d=fo.select(o(r)).on(F,t).on(C,n),h=e(fo.mouse(r)),f=tt(r);zs.call(r),s(a)}function h(){function t(){var t=fo.touches(_);return f=w.k,t.forEach(function(t){t.identifier in m&&(m[t.identifier]=e(t))}),t}function n(){var e=fo.event.target;fo.select(e).on(M,o).on(b,u),L.push(e);for(var n=fo.event.changedTouches,r=0,i=n.length;r<i;++r)m[n[r].identifier]=null;var s=t(),c=Date.now();if(1===s.length){if(c-v<500){var l=s[0];a(_,l,m[l.identifier],Math.floor(Math.log(w.k)/Math.LN2)+1),A()}v=c}else if(s.length>1){var l=s[0],d=s[1],h=l[0]-d[0],f=l[1]-d[1];y=h*h+f*f}}function o(){var t,e,n,a,o=fo.touches(_);zs.call(_);for(var u=0,s=o.length;u<s;++u,a=null)if(n=o[u],a=m[n.identifier]){if(e)break;t=n,e=a}if(a){var l=(l=n[0]-t[0])*l+(l=n[1]-t[1])*l,d=y&&Math.sqrt(l/y);t=[(t[0]+n[0])/2,(t[1]+n[1])/2],e=[(e[0]+a[0])/2,(e[1]+a[1])/2],r(d*f)}v=null,i(t,e),c(p)}function u(){if(fo.event.touches.length){for(var e=fo.event.changedTouches,n=0,r=e.length;n<r;++n)delete m[e[n].identifier];for(var i in m)return void t()}fo.selectAll(L).on(g,null),k.on(E,d).on(j,h),D(),l(p)}var f,_=this,p=H.of(_,arguments),m={},y=0,g=".zoom-"+fo.event.changedTouches[0].identifier,M="touchmove"+g,b="touchend"+g,L=[],k=fo.select(_),D=tt(_);n(),s(p),k.on(E,null).on(j,n)}function f(){var t=H.of(this,arguments);g?clearTimeout(g):(zs.call(this),p=e(m=y||fo.mouse(this)),s(t)),g=setTimeout(function(){g=null,l(t)},50),A(),r(Math.pow(2,.002*Jo())*w.k),i(m,p),c(t)}function _(){var t=fo.mouse(this),n=Math.log(w.k)/Math.LN2;a(this,t,e(t),fo.event.shiftKey?Math.ceil(n)-1:Math.floor(n)+1)}var p,m,y,g,v,M,b,L,k,w={x:0,y:0,k:1},D=[960,500],x=Ko,Y=250,T=0,E="mousedown.zoom",F="mousemove.zoom",C="mouseup.zoom",j="touchstart.zoom",H=S(t,"zoomstart","zoom","zoomend");return Zo||(Zo="onwheel"in mo?(Jo=function(){return-fo.event.deltaY*(fo.event.deltaMode?120:1)},"wheel"):"onmousewheel"in mo?(Jo=function(){return fo.event.wheelDelta},"mousewheel"):(Jo=function(){return-fo.event.detail},"MozMousePixelScroll")),t.event=function(t){t.each(function(){var t=H.of(this,arguments),e=w;Rs?fo.select(this).transition().each("start.zoom",function(){w=this.__chart__||{x:0,y:0,k:1},s(t)}).tween("zoom:zoom",function(){var n=D[0],r=D[1],i=m?m[0]:n/2,a=m?m[1]:r/2,o=fo.interpolateZoom([(i-w.x)/w.k,(a-w.y)/w.k,n/w.k],[(i-e.x)/e.k,(a-e.y)/e.k,n/e.k]);return function(e){var r=o(e),u=n/r[2];this.__chart__=w={x:i-r[0]*u,y:a-r[1]*u,k:u},c(t)}}).each("interrupt.zoom",function(){l(t)}).each("end.zoom",function(){l(t)}):(this.__chart__=w,s(t),c(t),l(t))})},t.translate=function(e){return arguments.length?(w={x:+e[0],y:+e[1],k:w.k},u(),t):[w.x,w.y]},t.scale=function(e){return arguments.length?(w={x:w.x,y:w.y,k:null},r(+e),u(),t):w.k},t.scaleExtent=function(e){return arguments.length?(x=null==e?Ko:[+e[0],+e[1]],t):x},t.center=function(e){return arguments.length?(y=e&&[+e[0],+e[1]],t):y},t.size=function(e){return arguments.length?(D=e&&[+e[0],+e[1]],t):D},t.duration=function(e){return arguments.length?(Y=+e,t):Y},t.x=function(e){return arguments.length?(b=e,M=e.copy(),w={x:0,y:0,k:1},t):b},t.y=function(e){return arguments.length?(k=e,L=e.copy(),w={x:0,y:0,k:1},t):k},fo.rebind(t,H,"on")};var Jo,Zo,Ko=[0,1/0];fo.color=dt,dt.prototype.toString=function(){return this.rgb()+""},fo.hsl=ht;var Xo=ht.prototype=new dt;Xo.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new ht(this.h,this.s,this.l/t)},Xo.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new ht(this.h,this.s,t*this.l)},Xo.rgb=function(){return ft(this.h,this.s,this.l)},fo.hcl=_t;var Qo=_t.prototype=new dt;Qo.brighter=function(t){return new _t(this.h,this.c,Math.min(100,this.l+tu*(arguments.length?t:1)))},Qo.darker=function(t){return new _t(this.h,this.c,Math.max(0,this.l-tu*(arguments.length?t:1)))},Qo.rgb=function(){return pt(this.h,this.c,this.l).rgb()},fo.lab=mt;var tu=18,eu=.95047,nu=1,ru=1.08883,iu=mt.prototype=new dt;iu.brighter=function(t){return new mt(Math.min(100,this.l+tu*(arguments.length?t:1)),this.a,this.b)},iu.darker=function(t){return new mt(Math.max(0,this.l-tu*(arguments.length?t:1)),this.a,this.b)},iu.rgb=function(){return yt(this.l,this.a,this.b)},fo.rgb=Lt;var au=Lt.prototype=new dt;au.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var e=this.r,n=this.g,r=this.b,i=30;return e||n||r?(e&&e<i&&(e=i),n&&n<i&&(n=i),r&&r<i&&(r=i),new Lt(Math.min(255,e/t),Math.min(255,n/t),Math.min(255,r/t))):new Lt(i,i,i)},au.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Lt(t*this.r,t*this.g,t*this.b)},au.hsl=function(){return Yt(this.r,this.g,this.b)},au.toString=function(){return"#"+Dt(this.r)+Dt(this.g)+Dt(this.b)};var ou=fo.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ou.forEach(function(t,e){ou.set(t,kt(e))}),fo.functor=St,fo.xhr=Ft(k),fo.dsv=function(t,e){function n(t,n,a){arguments.length<3&&(a=n,n=null);var o=Ct(t,e,null==n?r:i(n),a);return o.row=function(t){return arguments.length?o.response(null==(n=t)?r:i(t)):n},o}function r(t){return n.parse(t.responseText)}function i(t){return function(e){return n.parse(e.responseText,t)}}function a(e){return e.map(o).join(t)}function o(t){return u.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}var u=new RegExp('["'+t+"\n]"),s=t.charCodeAt(0);return n.parse=function(t,e){var r;return n.parseRows(t,function(t,n){if(r)return r(t,n-1);var i=new Function("d","return {"+t.map(function(t,e){return JSON.stringify(t)+": d["+e+"]"}).join(",")+"}");r=e?function(t,n){return e(i(t),n)}:i})},n.parseRows=function(t,e){function n(){if(l>=c)return o;if(i)return i=!1,a;var e=l;if(34===t.charCodeAt(e)){for(var n=e;n++<c;)if(34===t.charCodeAt(n)){if(34!==t.charCodeAt(n+1))break;++n}l=n+2;var r=t.charCodeAt(n+1);return 13===r?(i=!0,10===t.charCodeAt(n+2)&&++l):10===r&&(i=!0),t.slice(e+1,n).replace(/""/g,'"')}for(;l<c;){var r=t.charCodeAt(l++),u=1;if(10===r)i=!0;else if(13===r)i=!0,10===t.charCodeAt(l)&&(++l,++u);else if(r!==s)continue;return t.slice(e,l-u)}return t.slice(e)}for(var r,i,a={},o={},u=[],c=t.length,l=0,d=0;(r=n())!==o;){for(var h=[];r!==a&&r!==o;)h.push(r),r=n();e&&null==(h=e(h,d++))||u.push(h)}return u},n.format=function(e){if(Array.isArray(e[0]))return n.formatRows(e);var r=new L,i=[];return e.forEach(function(t){for(var e in t)r.has(e)||i.push(r.add(e))}),[i.map(o).join(t)].concat(e.map(function(e){return i.map(function(t){return o(e[t])}).join(t)})).join("\n")},n.formatRows=function(t){return t.map(a).join("\n")},n},fo.csv=fo.dsv(",","text/csv"),fo.tsv=fo.dsv("\t","text/tab-separated-values");var uu,su,cu,lu,du=this[D(this,"requestAnimationFrame")]||function(t){setTimeout(t,17)};fo.timer=function(){Ot.apply(this,arguments)},fo.timer.flush=function(){Nt(),Bt()},fo.round=function(t,e){return e?Math.round(t*(e=Math.pow(10,e)))/e:Math.round(t)};var hu=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"].map(Rt);fo.formatPrefix=function(t,e){var n=0;return(t=+t)&&(t<0&&(t*=-1),e&&(t=fo.round(t,It(t,e))),n=1+Math.floor(1e-12+Math.log(t)/Math.LN10),n=Math.max(-24,Math.min(24,3*Math.floor((n-1)/3)))),hu[8+n/3]};var fu=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,_u=fo.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,e){return t.toPrecision(e)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},r:function(t,e){return(t=fo.round(t,It(t,e))).toFixed(Math.max(0,Math.min(20,It(t*(1+1e-15),e))))}}),pu=fo.time={},mu=Date;qt.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){yu.setUTCDate.apply(this._,arguments)},setDay:function(){yu.setUTCDay.apply(this._,arguments)},setFullYear:function(){yu.setUTCFullYear.apply(this._,arguments)},setHours:function(){yu.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){yu.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){yu.setUTCMinutes.apply(this._,arguments)},setMonth:function(){yu.setUTCMonth.apply(this._,arguments)},setSeconds:function(){yu.setUTCSeconds.apply(this._,arguments)},setTime:function(){yu.setTime.apply(this._,arguments)}};var yu=Date.prototype;pu.year=Ut(function(t){return t=pu.day(t),t.setMonth(0,1),t},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t){return t.getFullYear()}),pu.years=pu.year.range,pu.years.utc=pu.year.utc.range,pu.day=Ut(function(t){var e=new mu(2e3,0);return e.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),e},function(t,e){t.setDate(t.getDate()+e)},function(t){return t.getDate()-1}),pu.days=pu.day.range,pu.days.utc=pu.day.utc.range,pu.dayOfYear=function(t){var e=pu.year(t);return Math.floor((t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(t,e){e=7-e;var n=pu[t]=Ut(function(t){return(t=pu.day(t)).setDate(t.getDate()-(t.getDay()+e)%7),t},function(t,e){t.setDate(t.getDate()+7*Math.floor(e))},function(t){var n=pu.year(t).getDay();return Math.floor((pu.dayOfYear(t)+(n+e)%7)/7)-(n!==e)});pu[t+"s"]=n.range,pu[t+"s"].utc=n.utc.range,pu[t+"OfYear"]=function(t){var n=pu.year(t).getDay();return Math.floor((pu.dayOfYear(t)+(n+e)%7)/7)}}),pu.week=pu.sunday,pu.weeks=pu.sunday.range,pu.weeks.utc=pu.sunday.utc.range,pu.weekOfYear=pu.sundayOfYear;var gu={"-":"",_:" ",0:"0"},vu=/^\s*\d+/,Mu=/^%/;fo.locale=function(t){return{numberFormat:Wt(t),timeFormat:Vt(t)}};var bu=fo.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",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"]});fo.format=bu.numberFormat,fo.geo={},_e.prototype={s:0,t:0,add:function(t){pe(t,this.t,Lu),pe(Lu.s,this.s,this),this.s?this.t+=Lu.t:this.s=Lu.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var Lu=new _e;fo.geo.stream=function(t,e){t&&ku.hasOwnProperty(t.type)?ku[t.type](t,e):me(t,e)};var ku={Feature:function(t,e){me(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r<i;)me(n[r].geometry,e)}},wu={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)t=n[r],e.point(t[0],t[1],t[2])},LineString:function(t,e){ye(t.coordinates,e,0)},MultiLineString:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)ye(n[r],e,0)},Polygon:function(t,e){ge(t.coordinates,e)},MultiPolygon:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)ge(n[r],e)},GeometryCollection:function(t,e){for(var n=t.geometries,r=-1,i=n.length;++r<i;)me(n[r],e)}};fo.geo.area=function(t){return Du=0,fo.geo.stream(t,Yu),Du};var Du,xu=new _e,Yu={sphere:function(){Du+=4*Wo},point:x,lineStart:x,lineEnd:x,polygonStart:function(){xu.reset(),Yu.lineStart=ve},polygonEnd:function(){var t=2*xu;Du+=t<0?4*Wo+t:t,Yu.lineStart=Yu.lineEnd=Yu.point=x}};fo.geo.bounds=function(){function t(t,e){v.push(M=[l=t,h=t]),e<d&&(d=e),e>f&&(f=e)}function e(e,n){var r=Me([e*$o,n*$o]);if(y){var i=Le(y,r),a=[i[1],-i[0],0],o=Le(a,i);De(o),o=xe(o);var s=e-_,c=s>0?1:-1,p=o[0]*Vo*c,m=ko(s)>180;if(m^(c*_<p&&p<c*e)){var g=o[1]*Vo;g>f&&(f=g)}else if(p=(p+360)%360-180,m^(c*_<p&&p<c*e)){var g=-o[1]*Vo;g<d&&(d=g)}else n<d&&(d=n),n>f&&(f=n);m?e<_?u(l,e)>u(l,h)&&(h=e):u(e,h)>u(l,h)&&(l=e):h>=l?(e<l&&(l=e),e>h&&(h=e)):e>_?u(l,e)>u(l,h)&&(h=e):u(e,h)>u(l,h)&&(l=e)}else t(e,n);y=r,_=e}function n(){b.point=e}function r(){M[0]=l,M[1]=h,b.point=t,y=null}function i(t,n){if(y){var r=t-_;g+=ko(r)>180?r+(r>0?360:-360):r}else p=t,m=n;Yu.point(t,n),e(t,n)}function a(){Yu.lineStart()}function o(){i(p,m),Yu.lineEnd(),ko(g)>Io&&(l=-(h=180)),M[0]=l,M[1]=h,y=null}function u(t,e){return(e-=t)<0?e+360:e}function s(t,e){return t[0]-e[0]}function c(t,e){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:t<e[0]||e[1]<t}var l,d,h,f,_,p,m,y,g,v,M,b={point:t,lineStart:n,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=a,b.lineEnd=o,g=0,Yu.polygonStart()},polygonEnd:function(){Yu.polygonEnd(),b.point=t,b.lineStart=n,b.lineEnd=r,xu<0?(l=-(h=180),d=-(f=90)):g>Io?f=90:g<-Io&&(d=-90),M[0]=l,M[1]=h}};return function(t){f=h=-(l=d=1/0),v=[],fo.geo.stream(t,b);var e=v.length;if(e){v.sort(s);for(var n,r=1,i=v[0],a=[i];r<e;++r)n=v[r],c(n[0],i)||c(n[1],i)?(u(i[0],n[1])>u(i[0],i[1])&&(i[1]=n[1]),u(n[0],i[1])>u(i[0],i[1])&&(i[0]=n[0])):a.push(i=n);for(var o,n,_=-1/0,e=a.length-1,r=0,i=a[e];r<=e;i=n,++r)n=a[r],(o=u(i[1],n[0]))>_&&(_=o,l=n[0],h=i[1])}return v=M=null,l===1/0||d===1/0?[[NaN,NaN],[NaN,NaN]]:[[l,d],[h,f]]}}(),fo.geo.centroid=function(t){Tu=Au=Eu=Su=Fu=Cu=ju=Hu=Ou=Pu=Nu=0,fo.geo.stream(t,Bu);var e=Ou,n=Pu,r=Nu,i=e*e+n*n+r*r;return i<Ro&&(e=Cu,n=ju,r=Hu,Au<Io&&(e=Eu,n=Su,r=Fu),(i=e*e+n*n+r*r)<Ro)?[NaN,NaN]:[Math.atan2(n,e)*Vo,ot(r/Math.sqrt(i))*Vo]};var Tu,Au,Eu,Su,Fu,Cu,ju,Hu,Ou,Pu,Nu,Bu={sphere:x,point:Te,lineStart:Ee,lineEnd:Se,polygonStart:function(){Bu.lineStart=Fe},polygonEnd:function(){Bu.lineStart=Ee}},Iu=Ne(je,We,qe,[-Wo,-Wo/2]),Ru=1e9;fo.geo.clipExtent=function(){var t,e,n,r,i,a,o={stream:function(t){return i&&(i.valid=!1),i=a(t),i.valid=!0,i},extent:function(u){return arguments.length?(a=Ge(t=+u[0][0],e=+u[0][1],n=+u[1][0],r=+u[1][1]),i&&(i.valid=!1,i=null),o):[[t,e],[n,r]]}};return o.extent([[0,0],[960,500]])},(fo.geo.conicEqualArea=function(){return Je(Ze)}).raw=Ze,fo.geo.albers=function(){return fo.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},fo.geo.albersUsa=function(){function t(t){var a=t[0],o=t[1];return e=null,n(a,o),e||(r(a,o),e)||i(a,o),e}var e,n,r,i,a=fo.geo.albers(),o=fo.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),u=fo.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),s={point:function(t,n){e=[t,n]}};return t.invert=function(t){var e=a.scale(),n=a.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?o:i>=.166&&i<.234&&r>=-.214&&r<-.115?u:a).invert(t)},t.stream=function(t){var e=a.stream(t),n=o.stream(t),r=u.stream(t);return{point:function(t,i){e.point(t,i),n.point(t,i),r.point(t,i)},sphere:function(){e.sphere(),n.sphere(),r.sphere()},lineStart:function(){e.lineStart(),n.lineStart(),r.lineStart()},lineEnd:function(){e.lineEnd(),n.lineEnd(),r.lineEnd()},polygonStart:function(){e.polygonStart(),n.polygonStart(),r.polygonStart()},polygonEnd:function(){e.polygonEnd(),n.polygonEnd(),r.polygonEnd()}}},t.precision=function(e){return arguments.length?(a.precision(e),o.precision(e),u.precision(e),t):a.precision()},t.scale=function(e){return arguments.length?(a.scale(e),o.scale(.35*e),u.scale(e),t.translate(a.translate())):a.scale()},t.translate=function(e){if(!arguments.length)return a.translate();var c=a.scale(),l=+e[0],d=+e[1];return n=a.translate(e).clipExtent([[l-.455*c,d-.238*c],[l+.455*c,d+.238*c]]).stream(s).point,r=o.translate([l-.307*c,d+.201*c]).clipExtent([[l-.425*c+Io,d+.12*c+Io],[l-.214*c-Io,d+.234*c-Io]]).stream(s).point,i=u.translate([l-.205*c,d+.212*c]).clipExtent([[l-.214*c+Io,d+.166*c+Io],[l-.115*c-Io,d+.234*c-Io]]).stream(s).point,t},t.scale(1070)};var Wu,zu,qu,Uu,$u,Vu,Gu={point:x,lineStart:x,lineEnd:x,polygonStart:function(){zu=0,Gu.lineStart=Ke},polygonEnd:function(){Gu.lineStart=Gu.lineEnd=Gu.point=x,Wu+=ko(zu/2)}},Ju={point:Xe,lineStart:x,lineEnd:x,polygonStart:x,polygonEnd:x},Zu={point:en,lineStart:nn,lineEnd:rn,polygonStart:function(){Zu.lineStart=an},polygonEnd:function(){Zu.point=en,Zu.lineStart=nn,Zu.lineEnd=rn}};fo.geo.path=function(){function t(t){return t&&("function"==typeof u&&a.pointRadius(+u.apply(this,arguments)),o&&o.valid||(o=i(a)),fo.geo.stream(t,o)),a.result()}function e(){return o=null,t}var n,r,i,a,o,u=4.5;return t.area=function(t){return Wu=0,fo.geo.stream(t,i(Gu)),Wu},t.centroid=function(t){return Eu=Su=Fu=Cu=ju=Hu=Ou=Pu=Nu=0,fo.geo.stream(t,i(Zu)),Nu?[Ou/Nu,Pu/Nu]:Hu?[Cu/Hu,ju/Hu]:Fu?[Eu/Fu,Su/Fu]:[NaN,NaN]},t.bounds=function(t){return $u=Vu=-(qu=Uu=1/0),fo.geo.stream(t,i(Ju)),[[qu,Uu],[$u,Vu]]},t.projection=function(t){return arguments.length?(i=(n=t)?t.stream||sn(t):k,e()):n},t.context=function(t){return arguments.length?(a=null==(r=t)?new Qe:new on(t),"function"!=typeof u&&a.pointRadius(u),e()):r},t.pointRadius=function(e){return arguments.length?(u="function"==typeof e?e:(a.pointRadius(+e),+e),t):u},t.projection(fo.geo.albersUsa()).context(null)},fo.geo.transform=function(t){return{stream:function(e){var n=new cn(e);for(var r in t)n[r]=t[r];return n}}},cn.prototype={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()}},fo.geo.projection=dn,fo.geo.projectionMutator=hn,(fo.geo.equirectangular=function(){return dn(_n)}).raw=_n.invert=_n,fo.geo.rotation=function(t){function e(e){return e=t(e[0]*$o,e[1]*$o),e[0]*=Vo,e[1]*=Vo,e}return t=mn(t[0]%360*$o,t[1]*$o,t.length>2?t[2]*$o:0),e.invert=function(e){return e=t.invert(e[0]*$o,e[1]*$o),e[0]*=Vo,e[1]*=Vo,e},e},pn.invert=_n,fo.geo.circle=function(){function t(){var t="function"==typeof r?r.apply(this,arguments):r,e=mn(-t[0]*$o,-t[1]*$o,0).invert,i=[];return n(null,null,1,{point:function(t,n){i.push(t=e(t,n)),t[0]*=Vo,t[1]*=Vo}}),{type:"Polygon",coordinates:[i]}}var e,n,r=[0,0],i=6;return t.origin=function(e){return arguments.length?(r=e,t):r},t.angle=function(r){return arguments.length?(n=Mn((e=+r)*$o,i*$o),t):e},t.precision=function(r){return arguments.length?(n=Mn(e*$o,(i=+r)*$o),t):i},t.angle(90)},fo.geo.distance=function(t,e){var n,r=(e[0]-t[0])*$o,i=t[1]*$o,a=e[1]*$o,o=Math.sin(r),u=Math.cos(r),s=Math.sin(i),c=Math.cos(i),l=Math.sin(a),d=Math.cos(a);return Math.atan2(Math.sqrt((n=d*o)*n+(n=c*l-s*d*u)*n),s*l+c*d*u)},fo.geo.graticule=function(){function t(){return{type:"MultiLineString",coordinates:e()}}function e(){return fo.range(Math.ceil(a/m)*m,i,m).map(h).concat(fo.range(Math.ceil(c/y)*y,s,y).map(f)).concat(fo.range(Math.ceil(r/_)*_,n,_).filter(function(t){return ko(t%m)>Io}).map(l)).concat(fo.range(Math.ceil(u/p)*p,o,p).filter(function(t){return ko(t%y)>Io}).map(d))}var n,r,i,a,o,u,s,c,l,d,h,f,_=10,p=_,m=90,y=360,g=2.5;return t.lines=function(){return e().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[h(a).concat(f(s).slice(1),h(i).reverse().slice(1),f(c).reverse().slice(1))]}},t.extent=function(e){return arguments.length?t.majorExtent(e).minorExtent(e):t.minorExtent()},t.majorExtent=function(e){return arguments.length?(a=+e[0][0],i=+e[1][0],c=+e[0][1],s=+e[1][1],a>i&&(e=a,a=i,i=e),c>s&&(e=c,c=s,s=e),t.precision(g)):[[a,c],[i,s]]},t.minorExtent=function(e){return arguments.length?(r=+e[0][0],n=+e[1][0],u=+e[0][1],o=+e[1][1],r>n&&(e=r,r=n,n=e),u>o&&(e=u,u=o,o=e),t.precision(g)):[[r,u],[n,o]]},t.step=function(e){return arguments.length?t.majorStep(e).minorStep(e):t.minorStep()},t.majorStep=function(e){return arguments.length?(m=+e[0],y=+e[1],t):[m,y]},t.minorStep=function(e){return arguments.length?(_=+e[0],p=+e[1],t):[_,p]},t.precision=function(e){return arguments.length?(g=+e,l=Ln(u,o,90),d=kn(r,n,g),h=Ln(c,s,90),f=kn(a,i,g),t):g},t.majorExtent([[-180,-90+Io],[180,90-Io]]).minorExtent([[-180,-80-Io],[180,80+Io]])},fo.geo.greatArc=function(){function t(){return{type:"LineString",coordinates:[e||r.apply(this,arguments),n||i.apply(this,arguments)]}}var e,n,r=wn,i=Dn;return t.distance=function(){return fo.geo.distance(e||r.apply(this,arguments),n||i.apply(this,arguments))},t.source=function(n){return arguments.length?(r=n,e="function"==typeof n?null:n,t):r},t.target=function(e){return arguments.length?(i=e,n="function"==typeof e?null:e,t):i},t.precision=function(){return arguments.length?t:0},t},fo.geo.interpolate=function(t,e){return xn(t[0]*$o,t[1]*$o,e[0]*$o,e[1]*$o)},fo.geo.length=function(t){return Ku=0,fo.geo.stream(t,Xu),Ku};var Ku,Xu={sphere:x,point:x,lineStart:Yn,lineEnd:x,polygonStart:x,polygonEnd:x},Qu=Tn(function(t){return Math.sqrt(2/(1+t))},function(t){return 2*Math.asin(t/2)});(fo.geo.azimuthalEqualArea=function(){return dn(Qu)}).raw=Qu;var ts=Tn(function(t){var e=Math.acos(t);return e&&e/Math.sin(e)},k);(fo.geo.azimuthalEquidistant=function(){return dn(ts)}).raw=ts,(fo.geo.conicConformal=function(){return Je(An)}).raw=An,(fo.geo.conicEquidistant=function(){return Je(En)}).raw=En;var es=Tn(function(t){return 1/t},Math.atan);(fo.geo.gnomonic=function(){return dn(es)}).raw=es,Sn.invert=function(t,e){return[t,2*Math.atan(Math.exp(e))-Uo]},(fo.geo.mercator=function(){return Fn(Sn)}).raw=Sn;var ns=Tn(function(){return 1},Math.asin);(fo.geo.orthographic=function(){return dn(ns)}).raw=ns;var rs=Tn(function(t){return 1/(1+t)},function(t){return 2*Math.atan(t)});(fo.geo.stereographic=function(){return dn(rs)}).raw=rs,Cn.invert=function(t,e){return[-e,2*Math.atan(Math.exp(t))-Uo]},(fo.geo.transverseMercator=function(){var t=Fn(Cn),e=t.center,n=t.rotate;return t.center=function(t){return t?e([-t[1],t[0]]):(t=e(),[t[1],-t[0]])},t.rotate=function(t){return t?n([t[0],t[1],t.length>2?t[2]+90:90]):(t=n(),[t[0],t[1],t[2]-90])},n([0,0,90])}).raw=Cn,fo.geom={},fo.geom.hull=function(t){function e(t){if(t.length<3)return[];var e,i=St(n),a=St(r),o=t.length,u=[],s=[];for(e=0;e<o;e++)u.push([+i.call(this,t[e],e),+a.call(this,t[e],e),e]);for(u.sort(Pn),e=0;e<o;e++)s.push([u[e][0],-u[e][1]]);var c=On(u),l=On(s),d=l[0]===c[0],h=l[l.length-1]===c[c.length-1],f=[];for(e=c.length-1;e>=0;--e)f.push(t[u[c[e]][2]]);for(e=+d;e<l.length-h;++e)f.push(t[u[l[e]][2]]);return f}var n=jn,r=Hn;return arguments.length?e(t):(e.x=function(t){return arguments.length?(n=t,e):n},e.y=function(t){return arguments.length?(r=t,e):r},e)},fo.geom.polygon=function(t){return To(t,is),t};var is=fo.geom.polygon.prototype=[];is.area=function(){for(var t,e=-1,n=this.length,r=this[n-1],i=0;++e<n;)t=r,r=this[e],i+=t[1]*r[0]-t[0]*r[1];return.5*i},is.centroid=function(t){var e,n,r=-1,i=this.length,a=0,o=0,u=this[i-1];for(arguments.length||(t=-1/(6*this.area()));++r<i;)e=u,u=this[r],n=e[0]*u[1]-u[0]*e[1],a+=(e[0]+u[0])*n,o+=(e[1]+u[1])*n;return[a*t,o*t]},is.clip=function(t){for(var e,n,r,i,a,o,u=In(t),s=-1,c=this.length-In(this),l=this[c-1];++s<c;){for(e=t.slice(),t.length=0,i=this[s],a=e[(r=e.length-u)-1],n=-1;++n<r;)o=e[n],Nn(o,l,i)?(Nn(a,l,i)||t.push(Bn(a,o,l,i)),t.push(o)):Nn(a,l,i)&&t.push(Bn(a,o,l,i)),a=o;u&&t.push(t[0]),l=i}return t};var as,os,us,ss,cs,ls=[],ds=[];Gn.prototype.prepare=function(){for(var t,e=this.edges,n=e.length;n--;)t=e[n].edge,t.b&&t.a||e.splice(n,1);return e.sort(Zn),e.length},or.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},ur.prototype={insert:function(t,e){var n,r,i;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;n=t}else this._?(t=dr(this._),e.P=null,e.N=t,t.P=t.L=e,n=t):(e.P=e.N=null,this._=e,n=null);for(e.L=e.R=null,e.U=n,e.C=!0,t=e;n&&n.C;)r=n.U,n===r.L?(i=r.R,i&&i.C?(n.C=i.C=!1,r.C=!0,t=r):(t===n.R&&(cr(this,n),t=n,n=t.U),n.C=!1,r.C=!0,lr(this,r))):(i=r.L,i&&i.C?(n.C=i.C=!1,r.C=!0,t=r):(t===n.L&&(lr(this,n),t=n,n=t.U),n.C=!1,r.C=!0,cr(this,r))),n=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,n,r,i=t.U,a=t.L,o=t.R;if(n=a?o?dr(o):a:o,i?i.L===t?i.L=n:i.R=n:this._=n,a&&o?(r=n.C,n.C=t.C,n.L=a,a.U=n,n!==o?(i=n.U,n.U=t.U,t=n.R,i.L=t,n.R=o,o.U=n):(n.U=i,i=n,t=n.R)):(r=t.C,t=n),t&&(t.U=i),!r){if(t&&t.C)return void(t.C=!1);do{if(t===this._)break;if(t===i.L){if(e=i.R,e.C&&(e.C=!1,i.C=!0,cr(this,i),e=i.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,lr(this,e),e=i.R),e.C=i.C,i.C=e.R.C=!1,cr(this,i),t=this._;break}}else if(e=i.L,e.C&&(e.C=!1,i.C=!0,lr(this,i),e=i.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,cr(this,e),e=i.L),e.C=i.C,i.C=e.L.C=!1,lr(this,i),t=this._;break}e.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}},fo.geom.voronoi=function(t){function e(t){var e=new Array(t.length),r=u[0][0],i=u[0][1],a=u[1][0],o=u[1][1];return hr(n(t),u).cells.forEach(function(n,u){var s=n.edges,c=n.site;(e[u]=s.length?s.map(function(t){var e=t.start();return[e.x,e.y]}):c.x>=r&&c.x<=a&&c.y>=i&&c.y<=o?[[r,o],[a,o],[a,i],[r,i]]:[]).point=t[u]}),e}function n(t){return t.map(function(t,e){return{x:Math.round(a(t,e)/Io)*Io,y:Math.round(o(t,e)/Io)*Io,i:e}})}var r=jn,i=Hn,a=r,o=i,u=hs;return t?e(t):(e.links=function(t){return hr(n(t)).edges.filter(function(t){return t.l&&t.r}).map(function(e){return{source:t[e.l.i],target:t[e.r.i]}})},e.triangles=function(t){var e=[];return hr(n(t)).cells.forEach(function(n,r){for(var i,a=n.site,o=n.edges.sort(Zn),u=-1,s=o.length,c=o[s-1].edge,l=c.l===a?c.r:c.l;++u<s;)c,i=l,c=o[u].edge,l=c.l===a?c.r:c.l,r<i.i&&r<l.i&&_r(a,i,l)<0&&e.push([t[r],t[i.i],t[l.i]])}),e},e.x=function(t){return arguments.length?(a=St(r=t),e):r},e.y=function(t){return arguments.length?(o=St(i=t),e):i},e.clipExtent=function(t){return arguments.length?(u=null==t?hs:t,e):u===hs?null:u},e.size=function(t){return arguments.length?e.clipExtent(t&&[[0,0],t]):u===hs?null:u&&u[1]},e)};var hs=[[-1e6,-1e6],[1e6,1e6]];fo.geom.delaunay=function(t){return fo.geom.voronoi().triangles(t)},fo.geom.quadtree=function(t,e,n,r,i){function a(t){function a(t,e,n,r,i,a,o,u){if(!isNaN(n)&&!isNaN(r))if(t.leaf){var s=t.x,l=t.y;if(null!=s)if(ko(s-n)+ko(l-r)<.01)c(t,e,n,r,i,a,o,u);else{var d=t.point;t.x=t.y=t.point=null,c(t,d,s,l,i,a,o,u),c(t,e,n,r,i,a,o,u)}else t.x=n,t.y=r,t.point=e}else c(t,e,n,r,i,a,o,u)}function c(t,e,n,r,i,o,u,s){var c=.5*(i+u),l=.5*(o+s),d=n>=c,h=r>=l,f=h<<1|d;t.leaf=!1,t=t.nodes[f]||(t.nodes[f]=yr()),d?i=c:u=c,h?o=l:s=l,a(t,e,n,r,i,o,u,s)}var l,d,h,f,_,p,m,y,g,v=St(u),M=St(s);if(null!=e)p=e,m=n,y=r,g=i;else if(y=g=-(p=m=1/0),d=[],h=[],_=t.length,o)for(f=0;f<_;++f)l=t[f],l.x<p&&(p=l.x),l.y<m&&(m=l.y),l.x>y&&(y=l.x),l.y>g&&(g=l.y),d.push(l.x),h.push(l.y);else for(f=0;f<_;++f){var b=+v(l=t[f],f),L=+M(l,f);b<p&&(p=b),L<m&&(m=L),b>y&&(y=b),L>g&&(g=L),d.push(b),h.push(L)}var k=y-p,w=g-m;k>w?g=m+k:y=p+w;var D=yr();if(D.add=function(t){a(D,t,+v(t,++f),+M(t,f),p,m,y,g)},D.visit=function(t){gr(t,D,p,m,y,g)},D.find=function(t){return vr(D,t[0],t[1],p,m,y,g)},f=-1,null==e){for(;++f<_;)a(D,t[f],d[f],h[f],p,m,y,g);--f}else t.forEach(D.add);return d=h=t=l=null,D}var o,u=jn,s=Hn;return(o=arguments.length)?(u=pr,s=mr,3===o&&(i=n,r=e,n=e=0),a(t)):(a.x=function(t){return arguments.length?(u=t,a):u},a.y=function(t){return arguments.length?(s=t,a):s},a.extent=function(t){return arguments.length?(null==t?e=n=r=i=null:(e=+t[0][0],n=+t[0][1],r=+t[1][0],i=+t[1][1]),a):null==e?null:[[e,n],[r,i]]},a.size=function(t){return arguments.length?(null==t?e=n=r=i=null:(e=n=0,r=+t[0],i=+t[1]),a):null==e?null:[r-e,i-n]},a)},fo.interpolateRgb=Mr,fo.interpolateObject=br,fo.interpolateNumber=Lr,fo.interpolateString=kr;var fs=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,_s=new RegExp(fs.source,"g");fo.interpolate=wr,fo.interpolators=[function(t,e){var n=typeof e;return("string"===n?ou.has(e.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(e)?Mr:kr:e instanceof dt?Mr:Array.isArray(e)?Dr:"object"===n&&isNaN(e)?br:Lr)(t,e)}],fo.interpolateArray=Dr;var ps=function(){return k},ms=fo.map({linear:ps,poly:Fr,quad:function(){return Ar},cubic:function(){return Er},sin:function(){return Cr},exp:function(){return jr},circle:function(){return Hr},elastic:Or,back:Pr,bounce:function(){return Nr}}),ys=fo.map({in:k,out:Yr,"in-out":Tr,"out-in":function(t){return Tr(Yr(t))}});fo.ease=function(t){var e=t.indexOf("-"),n=e>=0?t.slice(0,e):t,r=e>=0?t.slice(e+1):"in";return n=ms.get(n)||ps,r=ys.get(r)||k,xr(r(n.apply(null,_o.call(arguments,1))))},fo.interpolateHcl=Br,fo.interpolateHsl=Ir,fo.interpolateLab=Rr,fo.interpolateRound=Wr,fo.transform=function(t){var e=mo.createElementNS(fo.ns.prefix.svg,"g");return(fo.transform=function(t){if(null!=t){e.setAttribute("transform",t);var n=e.transform.baseVal.consolidate()}return new zr(n?n.matrix:gs)})(t)},zr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var gs={a:1,b:0,c:0,d:1,e:0,f:0};fo.interpolateTransform=Xr,fo.layout={},fo.layout.bundle=function(){return function(t){for(var e=[],n=-1,r=t.length;++n<r;)e.push(ei(t[n]));return e}},fo.layout.chord=function(){function t(){var t,c,d,h,f,_={},p=[],m=fo.range(a),y=[];for(n=[],r=[],t=0,h=-1;++h<a;){for(c=0,f=-1;++f<a;)c+=i[h][f];p.push(c),y.push(fo.range(a)),t+=c}for(o&&m.sort(function(t,e){return o(p[t],p[e])}),u&&y.forEach(function(t,e){t.sort(function(t,n){return u(i[e][t],i[e][n])})}),t=(zo-l*a)/t,c=0,h=-1;++h<a;){for(d=c,f=-1;++f<a;){var g=m[h],v=y[g][f],M=i[g][v],b=c,L=c+=M*t;_[g+"-"+v]={index:g,subindex:v,startAngle:b,endAngle:L,value:M}}r[g]={index:g,startAngle:d,endAngle:c,value:p[g]},c+=l}for(h=-1;++h<a;)for(f=h-1;++f<a;){var k=_[h+"-"+f],w=_[f+"-"+h];(k.value||w.value)&&n.push(k.value<w.value?{source:w,target:k}:{source:k,target:w})}s&&e()}function e(){n.sort(function(t,e){return s((t.source.value+t.target.value)/2,(e.source.value+e.target.value)/2)})}var n,r,i,a,o,u,s,c={},l=0;return c.matrix=function(t){return arguments.length?(a=(i=t)&&i.length,n=r=null,c):i},c.padding=function(t){return arguments.length?(l=t,n=r=null,c):l},c.sortGroups=function(t){return arguments.length?(o=t,n=r=null,c):o},c.sortSubgroups=function(t){return arguments.length?(u=t,n=null,c):u},c.sortChords=function(t){return arguments.length?(s=t,n&&e(),c):s},c.chords=function(){return n||t(),n},c.groups=function(){return r||t(),r},c},fo.layout.force=function(){function t(t){return function(e,n,r,i){if(e.point!==t){var a=e.cx-t.x,o=e.cy-t.y,u=i-n,s=a*a+o*o;if(u*u/y<s){if(s<p){var c=e.charge/s;t.px-=a*c,t.py-=o*c}return!0}if(e.point&&s&&s<p){var c=e.pointCharge/s;t.px-=a*c,t.py-=o*c}}return!e.charge}}function e(t){t.px=fo.event.x,t.py=fo.event.y,s.resume()}var n,r,i,a,o,u,s={},c=fo.dispatch("start","tick","end"),l=[1,1],d=.9,h=vs,f=Ms,_=-30,p=bs,m=.1,y=.64,g=[],v=[];return s.tick=function(){if((i*=.99)<.005)return n=null,c.end({type:"end",alpha:i=0}),!0;var e,r,s,h,f,p,y,M,b,L=g.length,k=v.length;for(r=0;r<k;++r)s=v[r],h=s.source,f=s.target,M=f.x-h.x,b=f.y-h.y,(p=M*M+b*b)&&(p=i*o[r]*((p=Math.sqrt(p))-a[r])/p,M*=p,b*=p,f.x-=M*(y=h.weight+f.weight?h.weight/(h.weight+f.weight):.5),f.y-=b*y,h.x+=M*(y=1-y),h.y+=b*y);if((y=i*m)&&(M=l[0]/2,b=l[1]/2,r=-1,y))for(;++r<L;)s=g[r],s.x+=(M-s.x)*y,s.y+=(b-s.y)*y;if(_)for(si(e=fo.geom.quadtree(g),i,u),r=-1;++r<L;)(s=g[r]).fixed||e.visit(t(s));for(r=-1;++r<L;)s=g[r],s.fixed?(s.x=s.px,s.y=s.py):(s.x-=(s.px-(s.px=s.x))*d,s.y-=(s.py-(s.py=s.y))*d);c.tick({type:"tick",alpha:i})},s.nodes=function(t){return arguments.length?(g=t,s):g},s.links=function(t){return arguments.length?(v=t,s):v},s.size=function(t){return arguments.length?(l=t,s):l},s.linkDistance=function(t){return arguments.length?(h="function"==typeof t?t:+t,s):h},s.distance=s.linkDistance,s.linkStrength=function(t){return arguments.length?(f="function"==typeof t?t:+t,s):f},s.friction=function(t){return arguments.length?(d=+t,s):d},s.charge=function(t){return arguments.length?(_="function"==typeof t?t:+t,s):_},s.chargeDistance=function(t){return arguments.length?(p=t*t,s):Math.sqrt(p)},s.gravity=function(t){return arguments.length?(m=+t,s):m},s.theta=function(t){return arguments.length?(y=t*t,s):Math.sqrt(y)},s.alpha=function(t){return arguments.length?(t=+t,i?t>0?i=t:(n.c=null,n.t=NaN,n=null,c.end({type:"end",alpha:i=0})):t>0&&(c.start({type:"start",alpha:i=t}),n=Ot(s.tick)),s):i},s.start=function(){function t(t,r){if(!n){for(n=new Array(i),s=0;s<i;++s)n[s]=[];for(s=0;s<c;++s){var a=v[s];n[a.source.index].push(a.target),n[a.target.index].push(a.source)}}for(var o,u=n[e],s=-1,l=u.length;++s<l;)if(!isNaN(o=u[s][t]))return o;return Math.random()*r}var e,n,r,i=g.length,c=v.length,d=l[0],p=l[1];for(e=0;e<i;++e)(r=g[e]).index=e,r.weight=0;for(e=0;e<c;++e)r=v[e],"number"==typeof r.source&&(r.source=g[r.source]),"number"==typeof r.target&&(r.target=g[r.target]),++r.source.weight,++r.target.weight;for(e=0;e<i;++e)r=g[e],isNaN(r.x)&&(r.x=t("x",d)),isNaN(r.y)&&(r.y=t("y",p)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(a=[],"function"==typeof h)for(e=0;e<c;++e)a[e]=+h.call(this,v[e],e);else for(e=0;e<c;++e)a[e]=h;if(o=[],"function"==typeof f)for(e=0;e<c;++e)o[e]=+f.call(this,v[e],e);else for(e=0;e<c;++e)o[e]=f;if(u=[],"function"==typeof _)for(e=0;e<i;++e)u[e]=+_.call(this,g[e],e);else for(e=0;e<i;++e)u[e]=_;return s.resume()},s.resume=function(){return s.alpha(.1)},s.stop=function(){return s.alpha(0)},s.drag=function(){if(r||(r=fo.behavior.drag().origin(k).on("dragstart.force",ii).on("drag.force",e).on("dragend.force",ai)),!arguments.length)return r;this.on("mouseover.force",oi).on("mouseout.force",ui).call(r)},fo.rebind(s,c,"on")};var vs=20,Ms=1,bs=1/0;fo.layout.hierarchy=function(){function t(i){var a,o=[i],u=[];for(i.depth=0;null!=(a=o.pop());)if(u.push(a),(c=n.call(t,a,a.depth))&&(s=c.length)){for(var s,c,l;--s>=0;)o.push(l=c[s]),l.parent=a,l.depth=a.depth+1;r&&(a.value=0),a.children=c}else r&&(a.value=+r.call(t,a,a.depth)||0),delete a.children;return di(i,function(t){var n,i;e&&(n=t.children)&&n.sort(e),r&&(i=t.parent)&&(i.value+=t.value)}),u}var e=_i,n=hi,r=fi;return t.sort=function(n){return arguments.length?(e=n,t):e},t.children=function(e){return arguments.length?(n=e,t):n},t.value=function(e){return arguments.length?(r=e,t):r},t.revalue=function(e){return r&&(li(e,function(t){t.children&&(t.value=0)}),di(e,function(e){var n;e.children||(e.value=+r.call(t,e,e.depth)||0),(n=e.parent)&&(n.value+=e.value)})),e},t},fo.layout.partition=function(){function t(e,n,r,i){var a=e.children;if(e.x=n,e.y=e.depth*i,e.dx=r,e.dy=i,a&&(o=a.length)){var o,u,s,c=-1;for(r=e.value?r/e.value:0;++c<o;)t(u=a[c],n,s=u.value*r,i),n+=s}}function e(t){var n=t.children,r=0;if(n&&(i=n.length))for(var i,a=-1;++a<i;)r=Math.max(r,e(n[a]));return 1+r}function n(n,a){var o=r.call(this,n,a);return t(o[0],0,i[0],i[1]/e(o[0])),o}var r=fo.layout.hierarchy(),i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},ci(n,r)},fo.layout.pie=function(){function t(o){var u,s=o.length,c=o.map(function(n,r){return+e.call(t,n,r)}),l=+("function"==typeof r?r.apply(this,arguments):r),d=("function"==typeof i?i.apply(this,arguments):i)-l,h=Math.min(Math.abs(d)/s,+("function"==typeof a?a.apply(this,arguments):a)),f=h*(d<0?-1:1),_=fo.sum(c),p=_?(d-s*f)/_:0,m=fo.range(s),y=[];return null!=n&&m.sort(n===Ls?function(t,e){return c[e]-c[t]}:function(t,e){return n(o[t],o[e])}),m.forEach(function(t){y[t]={data:o[t],value:u=c[t],startAngle:l,endAngle:l+=u*p+f,padAngle:h}}),y}var e=Number,n=Ls,r=0,i=zo,a=0;return t.value=function(n){return arguments.length?(e=n,t):e},t.sort=function(e){return arguments.length?(n=e,t):n},t.startAngle=function(e){return arguments.length?(r=e,t):r},t.endAngle=function(e){return arguments.length?(i=e,t):i},t.padAngle=function(e){return arguments.length?(a=e,t):a},t};var Ls={};fo.layout.stack=function(){function t(u,s){if(!(h=u.length))return u;var c=u.map(function(n,r){return e.call(t,n,r)}),l=c.map(function(e){return e.map(function(e,n){return[a.call(t,e,n),o.call(t,e,n)]})}),d=n.call(t,l,s);c=fo.permute(c,d),l=fo.permute(l,d);var h,f,_,p,m=r.call(t,l,s),y=c[0].length;for(_=0;_<y;++_)for(i.call(t,c[0][_],p=m[_],l[0][_][1]),f=1;f<h;++f)i.call(t,c[f][_],p+=l[f-1][_][1],l[f][_][1]);return u}var e=k,n=vi,r=Mi,i=gi,a=mi,o=yi;return t.values=function(n){return arguments.length?(e=n,t):e},t.order=function(e){return arguments.length?(n="function"==typeof e?e:ks.get(e)||vi,t):n},t.offset=function(e){return arguments.length?(r="function"==typeof e?e:ws.get(e)||Mi,t):r},t.x=function(e){return arguments.length?(a=e,t):a},t.y=function(e){return arguments.length?(o=e,t):o},t.out=function(e){return arguments.length?(i=e,t):i},t};var ks=fo.map({"inside-out":function(t){var e,n,r=t.length,i=t.map(bi),a=t.map(Li),o=fo.range(r).sort(function(t,e){return i[t]-i[e]}),u=0,s=0,c=[],l=[];for(e=0;e<r;++e)n=o[e],u<s?(u+=a[n],c.push(n)):(s+=a[n],l.push(n));return l.reverse().concat(c)},reverse:function(t){return fo.range(t.length).reverse()},default:vi}),ws=fo.map({silhouette:function(t){var e,n,r,i=t.length,a=t[0].length,o=[],u=0,s=[];for(n=0;n<a;++n){for(e=0,r=0;e<i;e++)r+=t[e][n][1];r>u&&(u=r),o.push(r)}for(n=0;n<a;++n)s[n]=(u-o[n])/2;return s},wiggle:function(t){var e,n,r,i,a,o,u,s,c,l=t.length,d=t[0],h=d.length,f=[];for(f[0]=s=c=0,n=1;n<h;++n){for(e=0,i=0;e<l;++e)i+=t[e][n][1];for(e=0,a=0,u=d[n][0]-d[n-1][0];e<l;++e){for(r=0,o=(t[e][n][1]-t[e][n-1][1])/(2*u);r<e;++r)o+=(t[r][n][1]-t[r][n-1][1])/u;a+=o*t[e][n][1]}f[n]=s-=i?a/i*u:0,s<c&&(c=s)}for(n=0;n<h;++n)f[n]-=c;return f},expand:function(t){var e,n,r,i=t.length,a=t[0].length,o=1/i,u=[];for(n=0;n<a;++n){for(e=0,r=0;e<i;e++)r+=t[e][n][1];if(r)for(e=0;e<i;e++)t[e][n][1]/=r;else for(e=0;e<i;e++)t[e][n][1]=o}for(n=0;n<a;++n)u[n]=0;return u},zero:Mi});fo.layout.histogram=function(){function t(t,a){for(var o,u,s=[],c=t.map(n,this),l=r.call(this,c,a),d=i.call(this,l,c,a),a=-1,h=c.length,f=d.length-1,_=e?1:1/h;++a<f;)o=s[a]=[],o.dx=d[a+1]-(o.x=d[a]),o.y=0;if(f>0)for(a=-1;++a<h;)(u=c[a])>=l[0]&&u<=l[1]&&(o=s[fo.bisect(d,u,1,f)-1],o.y+=_,o.push(t[a]));return s}var e=!0,n=Number,r=xi,i=wi;return t.value=function(e){return arguments.length?(n=e,t):n},t.range=function(e){return arguments.length?(r=St(e),t):r},t.bins=function(e){return arguments.length?(i="number"==typeof e?function(t){return Di(t,e)}:St(e),t):i},t.frequency=function(n){return arguments.length?(e=!!n,t):e},t},fo.layout.pack=function(){function t(t,a){var o=n.call(this,t,a),u=o[0],s=i[0],c=i[1],l=null==e?Math.sqrt:"function"==typeof e?e:function(){return e};if(u.x=u.y=0,di(u,function(t){t.r=+l(t.value)}),di(u,Si),r){var d=r*(e?1:Math.max(2*u.r/s,2*u.r/c))/2;di(u,function(t){t.r+=d}),di(u,Si),di(u,function(t){t.r-=d})}return ji(u,s/2,c/2,e?1:1/Math.max(2*u.r/s,2*u.r/c)),o}var e,n=fo.layout.hierarchy().sort(Yi),r=0,i=[1,1];return t.size=function(e){return arguments.length?(i=e,t):i},t.radius=function(n){return arguments.length?(e=null==n||"function"==typeof n?n:+n,t):e},t.padding=function(e){return arguments.length?(r=+e,t):r},ci(t,n)},fo.layout.tree=function(){function t(t,i){var l=o.call(this,t,i),d=l[0],h=e(d);if(di(h,n),h.parent.m=-h.z,li(h,r),c)li(d,a);else{var f=d,_=d,p=d;li(d,function(t){t.x<f.x&&(f=t),t.x>_.x&&(_=t),t.depth>p.depth&&(p=t)});var m=u(f,_)/2-f.x,y=s[0]/(_.x+u(_,f)/2+m),g=s[1]/(p.depth||1);li(d,function(t){t.x=(t.x+m)*y,t.y=t.depth*g})}return l}function e(t){for(var e,n={A:null,children:[t]},r=[n];null!=(e=r.pop());)for(var i,a=e.children,o=0,u=a.length;o<u;++o)r.push((a[o]=i={_:a[o],parent:e,children:(i=a[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return n.children[0]}function n(t){var e=t.children,n=t.parent.children,r=t.i?n[t.i-1]:null;if(e.length){Ii(t);var a=(e[0].z+e[e.length-1].z)/2;r?(t.z=r.z+u(t._,r._),t.m=t.z-a):t.z=a}else r&&(t.z=r.z+u(t._,r._));t.parent.A=i(t,r,t.parent.A||n[0])}function r(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function i(t,e,n){if(e){for(var r,i=t,a=t,o=e,s=i.parent.children[0],c=i.m,l=a.m,d=o.m,h=s.m;o=Ni(o),i=Pi(i),o&&i;)s=Pi(s),a=Ni(a),a.a=t,r=o.z+d-i.z-c+u(o._,i._),r>0&&(Bi(Ri(o,t,n),t,r),c+=r,l+=r),d+=o.m,c+=i.m,h+=s.m,l+=a.m;o&&!Ni(a)&&(a.t=o,a.m+=d-l),i&&!Pi(s)&&(s.t=i,s.m+=c-h,n=t)}return n}function a(t){t.x*=s[0],t.y=t.depth*s[1]}var o=fo.layout.hierarchy().sort(null).value(null),u=Oi,s=[1,1],c=null;return t.separation=function(e){return arguments.length?(u=e,t):u},t.size=function(e){return arguments.length?(c=null==(s=e)?a:null,t):c?null:s},t.nodeSize=function(e){return arguments.length?(c=null==(s=e)?null:a,t):c?s:null},ci(t,o)},fo.layout.cluster=function(){function t(t,a){var o,u=e.call(this,t,a),s=u[0],c=0;di(s,function(t){var e=t.children;e&&e.length?(t.x=zi(e),t.y=Wi(e)):(t.x=o?c+=n(t,o):0,t.y=0,o=t)});var l=qi(s),d=Ui(s),h=l.x-n(l,d)/2,f=d.x+n(d,l)/2;return di(s,i?function(t){t.x=(t.x-s.x)*r[0],t.y=(s.y-t.y)*r[1]}:function(t){t.x=(t.x-h)/(f-h)*r[0],t.y=(1-(s.y?t.y/s.y:1))*r[1]}),u}var e=fo.layout.hierarchy().sort(null).value(null),n=Oi,r=[1,1],i=!1;return t.separation=function(e){return arguments.length?(n=e,t):n},t.size=function(e){return arguments.length?(i=null==(r=e),t):i?null:r},t.nodeSize=function(e){return arguments.length?(i=null!=(r=e),t):i?r:null},ci(t,e)},fo.layout.treemap=function(){function t(t,e){for(var n,r,i=-1,a=t.length;++i<a;)r=(n=t[i]).value*(e<0?0:e),n.area=isNaN(r)||r<=0?0:r}function e(n){var a=n.children;if(a&&a.length){var o,u,s,c=d(n),l=[],h=a.slice(),_=1/0,p="slice"===f?c.dx:"dice"===f?c.dy:"slice-dice"===f?1&n.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(t(h,c.dx*c.dy/n.value),l.area=0;(s=h.length)>0;)l.push(o=h[s-1]),l.area+=o.area,"squarify"!==f||(u=r(l,p))<=_?(h.pop(),_=u):(l.area-=l.pop().area,i(l,p,c,!1),p=Math.min(c.dx,c.dy),l.length=l.area=0,_=1/0);l.length&&(i(l,p,c,!0),l.length=l.area=0),a.forEach(e)}}function n(e){var r=e.children;if(r&&r.length){var a,o=d(e),u=r.slice(),s=[];for(t(u,o.dx*o.dy/e.value),s.area=0;a=u.pop();)s.push(a),s.area+=a.area,null!=a.z&&(i(s,a.z?o.dx:o.dy,o,!u.length),s.length=s.area=0);r.forEach(n)}}function r(t,e){for(var n,r=t.area,i=0,a=1/0,o=-1,u=t.length;++o<u;)(n=t[o].area)&&(n<a&&(a=n),n>i&&(i=n));return r*=r,e*=e,r?Math.max(e*i*_/r,r/(e*a*_)):1/0}function i(t,e,n,r){var i,a=-1,o=t.length,u=n.x,c=n.y,l=e?s(t.area/e):0;if(e==n.dx){for((r||l>n.dy)&&(l=n.dy);++a<o;)i=t[a],i.x=u,i.y=c,i.dy=l,u+=i.dx=Math.min(n.x+n.dx-u,l?s(i.area/l):0);i.z=!0,i.dx+=n.x+n.dx-u,n.y+=l,n.dy-=l}else{for((r||l>n.dx)&&(l=n.dx);++a<o;)i=t[a],i.x=u,i.y=c,i.dx=l,c+=i.dy=Math.min(n.y+n.dy-c,l?s(i.area/l):0);i.z=!1,i.dy+=n.y+n.dy-c,n.x+=l,n.dx-=l}}function a(r){var i=o||u(r),a=i[0];return a.x=a.y=0,a.value?(a.dx=c[0],a.dy=c[1]):a.dx=a.dy=0,o&&u.revalue(a),t([a],a.dx*a.dy/a.value),(o?n:e)(a),h&&(o=i),i}var o,u=fo.layout.hierarchy(),s=Math.round,c=[1,1],l=null,d=$i,h=!1,f="squarify",_=.5*(1+Math.sqrt(5));return a.size=function(t){return arguments.length?(c=t,a):c},a.padding=function(t){function e(e){var n=t.call(a,e,e.depth);return null==n?$i(e):Vi(e,"number"==typeof n?[n,n,n,n]:n)}function n(e){return Vi(e,t)}if(!arguments.length)return l;var r;return d=null==(l=t)?$i:"function"==(r=typeof t)?e:"number"===r?(t=[t,t,t,t],n):n,a},a.round=function(t){return arguments.length?(s=t?Math.round:Number,a):s!=Number},a.sticky=function(t){return arguments.length?(h=t,o=null,a):h},a.ratio=function(t){return arguments.length?(_=t,a):_},a.mode=function(t){return arguments.length?(f=t+"",a):f},ci(a,u)},fo.random={normal:function(t,e){var n=arguments.length;return n<2&&(e=1),n<1&&(t=0),function(){var n,r,i;do{n=2*Math.random()-1,r=2*Math.random()-1,i=n*n+r*r}while(!i||i>1);return t+e*n*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var t=fo.random.normal.apply(fo,arguments);return function(){return Math.exp(t())}},bates:function(t){var e=fo.random.irwinHall(t);return function(){return e()/t}},irwinHall:function(t){return function(){for(var e=0,n=0;n<t;n++)e+=Math.random();return e}}},fo.scale={};var Ds={floor:k,ceil:k};fo.scale.linear=function(){return ta([0,1],[0,1],wr,!1)};var xs={s:1,g:1,p:1,r:1,e:1};fo.scale.log=function(){return sa(fo.scale.linear().domain([0,1]),10,!0,[1,10])};var Ys=fo.format(".0e"),Ts={floor:function(t){return-Math.ceil(-t)},ceil:function(t){return-Math.floor(-t)}};fo.scale.pow=function(){return ca(fo.scale.linear(),1,[0,1])},fo.scale.sqrt=function(){return fo.scale.pow().exponent(.5)},fo.scale.ordinal=function(){return da([],{t:"range",a:[[]]})},fo.scale.category10=function(){return fo.scale.ordinal().range(As)},fo.scale.category20=function(){return fo.scale.ordinal().range(Es)},fo.scale.category20b=function(){return fo.scale.ordinal().range(Ss)},fo.scale.category20c=function(){return fo.scale.ordinal().range(Fs)};var As=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(wt),Es=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(wt),Ss=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(wt),Fs=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(wt);fo.scale.quantile=function(){return ha([],[])},fo.scale.quantize=function(){return fa(0,1,[0,1])},fo.scale.threshold=function(){return _a([.5],[0,1])},fo.scale.identity=function(){return pa([0,1])},fo.svg={},fo.svg.arc=function(){function t(){var t=Math.max(0,+n.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),l=o.apply(this,arguments)-Uo,d=u.apply(this,arguments)-Uo,h=Math.abs(d-l),f=l>d?0:1;if(c<t&&(_=c,c=t,t=_),h>=qo)return e(c,f)+(t?e(t,1-f):"")+"Z";var _,p,m,y,g,v,M,b,L,k,w,D,x=0,Y=0,T=[];if((y=(+s.apply(this,arguments)||0)/2)&&(m=a===Cs?Math.sqrt(t*t+c*c):+a.apply(this,arguments),f||(Y*=-1),c&&(Y=ot(m/c*Math.sin(y))),t&&(x=ot(m/t*Math.sin(y)))),c){g=c*Math.cos(l+Y),v=c*Math.sin(l+Y),M=c*Math.cos(d-Y),b=c*Math.sin(d-Y);var A=Math.abs(d-l-2*Y)<=Wo?0:1;if(Y&&La(g,v,M,b)===f^A){var E=(l+d)/2;g=c*Math.cos(E),v=c*Math.sin(E),M=b=null}}else g=v=0;if(t){L=t*Math.cos(d-x),k=t*Math.sin(d-x),w=t*Math.cos(l+x),D=t*Math.sin(l+x);var S=Math.abs(l-d+2*x)<=Wo?0:1;if(x&&La(L,k,w,D)===1-f^S){var F=(l+d)/2;L=t*Math.cos(F),k=t*Math.sin(F),w=D=null}}else L=k=0;if(h>Io&&(_=Math.min(Math.abs(c-t)/2,+i.apply(this,arguments)))>.001){p=t<c^f?0:1;var C=_,j=_;if(h<Wo){var H=null==w?[L,k]:null==M?[g,v]:Bn([g,v],[w,D],[M,b],[L,k]),O=g-H[0],P=v-H[1],N=M-H[0],B=b-H[1],I=1/Math.sin(Math.acos((O*N+P*B)/(Math.sqrt(O*O+P*P)*Math.sqrt(N*N+B*B)))/2),R=Math.sqrt(H[0]*H[0]+H[1]*H[1]);j=Math.min(_,(t-R)/(I-1)),C=Math.min(_,(c-R)/(I+1))}if(null!=M){var W=ka(null==w?[L,k]:[w,D],[g,v],c,C,f),z=ka([M,b],[L,k],c,C,f);_===C?T.push("M",W[0],"A",C,",",C," 0 0,",p," ",W[1],"A",c,",",c," 0 ",1-f^La(W[1][0],W[1][1],z[1][0],z[1][1]),",",f," ",z[1],"A",C,",",C," 0 0,",p," ",z[0]):T.push("M",W[0],"A",C,",",C," 0 1,",p," ",z[0])}else T.push("M",g,",",v);if(null!=w){var q=ka([g,v],[w,D],t,-j,f),U=ka([L,k],null==M?[g,v]:[M,b],t,-j,f);_===j?T.push("L",U[0],"A",j,",",j," 0 0,",p," ",U[1],"A",t,",",t," 0 ",f^La(U[1][0],U[1][1],q[1][0],q[1][1]),",",1-f," ",q[1],"A",j,",",j," 0 0,",p," ",q[0]):T.push("L",U[0],"A",j,",",j," 0 0,",p," ",q[0])}else T.push("L",L,",",k)}else T.push("M",g,",",v),null!=M&&T.push("A",c,",",c," 0 ",A,",",f," ",M,",",b),T.push("L",L,",",k),null!=w&&T.push("A",t,",",t," 0 ",S,",",1-f," ",w,",",D);return T.push("Z"),T.join("")}function e(t,e){return"M0,"+t+"A"+t+","+t+" 0 1,"+e+" 0,"+-t+"A"+t+","+t+" 0 1,"+e+" 0,"+t}var n=ya,r=ga,i=ma,a=Cs,o=va,u=Ma,s=ba;return t.innerRadius=function(e){return arguments.length?(n=St(e),t):n},t.outerRadius=function(e){return arguments.length?(r=St(e),t):r},t.cornerRadius=function(e){return arguments.length?(i=St(e),t):i},t.padRadius=function(e){return arguments.length?(a=e==Cs?Cs:St(e),t):a},t.startAngle=function(e){return arguments.length?(o=St(e),t):o},t.endAngle=function(e){return arguments.length?(u=St(e),t):u},t.padAngle=function(e){return arguments.length?(s=St(e),t):s},t.centroid=function(){var t=(+n.apply(this,arguments)+ +r.apply(this,arguments))/2,e=(+o.apply(this,arguments)+ +u.apply(this,arguments))/2-Uo;return[Math.cos(e)*t,Math.sin(e)*t]},t};var Cs="auto";fo.svg.line=function(){return wa(k)};var js=fo.map({linear:Da,"linear-closed":xa,step:Ya,"step-before":Ta,"step-after":Aa,basis:Ha,"basis-open":Oa,"basis-closed":Pa,bundle:Na,cardinal:Fa,"cardinal-open":Ea,"cardinal-closed":Sa,monotone:qa});js.forEach(function(t,e){e.key=t,e.closed=/-closed$/.test(t)});var Hs=[0,2/3,1/3,0],Os=[0,1/3,2/3,0],Ps=[0,1/6,2/3,1/6];fo.svg.line.radial=function(){var t=wa(Ua);return t.radius=t.x,delete t.x,t.angle=t.y,delete t.y,t},Ta.reverse=Aa,Aa.reverse=Ta,fo.svg.area=function(){return $a(k)},fo.svg.area.radial=function(){var t=$a(Ua);return t.radius=t.x,delete t.x,t.innerRadius=t.x0,delete t.x0,t.outerRadius=t.x1,delete t.x1,t.angle=t.y,delete t.y,t.startAngle=t.y0,delete t.y0,t.endAngle=t.y1,delete t.y1,t},fo.svg.chord=function(){function t(t,u){var s=e(this,a,t,u),c=e(this,o,t,u);return"M"+s.p0+r(s.r,s.p1,s.a1-s.a0)+(n(s,c)?i(s.r,s.p1,s.r,s.p0):i(s.r,s.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,s.r,s.p0))+"Z"}function e(t,e,n,r){var i=e.call(t,n,r),a=u.call(t,i,r),o=s.call(t,i,r)-Uo,l=c.call(t,i,r)-Uo;return{r:a,a0:o,a1:l,p0:[a*Math.cos(o),a*Math.sin(o)],p1:[a*Math.cos(l),a*Math.sin(l)]}}function n(t,e){return t.a0==e.a0&&t.a1==e.a1}function r(t,e,n){return"A"+t+","+t+" 0 "+ +(n>Wo)+",1 "+e}function i(t,e,n,r){return"Q 0,0 "+r}var a=wn,o=Dn,u=Va,s=va,c=Ma;return t.radius=function(e){return arguments.length?(u=St(e),t):u},t.source=function(e){return arguments.length?(a=St(e),t):a},t.target=function(e){return arguments.length?(o=St(e),t):o},t.startAngle=function(e){return arguments.length?(s=St(e),t):s},t.endAngle=function(e){return arguments.length?(c=St(e),t):c},t},fo.svg.diagonal=function(){function t(t,i){var a=e.call(this,t,i),o=n.call(this,t,i),u=(a.y+o.y)/2,s=[a,{x:a.x,y:u},{x:o.x,y:u},o];return s=s.map(r),"M"+s[0]+"C"+s[1]+" "+s[2]+" "+s[3]}var e=wn,n=Dn,r=Ga;return t.source=function(n){return arguments.length?(e=St(n),t):e},t.target=function(e){return arguments.length?(n=St(e),t):n},t.projection=function(e){return arguments.length?(r=e,t):r},t},fo.svg.diagonal.radial=function(){var t=fo.svg.diagonal(),e=Ga,n=t.projection;return t.projection=function(t){return arguments.length?n(Ja(e=t)):e},t},fo.svg.symbol=function(){function t(t,r){return(Ns.get(e.call(this,t,r))||Xa)(n.call(this,t,r))}var e=Ka,n=Za;return t.type=function(n){return arguments.length?(e=St(n),t):e},t.size=function(e){return arguments.length?(n=St(e),t):n},t};var Ns=fo.map({circle:Xa,cross:function(t){var e=Math.sqrt(t/5)/2;return"M"+-3*e+","+-e+"H"+-e+"V"+-3*e+"H"+e+"V"+-e+"H"+3*e+"V"+e+"H"+e+"V"+3*e+"H"+-e+"V"+e+"H"+-3*e+"Z"},diamond:function(t){var e=Math.sqrt(t/(2*Is)),n=e*Is;return"M0,"+-e+"L"+n+",0 0,"+e+" "+-n+",0Z"},square:function(t){var e=Math.sqrt(t)/2;return"M"+-e+","+-e+"L"+e+","+-e+" "+e+","+e+" "+-e+","+e+"Z"},"triangle-down":function(t){var e=Math.sqrt(t/Bs),n=e*Bs/2;return"M0,"+n+"L"+e+","+-n+" "+-e+","+-n+"Z"},"triangle-up":function(t){var e=Math.sqrt(t/Bs),n=e*Bs/2;return"M0,"+-n+"L"+e+","+n+" "+-e+","+n+"Z"}});fo.svg.symbolTypes=Ns.keys();var Bs=Math.sqrt(3),Is=Math.tan(30*$o);Fo.transition=function(t){for(var e,n,r=Rs||++Us,i=ro(t),a=[],o=Ws||{time:Date.now(),ease:Sr,delay:0,duration:250},u=-1,s=this.length;++u<s;){a.push(e=[]);for(var c=this[u],l=-1,d=c.length;++l<d;)(n=c[l])&&io(n,l,i,r,o),e.push(n)}return to(a,i,r)},Fo.interrupt=function(t){return this.each(null==t?zs:Qa(ro(t)))};var Rs,Ws,zs=Qa(ro()),qs=[],Us=0;qs.call=Fo.call,qs.empty=Fo.empty,qs.node=Fo.node,qs.size=Fo.size,fo.transition=function(t,e){return t&&t.transition?Rs?t.transition(e):t:fo.selection().transition(t)},fo.transition.prototype=qs,qs.select=function(t){var e,n,r,i=this.id,a=this.namespace,o=[];t=C(t);for(var u=-1,s=this.length;++u<s;){o.push(e=[]);for(var c=this[u],l=-1,d=c.length;++l<d;)(r=c[l])&&(n=t.call(r,r.__data__,l,u))?("__data__"in r&&(n.__data__=r.__data__),io(n,l,a,i,r[a][i]),e.push(n)):e.push(null)}return to(o,a,i)},qs.selectAll=function(t){var e,n,r,i,a,o=this.id,u=this.namespace,s=[];t=j(t);for(var c=-1,l=this.length;++c<l;)for(var d=this[c],h=-1,f=d.length;++h<f;)if(r=d[h]){a=r[u][o],n=t.call(r,r.__data__,h,c),s.push(e=[]);for(var _=-1,p=n.length;++_<p;)(i=n[_])&&io(i,_,u,o,a),e.push(i)}return to(s,u,o)},qs.filter=function(t){var e,n,r,i=[];"function"!=typeof t&&(t=$(t));for(var a=0,o=this.length;a<o;a++){i.push(e=[]);for(var n=this[a],u=0,s=n.length;u<s;u++)(r=n[u])&&t.call(r,r.__data__,u,a)&&e.push(r)}return to(i,this.namespace,this.id)},qs.tween=function(t,e){var n=this.id,r=this.namespace;return arguments.length<2?this.node()[r][n].tween.get(t):G(this,null==e?function(e){e[r][n].tween.remove(t)}:function(i){i[r][n].tween.set(t,e)})},qs.attr=function(t,e){function n(){this.removeAttribute(u)}function r(){this.removeAttributeNS(u.space,u.local)}function i(t){return null==t?n:(t+="",function(){var e,n=this.getAttribute(u);return n!==t&&(e=o(n,t),function(t){this.setAttribute(u,e(t))})})}function a(t){return null==t?r:(t+="",function(){var e,n=this.getAttributeNS(u.space,u.local);return n!==t&&(e=o(n,t),function(t){this.setAttributeNS(u.space,u.local,e(t))})})}if(arguments.length<2){for(e in t)this.attr(e,t[e]);return this}var o="transform"==t?Xr:wr,u=fo.ns.qualify(t);return eo(this,"attr."+t,e,u.local?a:i)},qs.attrTween=function(t,e){function n(t,n){var r=e.call(this,t,n,this.getAttribute(i));return r&&function(t){this.setAttribute(i,r(t))}}function r(t,n){var r=e.call(this,t,n,this.getAttributeNS(i.space,i.local));return r&&function(t){this.setAttributeNS(i.space,i.local,r(t))}}var i=fo.ns.qualify(t);return this.tween("attr."+t,i.local?r:n)},qs.style=function(t,e,n){function r(){this.style.removeProperty(t)}function i(e){return null==e?r:(e+="",function(){var r,i=o(this).getComputedStyle(this,null).getPropertyValue(t);return i!==e&&(r=wr(i,e),function(e){this.style.setProperty(t,r(e),n)})})}var a=arguments.length;if(a<3){if("string"!=typeof t){a<2&&(e="");for(n in t)this.style(n,t[n],e);return this}n=""}return eo(this,"style."+t,e,i)},qs.styleTween=function(t,e,n){function r(r,i){var a=e.call(this,r,i,o(this).getComputedStyle(this,null).getPropertyValue(t));return a&&function(e){this.style.setProperty(t,a(e),n)}}return arguments.length<3&&(n=""),this.tween("style."+t,r)},qs.text=function(t){return eo(this,"text",t,no)},qs.remove=function(){var t=this.namespace;return this.each("end.transition",function(){var e;this[t].count<2&&(e=this.parentNode)&&e.removeChild(this)})},qs.ease=function(t){var e=this.id,n=this.namespace;return arguments.length<1?this.node()[n][e].ease:("function"!=typeof t&&(t=fo.ease.apply(fo,arguments)),G(this,function(r){r[n][e].ease=t}))},qs.delay=function(t){var e=this.id,n=this.namespace;return arguments.length<1?this.node()[n][e].delay:G(this,"function"==typeof t?function(r,i,a){r[n][e].delay=+t.call(r,r.__data__,i,a)}:(t=+t,function(r){r[n][e].delay=t}))},qs.duration=function(t){var e=this.id,n=this.namespace;return arguments.length<1?this.node()[n][e].duration:G(this,"function"==typeof t?function(r,i,a){r[n][e].duration=Math.max(1,t.call(r,r.__data__,i,a))}:(t=Math.max(1,t),function(r){r[n][e].duration=t}))},qs.each=function(t,e){var n=this.id,r=this.namespace;if(arguments.length<2){var i=Ws,a=Rs;try{Rs=n,G(this,function(e,i,a){Ws=e[r][n],t.call(e,e.__data__,i,a)})}finally{Ws=i,Rs=a}}else G(this,function(i){var a=i[r][n];(a.event||(a.event=fo.dispatch("start","end","interrupt"))).on(t,e)});return this},qs.transition=function(){for(var t,e,n,r,i=this.id,a=++Us,o=this.namespace,u=[],s=0,c=this.length;s<c;s++){u.push(t=[]);for(var e=this[s],l=0,d=e.length;l<d;l++)(n=e[l])&&(r=n[o][i],io(n,l,o,a,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),t.push(n)}return to(u,o,a)},fo.svg.axis=function(){function t(t){t.each(function(){var t,c=fo.select(this),l=this.__chart__||n,d=this.__chart__=n.copy(),h=null==s?d.ticks?d.ticks.apply(d,u):d.domain():s,f=null==e?d.tickFormat?d.tickFormat.apply(d,u):k:e,_=c.selectAll(".tick").data(h,d),p=_.enter().insert("g",".domain").attr("class","tick").style("opacity",Io),m=fo.transition(_.exit()).style("opacity",Io).remove(),y=fo.transition(_.order()).style("opacity",1),g=Math.max(i,0)+o,v=Ji(d),M=c.selectAll(".domain").data([0]),b=(M.enter().append("path").attr("class","domain"),fo.transition(M));p.append("line"),p.append("text");var L,w,D,x,Y=p.select("line"),T=y.select("line"),A=_.select("text").text(f),E=p.select("text"),S=y.select("text"),F="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(t=ao,L="x",D="y",w="x2",x="y2",A.attr("dy",F<0?"0em":".71em").style("text-anchor","middle"),b.attr("d","M"+v[0]+","+F*a+"V0H"+v[1]+"V"+F*a)):(t=oo,L="y",D="x",w="y2",x="x2",A.attr("dy",".32em").style("text-anchor",F<0?"end":"start"),b.attr("d","M"+F*a+","+v[0]+"H0V"+v[1]+"H"+F*a)),Y.attr(x,F*i),E.attr(D,F*g),T.attr(w,0).attr(x,F*i),S.attr(L,0).attr(D,F*g),d.rangeBand){var C=d,j=C.rangeBand()/2;l=d=function(t){return C(t)+j}}else l.rangeBand?l=d:m.call(t,d,l);p.call(t,l,d),y.call(t,d,d)})}var e,n=fo.scale.linear(),r=$s,i=6,a=6,o=3,u=[10],s=null;return t.scale=function(e){return arguments.length?(n=e,t):n},t.orient=function(e){return arguments.length?(r=e in Vs?e+"":$s,t):r},t.ticks=function(){return arguments.length?(u=po(arguments),t):u},t.tickValues=function(e){return arguments.length?(s=e,t):s},t.tickFormat=function(n){return arguments.length?(e=n,t):e},t.tickSize=function(e){var n=arguments.length;return n?(i=+e,a=+arguments[n-1],t):i},t.innerTickSize=function(e){return arguments.length?(i=+e,t):i},t.outerTickSize=function(e){return arguments.length?(a=+e,t):a},t.tickPadding=function(e){return arguments.length?(o=+e,t):o},t.tickSubdivide=function(){return arguments.length&&t},t};var $s="bottom",Vs={top:1,right:1,bottom:1,left:1};fo.svg.brush=function(){function t(a){a.each(function(){var a=fo.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",i).on("touchstart.brush",i),o=a.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),a.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var u=a.selectAll(".resize").data(p,k);u.exit().remove(),u.enter().append("g").attr("class",function(t){return"resize "+t}).style("cursor",function(t){return Gs[t]}).append("rect").attr("x",function(t){return/[ew]$/.test(t)?-3:null}).attr("y",function(t){return/^[ns]/.test(t)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),u.style("display",t.empty()?"none":null);var s,d=fo.transition(a),h=fo.transition(o);c&&(s=Ji(c),h.attr("x",s[0]).attr("width",s[1]-s[0]),n(d)),l&&(s=Ji(l),h.attr("y",s[0]).attr("height",s[1]-s[0]),r(d)),e(d)})}function e(t){t.selectAll(".resize").attr("transform",function(t){return"translate("+d[+/e$/.test(t)]+","+h[+/^s/.test(t)]+")"})}function n(t){t.select(".extent").attr("x",d[0]),t.selectAll(".extent,.n>rect,.s>rect").attr("width",d[1]-d[0])}function r(t){t.select(".extent").attr("y",h[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function i(){function i(){32==fo.event.keyCode&&(T||(v=null,S[0]-=d[1],S[1]-=h[1],T=2),A())}function p(){32==fo.event.keyCode&&2==T&&(S[0]+=d[1],S[1]+=h[1],T=0,A())}function m(){var t=fo.mouse(b),i=!1;M&&(t[0]+=M[0],t[1]+=M[1]),T||(fo.event.altKey?(v||(v=[(d[0]+d[1])/2,(h[0]+h[1])/2]),S[0]=d[+(t[0]<v[0])],S[1]=h[+(t[1]<v[1])]):v=null),x&&y(t,c,0)&&(n(w),i=!0),Y&&y(t,l,1)&&(r(w),i=!0),i&&(e(w),k({type:"brush",mode:T?"move":"resize"}))}function y(t,e,n){var r,i,o=Ji(e),s=o[0],c=o[1],l=S[n],p=n?h:d,m=p[1]-p[0];if(T&&(s-=l,c-=m+l),r=(n?_:f)?Math.max(s,Math.min(c,t[n])):t[n],T?i=(r+=l)+m:(v&&(l=Math.max(s,Math.min(c,2*v[n]-r))),l<r?(i=r,r=l):i=l),p[0]!=r||p[1]!=i)return n?u=null:a=null,p[0]=r,p[1]=i,!0}function g(){m(),w.style("pointer-events","all").selectAll(".resize").style("display",t.empty()?"none":null),fo.select("body").style("cursor",null),F.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),E(),k({type:"brushend"})}var v,M,b=this,L=fo.select(fo.event.target),k=s.of(b,arguments),w=fo.select(b),D=L.datum(),x=!/^(n|s)$/.test(D)&&c,Y=!/^(e|w)$/.test(D)&&l,T=L.classed("extent"),E=tt(b),S=fo.mouse(b),F=fo.select(o(b)).on("keydown.brush",i).on("keyup.brush",p);if(fo.event.changedTouches?F.on("touchmove.brush",m).on("touchend.brush",g):F.on("mousemove.brush",m).on("mouseup.brush",g),w.interrupt().selectAll("*").interrupt(),T)S[0]=d[0]-S[0],S[1]=h[0]-S[1];else if(D){var C=+/w$/.test(D),j=+/^n/.test(D);M=[d[1-C]-S[0],h[1-j]-S[1]],S[0]=d[C],S[1]=h[j]}else fo.event.altKey&&(v=S.slice());w.style("pointer-events","none").selectAll(".resize").style("display",null),fo.select("body").style("cursor",L.style("cursor")),k({type:"brushstart"}),m()}var a,u,s=S(t,"brushstart","brush","brushend"),c=null,l=null,d=[0,0],h=[0,0],f=!0,_=!0,p=Js[0];return t.event=function(t){t.each(function(){var t=s.of(this,arguments),e={x:d,y:h,i:a,j:u},n=this.__chart__||e;this.__chart__=e,Rs?fo.select(this).transition().each("start.brush",function(){a=n.i,u=n.j,d=n.x,h=n.y,t({type:"brushstart"})}).tween("brush:brush",function(){var n=Dr(d,e.x),r=Dr(h,e.y);return a=u=null,function(i){d=e.x=n(i),h=e.y=r(i),t({type:"brush",mode:"resize"})}}).each("end.brush",function(){a=e.i,u=e.j,t({type:"brush",mode:"resize"}),t({type:"brushend"})}):(t({type:"brushstart"}),t({type:"brush",mode:"resize"}),t({type:"brushend"}))})},t.x=function(e){return arguments.length?(c=e,p=Js[!c<<1|!l],t):c},t.y=function(e){return arguments.length?(l=e,p=Js[!c<<1|!l],t):l},t.clamp=function(e){return arguments.length?(c&&l?(f=!!e[0],_=!!e[1]):c?f=!!e:l&&(_=!!e),t):c&&l?[f,_]:c?f:l?_:null},t.extent=function(e){var n,r,i,o,s;return arguments.length?(c&&(n=e[0],r=e[1],l&&(n=n[0],r=r[0]),a=[n,r],c.invert&&(n=c(n),r=c(r)),r<n&&(s=n,n=r,r=s),n==d[0]&&r==d[1]||(d=[n,r])),l&&(i=e[0],o=e[1],c&&(i=i[1],o=o[1]),u=[i,o],l.invert&&(i=l(i),o=l(o)),o<i&&(s=i,i=o,o=s),i==h[0]&&o==h[1]||(h=[i,o])),t):(c&&(a?(n=a[0],r=a[1]):(n=d[0],r=d[1],c.invert&&(n=c.invert(n),r=c.invert(r)),r<n&&(s=n,n=r,r=s))),l&&(u?(i=u[0],o=u[1]):(i=h[0],o=h[1],l.invert&&(i=l.invert(i),o=l.invert(o)),o<i&&(s=i,i=o,o=s))),c&&l?[[n,i],[r,o]]:c?[n,r]:l&&[i,o])},t.clear=function(){return t.empty()||(d=[0,0],h=[0,0],a=u=null),t},t.empty=function(){return!!c&&d[0]==d[1]||!!l&&h[0]==h[1]},fo.rebind(t,s,"on")};var Gs={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Js=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Zs=pu.format=bu.timeFormat,Ks=Zs.utc,Xs=Ks("%Y-%m-%dT%H:%M:%S.%LZ");Zs.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?uo:Xs,uo.parse=function(t){var e=new Date(t);return isNaN(e)?null:e},uo.toString=Xs.toString,pu.second=Ut(function(t){return new mu(1e3*Math.floor(t/1e3))},function(t,e){t.setTime(t.getTime()+1e3*Math.floor(e))},function(t){return t.getSeconds()}),pu.seconds=pu.second.range,pu.seconds.utc=pu.second.utc.range,pu.minute=Ut(function(t){return new mu(6e4*Math.floor(t/6e4))},function(t,e){t.setTime(t.getTime()+6e4*Math.floor(e))},function(t){return t.getMinutes()}),pu.minutes=pu.minute.range,pu.minutes.utc=pu.minute.utc.range,pu.hour=Ut(function(t){var e=t.getTimezoneOffset()/60;return new mu(36e5*(Math.floor(t/36e5-e)+e))},function(t,e){t.setTime(t.getTime()+36e5*Math.floor(e))},function(t){return t.getHours()}),pu.hours=pu.hour.range,pu.hours.utc=pu.hour.utc.range,pu.month=Ut(function(t){return t=pu.day(t),t.setDate(1),t},function(t,e){t.setMonth(t.getMonth()+e)},function(t){return t.getMonth()}),pu.months=pu.month.range,pu.months.utc=pu.month.utc.range;var Qs=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],tc=[[pu.second,1],[pu.second,5],[pu.second,15],[pu.second,30],[pu.minute,1],[pu.minute,5],[pu.minute,15],[pu.minute,30],[pu.hour,1],[pu.hour,3],[pu.hour,6],[pu.hour,12],[pu.day,1],[pu.day,2],[pu.week,1],[pu.month,1],[pu.month,3],[pu.year,1]],ec=Zs.multi([[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["%I:%M",function(t){return t.getMinutes()}],["%I %p",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!=t.getDate()}],["%b %d",function(t){return 1!=t.getDate()}],["%B",function(t){return t.getMonth()}],["%Y",je]]),nc={range:function(t,e,n){return fo.range(Math.ceil(t/n)*n,+e,n).map(co)},floor:k,ceil:k};tc.year=pu.year,pu.scale=function(){return so(fo.scale.linear(),tc,ec)};var rc=tc.map(function(t){return[t[0].utc,t[1]]}),ic=Ks.multi([[".%L",function(t){return t.getUTCMilliseconds()}],[":%S",function(t){return t.getUTCSeconds()}],["%I:%M",function(t){return t.getUTCMinutes()}],["%I %p",function(t){return t.getUTCHours()}],["%a %d",function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],["%b %d",function(t){return 1!=t.getUTCDate()}],["%B",function(t){return t.getUTCMonth()}],["%Y",je]]);rc.year=pu.year.utc,pu.scale.utc=function(){return so(fo.scale.linear(),rc,ic)},fo.text=Ft(function(t){return t.responseText}),fo.json=function(t,e){return Ct(t,"application/json",lo,e)},fo.html=function(t,e){return Ct(t,"text/html",ho,e)},fo.xml=Ft(function(t){return t.responseXML}),this.d3=fo,r=fo,void 0!==(i="function"==typeof r?r.call(e,n,e,t):r)&&(t.exports=i)}()},function(t,e,n){(function(t,r){var i=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,4],r=[1,3],i=[1,5],a=[1,8,9,10,11,13,18,30,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],o=[2,2],u=[1,12],s=[1,13],c=[1,14],l=[1,15],d=[1,31],h=[1,33],f=[1,22],_=[1,34],p=[1,24],m=[1,25],y=[1,26],g=[1,27],v=[1,28],M=[1,38],b=[1,40],L=[1,35],k=[1,39],w=[1,45],D=[1,44],x=[1,36],Y=[1,37],T=[1,41],A=[1,42],E=[1,43],S=[1,8,9,10,11,13,18,30,32,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],F=[1,53],C=[1,52],j=[1,54],H=[1,72],O=[1,80],P=[1,81],N=[1,66],B=[1,65],I=[1,85],R=[1,84],W=[1,82],z=[1,83],q=[1,73],U=[1,68],$=[1,67],V=[1,63],G=[1,75],J=[1,76],Z=[1,77],K=[1,78],X=[1,79],Q=[1,70],tt=[1,69],et=[8,9,11],nt=[8,9,11,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64],rt=[1,115],it=[8,9,10,11,13,15,18,36,38,40,42,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,86,88,89,91,92,94,95,96,97,98],at=[8,9,10,11,12,13,15,16,17,18,30,32,36,37,38,39,40,41,42,43,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,71,72,73,74,75,78,81,84,86,88,89,91,92,94,95,96,97,98],ot=[1,117],ut=[1,118],st=[8,9,10,11,13,18,30,32,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],ct=[8,9,10,11,12,13,15,16,17,18,30,32,37,39,41,43,46,50,51,52,53,54,56,57,58,59,60,61,62,63,64,65,71,72,73,74,75,78,81,84,86,88,89,91,92,94,95,96,97,98],lt=[13,18,46,81,86,88,89,91,92,94,95,96,97,98],dt=[13,18,46,49,65,81,86,88,89,91,92,94,95,96,97,98],ht=[1,191],ft=[1,188],_t=[1,195],pt=[1,192],mt=[1,189],yt=[1,196],gt=[1,186],vt=[1,187],Mt=[1,190],bt=[1,193],Lt=[1,194],kt=[1,213],wt=[8,9,11,86],Dt=[8,9,10,11,46,71,80,81,84,86,88,89,90,91,92],xt={trace:function(){},yy:{},symbols_:{error:2,mermaidDoc:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,DIR:13,FirstStmtSeperator:14,TAGEND:15,TAGSTART:16,UP:17,DOWN:18,ending:19,endToken:20,spaceList:21,spaceListNewline:22,verticeStatement:23,separator:24,styleStatement:25,linkStyleStatement:26,classDefStatement:27,classStatement:28,clickStatement:29,subgraph:30,text:31,end:32,vertex:33,link:34,alphaNum:35,SQS:36,SQE:37,PS:38,PE:39,"(-":40,"-)":41,DIAMOND_START:42,DIAMOND_STOP:43,alphaNumStatement:44,alphaNumToken:45,MINUS:46,linkStatement:47,arrowText:48,TESTSTR:49,"--":50,ARROW_POINT:51,ARROW_CIRCLE:52,ARROW_CROSS:53,ARROW_OPEN:54,"-.":55,DOTTED_ARROW_POINT:56,DOTTED_ARROW_CIRCLE:57,DOTTED_ARROW_CROSS:58,DOTTED_ARROW_OPEN:59,"==":60,THICK_ARROW_POINT:61,THICK_ARROW_CIRCLE:62,THICK_ARROW_CROSS:63,THICK_ARROW_OPEN:64,PIPE:65,textToken:66,STR:67,commentText:68,commentToken:69,keywords:70,STYLE:71,LINKSTYLE:72,CLASSDEF:73,CLASS:74,CLICK:75,textNoTags:76,textNoTagsToken:77,DEFAULT:78,stylesOpt:79,HEX:80,NUM:81,INTERPOLATE:82,commentStatement:83,PCT:84,style:85,COMMA:86,styleComponent:87,ALPHA:88,COLON:89,UNIT:90,BRKT:91,DOT:92,graphCodeTokens:93,PUNCTUATION:94,UNICODE_TEXT:95,PLUS:96,EQUALS:97,MULT:98,TAG_START:99,TAG_END:100,QUOTE:101,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"DIR",15:"TAGEND",16:"TAGSTART",17:"UP",18:"DOWN",30:"subgraph",32:"end",36:"SQS",37:"SQE",38:"PS",39:"PE",40:"(-",41:"-)",42:"DIAMOND_START",43:"DIAMOND_STOP",46:"MINUS",49:"TESTSTR",50:"--",51:"ARROW_POINT",52:"ARROW_CIRCLE",53:"ARROW_CROSS",54:"ARROW_OPEN",55:"-.",56:"DOTTED_ARROW_POINT",57:"DOTTED_ARROW_CIRCLE",58:"DOTTED_ARROW_CROSS",59:"DOTTED_ARROW_OPEN",60:"==",61:"THICK_ARROW_POINT",62:"THICK_ARROW_CIRCLE",63:"THICK_ARROW_CROSS",64:"THICK_ARROW_OPEN",65:"PIPE",67:"STR",71:"STYLE",72:"LINKSTYLE",73:"CLASSDEF",74:"CLASS",75:"CLICK",78:"DEFAULT",80:"HEX",81:"NUM",82:"INTERPOLATE",84:"PCT",86:"COMMA",88:"ALPHA",89:"COLON",90:"UNIT",91:"BRKT",92:"DOT",94:"PUNCTUATION",95:"UNICODE_TEXT",96:"PLUS",97:"EQUALS",98:"MULT",99:"TAG_START",100:"TAG_END",101:"QUOTE"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,4],[4,4],[4,4],[4,4],[4,4],[19,2],[19,1],[20,1],[20,1],[20,1],[14,1],[14,1],[14,2],[22,2],[22,2],[22,1],[22,1],[21,2],[21,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,5],[7,4],[24,1],[24,1],[24,1],[23,3],[23,1],[33,4],[33,5],[33,6],[33,7],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,1],[33,2],[35,1],[35,2],[44,1],[44,1],[44,1],[44,1],[34,2],[34,3],[34,3],[34,1],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[48,3],[31,1],[31,2],[31,1],[68,1],[68,2],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[76,1],[76,2],[27,5],[27,5],[28,5],[29,5],[29,7],[29,5],[29,7],[25,5],[25,5],[26,5],[26,5],[26,9],[26,9],[26,7],[26,7],[83,3],[79,1],[79,3],[85,1],[85,2],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[69,1],[69,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[77,1],[77,1],[77,1],[77,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1]],performAction:function(t,e,n,r,i,a,o){var u=a.length-1;switch(i){case 2:this.$=[];break;case 3:a[u]!==[]&&a[u-1].push(a[u]),this.$=a[u-1];break;case 4:case 57:case 59:case 60:case 92:case 94:case 95:case 108:this.$=a[u];break;case 11:r.setDirection(a[u-1]),this.$=a[u-1];break;case 12:r.setDirection("LR"),this.$=a[u-1];break;case 13:r.setDirection("RL"),this.$=a[u-1];break;case 14:r.setDirection("BT"),this.$=a[u-1];break;case 15:r.setDirection("TB"),this.$=a[u-1];break;case 30:this.$=a[u-1];break;case 31:case 32:case 33:case 34:case 35:this.$=[];break;case 36:this.$=r.addSubGraph(a[u-1],a[u-3]);break;case 37:this.$=r.addSubGraph(a[u-1],void 0);break;case 41:r.addLink(a[u-2],a[u],a[u-1]),this.$=[a[u-2],a[u]];break;case 42:this.$=[a[u]];break;case 43:this.$=a[u-3],r.addVertex(a[u-3],a[u-1],"square");break;case 44:this.$=a[u-4],r.addVertex(a[u-4],a[u-2],"square");break;case 45:this.$=a[u-5],r.addVertex(a[u-5],a[u-2],"circle");break;case 46:this.$=a[u-6],r.addVertex(a[u-6],a[u-3],"circle");break;case 47:this.$=a[u-3],r.addVertex(a[u-3],a[u-1],"ellipse");break;case 48:this.$=a[u-4],r.addVertex(a[u-4],a[u-2],"ellipse");break;case 49:this.$=a[u-3],r.addVertex(a[u-3],a[u-1],"round");break;case 50:this.$=a[u-4],r.addVertex(a[u-4],a[u-2],"round");break;case 51:this.$=a[u-3],r.addVertex(a[u-3],a[u-1],"diamond");break;case 52:this.$=a[u-4],r.addVertex(a[u-4],a[u-2],"diamond");break;case 53:this.$=a[u-3],r.addVertex(a[u-3],a[u-1],"odd");break;case 54:this.$=a[u-4],r.addVertex(a[u-4],a[u-2],"odd");break;case 55:this.$=a[u],r.addVertex(a[u]);break;case 56:this.$=a[u-1],r.addVertex(a[u-1]);break;case 58:case 93:case 96:case 109:this.$=a[u-1]+""+a[u];break;case 61:this.$="v";break;case 62:this.$="-";break;case 63:a[u-1].text=a[u],this.$=a[u-1];break;case 64:case 65:a[u-2].text=a[u-1],this.$=a[u-2];break;case 66:this.$=a[u];break;case 67:this.$={type:"arrow",stroke:"normal",text:a[u-1]};break;case 68:this.$={type:"arrow_circle",stroke:"normal",text:a[u-1]};break;case 69:this.$={type:"arrow_cross",stroke:"normal",text:a[u-1]};break;case 70:this.$={type:"arrow_open",stroke:"normal",text:a[u-1]};break;case 71:this.$={type:"arrow",stroke:"dotted",text:a[u-1]};break;case 72:this.$={type:"arrow_circle",stroke:"dotted",text:a[u-1]};break;case 73:this.$={type:"arrow_cross",stroke:"dotted",text:a[u-1]};break;case 74:this.$={type:"arrow_open",stroke:"dotted",text:a[u-1]};break;case 75:this.$={type:"arrow",stroke:"thick",text:a[u-1]};break;case 76:this.$={type:"arrow_circle",stroke:"thick",text:a[u-1]};break;case 77:this.$={type:"arrow_cross",stroke:"thick",text:a[u-1]};break;case 78:this.$={type:"arrow_open",stroke:"thick",text:a[u-1]};break;case 79:this.$={type:"arrow",stroke:"normal"};break;case 80:this.$={type:"arrow_circle",stroke:"normal"};break;case 81:this.$={type:"arrow_cross",stroke:"normal"};break;case 82:this.$={type:"arrow_open",stroke:"normal"};break;case 83:this.$={type:"arrow",stroke:"dotted"};break;case 84:this.$={type:"arrow_circle",stroke:"dotted"};break;case 85:this.$={type:"arrow_cross",stroke:"dotted"};break;case 86:this.$={type:"arrow_open",stroke:"dotted"};break;case 87:this.$={type:"arrow",stroke:"thick"};break;case 88:this.$={type:"arrow_circle",stroke:"thick"};break;case 89:this.$={type:"arrow_cross",stroke:"thick"};break;case 90:this.$={type:"arrow_open",stroke:"thick"};break;case 91:this.$=a[u-1];break;case 110:case 111:this.$=a[u-4],r.addClass(a[u-2],a[u]);break;case 112:this.$=a[u-4],r.setClass(a[u-2],a[u]);break;case 113:this.$=a[u-4],r.setClickEvent(a[u-2],a[u],void 0,void 0);break;case 114:this.$=a[u-6],r.setClickEvent(a[u-4],a[u-2],void 0,a[u]);break;case 115:this.$=a[u-4],r.setClickEvent(a[u-2],void 0,a[u],void 0);break;case 116:this.$=a[u-6],r.setClickEvent(a[u-4],void 0,a[u-2],a[u]);break;case 117:this.$=a[u-4],r.addVertex(a[u-2],void 0,void 0,a[u]);break;case 118:case 119:case 120:this.$=a[u-4],r.updateLink(a[u-2],a[u]);break;case 121:case 122:this.$=a[u-8],r.updateLinkInterpolate(a[u-6],a[u-2]),r.updateLink(a[u-6],a[u]);break;case 123:case 124:this.$=a[u-6],r.updateLinkInterpolate(a[u-4],a[u]);break;case 126:this.$=[a[u]];break;case 127:a[u-2].push(a[u]),this.$=a[u-2];break;case 129:this.$=a[u-1]+a[u]}},table:[{3:1,4:2,9:n,10:r,12:i},{1:[3]},e(a,o,{5:6}),{4:7,9:n,10:r,12:i},{4:8,9:n,10:r,12:i},{10:[1,9]},{1:[2,1],6:10,7:11,8:u,9:s,10:c,11:l,13:d,18:h,23:16,25:17,26:18,27:19,28:20,29:21,30:f,33:23,35:29,44:30,45:32,46:_,71:p,72:m,73:y,74:g,75:v,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},e(a,[2,9]),e(a,[2,10]),{13:[1,46],15:[1,47],16:[1,48],17:[1,49],18:[1,50]},e(S,[2,3]),e(S,[2,4]),e(S,[2,5]),e(S,[2,6]),e(S,[2,7]),e(S,[2,8]),{8:F,9:C,11:j,24:51},{8:F,9:C,11:j,24:55},{8:F,9:C,11:j,24:56},{8:F,9:C,11:j,24:57},{8:F,9:C,11:j,24:58},{8:F,9:C,11:j,24:59},{8:F,9:C,10:H,11:j,12:O,13:P,15:N,16:B,17:I,18:R,24:61,30:W,31:60,32:z,45:71,46:q,50:U,60:$,66:62,67:V,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},e(et,[2,42],{34:86,47:87,50:[1,88],51:[1,91],52:[1,92],53:[1,93],54:[1,94],55:[1,89],56:[1,95],57:[1,96],58:[1,97],59:[1,98],60:[1,90],61:[1,99],62:[1,100],63:[1,101],64:[1,102]}),{10:[1,103]},{10:[1,104]},{10:[1,105]},{10:[1,106]},{10:[1,107]},e(nt,[2,55],{45:32,21:113,44:114,10:rt,13:d,15:[1,112],18:h,36:[1,108],38:[1,109],40:[1,110],42:[1,111],46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E}),e(it,[2,57]),e(it,[2,59]),e(it,[2,60]),e(it,[2,61]),e(it,[2,62]),e(at,[2,154]),e(at,[2,155]),e(at,[2,156]),e(at,[2,157]),e(at,[2,158]),e(at,[2,159]),e(at,[2,160]),e(at,[2,161]),e(at,[2,162]),e(at,[2,163]),e(at,[2,164]),{8:ot,9:ut,10:rt,14:116,21:119},{8:ot,9:ut,10:rt,14:120,21:119},{8:ot,9:ut,10:rt,14:121,21:119},{8:ot,9:ut,10:rt,14:122,21:119},{8:ot,9:ut,10:rt,14:123,21:119},e(S,[2,30]),e(S,[2,38]),e(S,[2,39]),e(S,[2,40]),e(S,[2,31]),e(S,[2,32]),e(S,[2,33]),e(S,[2,34]),e(S,[2,35]),{8:F,9:C,10:H,11:j,12:O,13:P,15:N,16:B,17:I,18:R,24:124,30:W,32:z,45:71,46:q,50:U,60:$,66:125,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},e(st,o,{5:126}),e(ct,[2,92]),e(ct,[2,94]),e(ct,[2,143]),e(ct,[2,144]),e(ct,[2,145]),e(ct,[2,146]),e(ct,[2,147]),e(ct,[2,148]),e(ct,[2,149]),e(ct,[2,150]),e(ct,[2,151]),e(ct,[2,152]),e(ct,[2,153]),e(ct,[2,97]),e(ct,[2,98]),e(ct,[2,99]),e(ct,[2,100]),e(ct,[2,101]),e(ct,[2,102]),e(ct,[2,103]),e(ct,[2,104]),e(ct,[2,105]),e(ct,[2,106]),e(ct,[2,107]),{13:d,18:h,33:127,35:29,44:30,45:32,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},e(lt,[2,66],{48:128,49:[1,129],65:[1,130]}),{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,31:131,32:z,45:71,46:q,50:U,60:$,66:62,67:V,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,31:132,32:z,45:71,46:q,50:U,60:$,66:62,67:V,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,31:133,32:z,45:71,46:q,50:U,60:$,66:62,67:V,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},e(dt,[2,79]),e(dt,[2,80]),e(dt,[2,81]),e(dt,[2,82]),e(dt,[2,83]),e(dt,[2,84]),e(dt,[2,85]),e(dt,[2,86]),e(dt,[2,87]),e(dt,[2,88]),e(dt,[2,89]),e(dt,[2,90]),{13:d,18:h,35:134,44:30,45:32,46:_,80:[1,135],81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{78:[1,136],81:[1,137]},{13:d,18:h,35:139,44:30,45:32,46:_,78:[1,138],81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{13:d,18:h,35:140,44:30,45:32,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{13:d,18:h,35:141,44:30,45:32,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,31:142,32:z,45:71,46:q,50:U,60:$,66:62,67:V,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,31:144,32:z,38:[1,143],45:71,46:q,50:U,60:$,66:62,67:V,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,31:145,32:z,45:71,46:q,50:U,60:$,66:62,67:V,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,31:146,32:z,45:71,46:q,50:U,60:$,66:62,67:V,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,31:147,32:z,45:71,46:q,50:U,60:$,66:62,67:V,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},e(nt,[2,56]),e(it,[2,58]),e(nt,[2,29],{21:148,10:rt}),e(a,[2,11]),e(a,[2,21]),e(a,[2,22]),{9:[1,149]},e(a,[2,12]),e(a,[2,13]),e(a,[2,14]),e(a,[2,15]),e(st,o,{5:150}),e(ct,[2,93]),{6:10,7:11,8:u,9:s,10:c,11:l,13:d,18:h,23:16,25:17,26:18,27:19,28:20,29:21,30:f,32:[1,151],33:23,35:29,44:30,45:32,46:_,71:p,72:m,73:y,74:g,75:v,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},e(et,[2,41]),e(lt,[2,63],{10:[1,152]}),{10:[1,153]},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,31:154,32:z,45:71,46:q,50:U,60:$,66:62,67:V,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,32:z,45:71,46:q,50:U,51:[1,155],52:[1,156],53:[1,157],54:[1,158],60:$,66:125,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,32:z,45:71,46:q,50:U,56:[1,159],57:[1,160],58:[1,161],59:[1,162],60:$,66:125,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,32:z,45:71,46:q,50:U,60:$,61:[1,163],62:[1,164],63:[1,165],64:[1,166],66:125,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:[1,167],13:d,18:h,44:114,45:32,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:[1,168]},{10:[1,169]},{10:[1,170]},{10:[1,171]},{10:[1,172],13:d,18:h,44:114,45:32,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:[1,173],13:d,18:h,44:114,45:32,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:[1,174],13:d,18:h,44:114,45:32,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,32:z,37:[1,175],45:71,46:q,50:U,60:$,66:125,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,31:176,32:z,45:71,46:q,50:U,60:$,66:62,67:V,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,32:z,39:[1,177],45:71,46:q,50:U,60:$,66:125,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,32:z,41:[1,178],45:71,46:q,50:U,60:$,66:125,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,32:z,43:[1,179],45:71,46:q,50:U,60:$,66:125,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,32:z,37:[1,180],45:71,46:q,50:U,60:$,66:125,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},e(nt,[2,28]),e(a,[2,23]),{6:10,7:11,8:u,9:s,10:c,11:l,13:d,18:h,23:16,25:17,26:18,27:19,28:20,29:21,30:f,32:[1,181],33:23,35:29,44:30,45:32,46:_,71:p,72:m,73:y,74:g,75:v,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},e(S,[2,37]),e(lt,[2,65]),e(lt,[2,64]),{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,32:z,45:71,46:q,50:U,60:$,65:[1,182],66:125,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},e(lt,[2,67]),e(lt,[2,68]),e(lt,[2,69]),e(lt,[2,70]),e(lt,[2,71]),e(lt,[2,72]),e(lt,[2,73]),e(lt,[2,74]),e(lt,[2,75]),e(lt,[2,76]),e(lt,[2,77]),e(lt,[2,78]),{10:ht,46:ft,71:_t,79:183,80:pt,81:mt,84:yt,85:184,87:185,88:gt,89:vt,90:Mt,91:bt,92:Lt},{10:ht,46:ft,71:_t,79:197,80:pt,81:mt,84:yt,85:184,87:185,88:gt,89:vt,90:Mt,91:bt,92:Lt},{10:ht,46:ft,71:_t,79:198,80:pt,81:mt,82:[1,199],84:yt,85:184,87:185,88:gt,89:vt,90:Mt,91:bt,92:Lt},{10:ht,46:ft,71:_t,79:200,80:pt,81:mt,82:[1,201],84:yt,85:184,87:185,88:gt,89:vt,90:Mt,91:bt,92:Lt},{10:ht,46:ft,71:_t,79:202,80:pt,81:mt,84:yt,85:184,87:185,88:gt,89:vt,90:Mt,91:bt,92:Lt},{10:ht,46:ft,71:_t,79:203,80:pt,81:mt,84:yt,85:184,87:185,88:gt,89:vt,90:Mt,91:bt,92:Lt},{13:d,18:h,35:204,44:30,45:32,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{13:d,18:h,35:205,44:30,45:32,46:_,67:[1,206],81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},e(nt,[2,43],{21:207,10:rt}),{10:H,12:O,13:P,15:N,16:B,17:I,18:R,30:W,32:z,39:[1,208],45:71,46:q,50:U,60:$,66:125,70:74,71:G,72:J,73:Z,74:K,75:X,77:64,78:Q,81:M,84:tt,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},e(nt,[2,49],{21:209,10:rt}),e(nt,[2,47],{21:210,10:rt}),e(nt,[2,51],{21:211,10:rt}),e(nt,[2,53],{21:212,10:rt}),e(S,[2,36]),e([10,13,18,46,81,86,88,89,91,92,94,95,96,97,98],[2,91]),e(et,[2,117],{86:kt}),e(wt,[2,126],{87:214,10:ht,46:ft,71:_t,80:pt,81:mt,84:yt,88:gt,89:vt,90:Mt,91:bt,92:Lt}),e(Dt,[2,128]),e(Dt,[2,130]),e(Dt,[2,131]),e(Dt,[2,132]),e(Dt,[2,133]),e(Dt,[2,134]),e(Dt,[2,135]),e(Dt,[2,136]),e(Dt,[2,137]),e(Dt,[2,138]),e(Dt,[2,139]),e(Dt,[2,140]),e(et,[2,118],{86:kt}),e(et,[2,119],{86:kt}),{10:[1,215]},e(et,[2,120],{86:kt}),{10:[1,216]},e(et,[2,110],{86:kt}),e(et,[2,111],{86:kt}),e(et,[2,112],{45:32,44:114,13:d,18:h,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E}),e(et,[2,113],{45:32,44:114,10:[1,217],13:d,18:h,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E}),e(et,[2,115],{10:[1,218]}),e(nt,[2,44]),{39:[1,219]},e(nt,[2,50]),e(nt,[2,48]),e(nt,[2,52]),e(nt,[2,54]),{10:ht,46:ft,71:_t,80:pt,81:mt,84:yt,85:220,87:185,88:gt,89:vt,90:Mt,91:bt,92:Lt},e(Dt,[2,129]),{13:d,18:h,35:221,44:30,45:32,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{13:d,18:h,35:222,44:30,45:32,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E},{67:[1,223]},{67:[1,224]},e(nt,[2,45],{21:225,10:rt}),e(wt,[2,127],{87:214,10:ht,46:ft,71:_t,80:pt,81:mt,84:yt,88:gt,89:vt,90:Mt,91:bt,92:Lt}),e(et,[2,123],{45:32,44:114,10:[1,226],13:d,18:h,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E}),e(et,[2,124],{45:32,44:114,10:[1,227],13:d,18:h,46:_,81:M,86:b,88:L,89:k,91:w,92:D,94:x,95:Y,96:T,97:A,98:E}),e(et,[2,114]),e(et,[2,116]),e(nt,[2,46]),{10:ht,46:ft,71:_t,79:228,80:pt,81:mt,84:yt,85:184,87:185,88:gt,89:vt,90:Mt,91:bt,92:Lt},{10:ht,46:ft,71:_t,79:229,80:pt,81:mt,84:yt,85:184,87:185,88:gt,89:vt,90:Mt,91:bt,92:Lt},e(et,[2,121],{86:kt}),e(et,[2,122],{86:kt})],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[null],i=[],a=this.table,o="",u=0,s=0,c=0,l=i.slice.call(arguments,1),d=Object.create(this.lexer),h={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(h.yy[f]=this.yy[f]);d.setInput(t,h.yy),h.yy.lexer=d,h.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var _=d.yylloc;i.push(_);var p=d.options&&d.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,y,g,v,M,b,L,k,w,D={};;){if(g=n[n.length-1],this.defaultActions[g]?v=this.defaultActions[g]:(null!==m&&void 0!==m||(m=function(){var t;return t=d.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),v=a[g]&&a[g][m]),void 0===v||!v.length||!v[0]){var x="";w=[];for(b in a[g])this.terminals_[b]&&b>2&&w.push("'"+this.terminals_[b]+"'");x=d.showPosition?"Parse error on line "+(u+1)+":\n"+d.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(x,{text:d.match,token:this.terminals_[m]||m,line:d.yylineno,loc:_,expected:w})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(v[0]){case 1:n.push(m),r.push(d.yytext),i.push(d.yylloc),n.push(v[1]),m=null,y?(m=y,y=null):(s=d.yyleng,o=d.yytext,u=d.yylineno,_=d.yylloc,c>0&&c--);break;case 2:if(L=this.productions_[v[1]][1],D.$=r[r.length-L],D._$={first_line:i[i.length-(L||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(L||1)].first_column,last_column:i[i.length-1].last_column},p&&(D._$.range=[i[i.length-(L||1)].range[0],i[i.length-1].range[1]]),void 0!==(M=this.performAction.apply(D,[o,s,u,h.yy,v[1],r,i].concat(l))))return M;L&&(n=n.slice(0,-1*L*2),r=r.slice(0,-1*L),i=i.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),r.push(D.$),i.push(D._$),k=a[n[n.length-2]][n[n.length-1]],n.push(k);break;case 3:return!0}}return!0}},Yt=function(){return{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),r&&(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;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[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),t>=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:break;case 1:this.begin("string");break;case 2:this.popState();break;case 3:return"STR";case 4:return 71;case 5:return 78;case 6:return 72;case 7:return 82;case 8:return 73;case 9:return 74;case 10:return 75;case 11:return 12;case 12:return 30;case 13:return 32;case 14:case 15:case 16:case 17:case 18:case 19:return 13;case 20:return 81;case 21:return 91;case 22:return 89;case 23:return 8;case 24:return 86;case 25:return 98;case 26:return 16;case 27:return 15;case 28:return 17;case 29:return 18;case 30:return 53;case 31:return 51;case 32:return 52;case 33:return 54;case 34:return 58;case 35:return 56;case 36:return 57;case 37:return 59;case 38:return 58;case 39:return 56;case 40:return 57;case 41:return 59;case 42:return 63;case 43:return 61;case 44:return 62;case 45:return 64;case 46:return 50;case 47:return 55;case 48:return 60;case 49:return 40;case 50:return 41;case 51:return 46;case 52:return 92;case 53:return 96;case 54:return 84;case 55:case 56:return 97;case 57:return 88;case 58:return 94;case 59:return 95;case 60:return 65;case 61:return 38;case 62:return 39;case 63:return 36;case 64:return 37;case 65:return 42;case 66:return 43;case 67:return 101;case 68:return 9;case 69:return 10;case 70:return 11}},rules:[/^(?:%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:v\b)/,/^(?:\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*==[x]\s*)/,/^(?:\s*==>\s*)/,/^(?:\s*==[o]\s*)/,/^(?:\s*==[\=]\s*)/,/^(?:\s*--\s*)/,/^(?:\s*-\.\s*)/,/^(?:\s*==\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[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])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\n+)/,/^(?:\s)/,/^(?:$)/],conditions:{string:{rules:[2,3],inclusive:!1},INITIAL:{rules:[0,1,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,33,34,35,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],inclusive:!0}}}}();return xt.lexer=Yt,t.prototype=xt,xt.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(12).readFileSync(n(13).normalize(r[1]),"utf8");return e.parser.parse(i)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(11),n(4)(t))},function(t,e,n){(function(t,r){var i=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,5],r=[1,6],i=[1,12],a=[1,13],o=[1,14],u=[1,15],s=[1,16],c=[1,17],l=[1,18],d=[1,19],h=[1,20],f=[1,21],_=[1,22],p=[8,16,17,18,19,20,21,22,23,24,25,26],m=[1,37],y=[1,33],g=[1,34],v=[1,35],M=[1,36],b=[8,10,16,17,18,19,20,21,22,23,24,25,26,28,32,37,39,40,45,57,58],L=[10,28],k=[10,28,37,57,58],w=[2,49],D=[1,45],x=[1,48],Y=[1,49],T=[1,52],A=[2,65],E=[1,65],S=[1,66],F=[1,67],C=[1,68],j=[1,69],H=[1,70],O=[1,71],P=[1,72],N=[1,73],B=[8,16,17,18,19,20,21,22,23,24,25,26,47],I=[10,28,37],R={trace:function(){},yy:{},symbols_:{error:2,expressions:3,graph:4,EOF:5,graphStatement:6,idStatement:7,"{":8,stmt_list:9,"}":10,strict:11,GRAPH:12,DIGRAPH:13,textNoTags:14,textNoTagsToken:15,ALPHA:16,NUM:17,COLON:18,PLUS:19,EQUALS:20,MULT:21,DOT:22,BRKT:23,SPACE:24,MINUS:25,keywords:26,stmt:27,";":28,node_stmt:29,edge_stmt:30,attr_stmt:31,"=":32,subgraph:33,attr_list:34,NODE:35,EDGE:36,"[":37,a_list:38,"]":39,",":40,edgeRHS:41,node_id:42,edgeop:43,port:44,":":45,compass_pt:46,SUBGRAPH:47,n:48,ne:49,e:50,se:51,s:52,sw:53,w:54,nw:55,c:56,ARROW_POINT:57,ARROW_OPEN:58,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",8:"{",10:"}",11:"strict",12:"GRAPH",13:"DIGRAPH",16:"ALPHA",17:"NUM",18:"COLON",19:"PLUS",20:"EQUALS",21:"MULT",22:"DOT",23:"BRKT",24:"SPACE",25:"MINUS",26:"keywords",28:";",32:"=",35:"NODE",36:"EDGE",37:"[",39:"]",40:",",45:":",47:"SUBGRAPH",48:"n",49:"ne",50:"e",51:"se",52:"s",53:"sw",54:"w",55:"nw",56:"c",57:"ARROW_POINT",58:"ARROW_OPEN"},productions_:[0,[3,2],[4,5],[4,6],[4,4],[6,1],[6,1],[7,1],[14,1],[14,2],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[9,1],[9,3],[27,1],[27,1],[27,1],[27,3],[27,1],[31,2],[31,2],[31,2],[34,4],[34,3],[34,3],[34,2],[38,5],[38,5],[38,3],[30,3],[30,3],[30,2],[30,2],[41,3],[41,3],[41,2],[41,2],[29,2],[29,1],[42,2],[42,1],[44,4],[44,2],[44,2],[33,5],[33,4],[33,3],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,0],[43,1],[43,1]],performAction:function(t,e,n,r,i,a,o){var u=a.length-1;switch(i){case 1:this.$=a[u-1];break;case 2:this.$=a[u-4];break;case 3:this.$=a[u-5];break;case 4:this.$=a[u-3];break;case 8:case 10:case 11:this.$=a[u];break;case 9:this.$=a[u-1]+""+a[u];break;case 12:case 13:case 14:case 15:case 16:case 18:case 19:case 20:this.$=a[u];break;case 17:this.$="<br>";break;case 39:this.$="oy";break;case 40:r.addLink(a[u-1],a[u].id,a[u].op),this.$="oy";break;case 42:r.addLink(a[u-1],a[u].id,a[u].op),this.$={op:a[u-2],id:a[u-1]};break;case 44:this.$={op:a[u-1],id:a[u]};break;case 48:r.addVertex(a[u-1]),this.$=a[u-1];break;case 49:r.addVertex(a[u]),this.$=a[u];break;case 66:this.$="arrow";break;case 67:this.$="arrow_open"}},table:[{3:1,4:2,6:3,11:[1,4],12:n,13:r},{1:[3]},{5:[1,7]},{7:8,8:[1,9],14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_},{6:23,12:n,13:r},e(p,[2,5]),e(p,[2,6]),{1:[2,1]},{8:[1,24]},{7:30,8:m,9:25,12:y,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},e([8,10,28,32,37,39,40,45,57,58],[2,7],{15:38,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_}),e(b,[2,8]),e(b,[2,10]),e(b,[2,11]),e(b,[2,12]),e(b,[2,13]),e(b,[2,14]),e(b,[2,15]),e(b,[2,16]),e(b,[2,17]),e(b,[2,18]),e(b,[2,19]),e(b,[2,20]),{7:39,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_},{7:30,8:m,9:40,12:y,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},{10:[1,41]},{10:[2,21],28:[1,42]},e(L,[2,23]),e(L,[2,24]),e(L,[2,25]),e(k,w,{44:44,32:[1,43],45:D}),e(L,[2,27],{41:46,43:47,57:x,58:Y}),e(L,[2,47],{43:47,34:50,41:51,37:T,57:x,58:Y}),{34:53,37:T},{34:54,37:T},{34:55,37:T},{7:56,8:[1,57],14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_},{7:30,8:m,9:58,12:y,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},e(b,[2,9]),{8:[1,59]},{10:[1,60]},{5:[2,4]},{7:30,8:m,9:61,12:y,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},{7:62,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_},e(k,[2,48]),e(k,A,{14:10,15:11,7:63,46:64,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_,48:E,49:S,50:F,51:C,52:j,53:H,54:O,55:P,56:N}),e(L,[2,41],{34:74,37:T}),{7:77,8:m,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_,33:76,42:75,47:M},e(B,[2,66]),e(B,[2,67]),e(L,[2,46]),e(L,[2,40],{34:78,37:T}),{7:81,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_,38:79,39:[1,80]},e(L,[2,28]),e(L,[2,29]),e(L,[2,30]),{8:[1,82]},{7:30,8:m,9:83,12:y,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},{10:[1,84]},{7:30,8:m,9:85,12:y,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},{5:[2,2]},{10:[2,22]},e(L,[2,26]),e(k,[2,51],{45:[1,86]}),e(k,[2,52]),e(k,[2,56]),e(k,[2,57]),e(k,[2,58]),e(k,[2,59]),e(k,[2,60]),e(k,[2,61]),e(k,[2,62]),e(k,[2,63]),e(k,[2,64]),e(L,[2,38]),e(I,[2,44],{43:47,41:87,57:x,58:Y}),e(I,[2,45],{43:47,41:88,57:x,58:Y}),e(k,w,{44:44,45:D}),e(L,[2,39]),{39:[1,89]},e(L,[2,34],{34:90,37:T}),{32:[1,91]},{7:30,8:m,9:92,12:y,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_,27:26,29:27,30:28,31:29,33:31,35:g,36:v,42:32,47:M},{10:[1,93]},e(k,[2,55]),{10:[1,94]},e(k,A,{46:95,48:E,49:S,50:F,51:C,52:j,53:H,54:O,55:P,56:N}),e(I,[2,42]),e(I,[2,43]),e(L,[2,33],{34:96,37:T}),e(L,[2,32]),{7:97,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_},{10:[1,98]},e(k,[2,54]),{5:[2,3]},e(k,[2,50]),e(L,[2,31]),{28:[1,99],39:[2,37],40:[1,100]},e(k,[2,53]),{7:81,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_,38:101},{7:81,14:10,15:11,16:i,17:a,18:o,19:u,20:s,21:c,22:l,23:d,24:h,25:f,26:_,38:102},{39:[2,35]},{39:[2,36]}],defaultActions:{7:[2,1],41:[2,4],60:[2,2],61:[2,22],94:[2,3],101:[2,35],102:[2,36]},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[null],i=[],a=this.table,o="",u=0,s=0,c=0,l=i.slice.call(arguments,1),d=Object.create(this.lexer),h={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(h.yy[f]=this.yy[f]);d.setInput(t,h.yy),h.yy.lexer=d,h.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var _=d.yylloc;i.push(_);var p=d.options&&d.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,y,g,v,M,b,L,k,w,D={};;){if(g=n[n.length-1],this.defaultActions[g]?v=this.defaultActions[g]:(null!==m&&void 0!==m||(m=function(){var t;return t=d.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),v=a[g]&&a[g][m]),void 0===v||!v.length||!v[0]){var x="";w=[];for(b in a[g])this.terminals_[b]&&b>2&&w.push("'"+this.terminals_[b]+"'");x=d.showPosition?"Parse error on line "+(u+1)+":\n"+d.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(x,{text:d.match,token:this.terminals_[m]||m,line:d.yylineno,loc:_,expected:w})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(v[0]){case 1:n.push(m),r.push(d.yytext),i.push(d.yylloc),n.push(v[1]),m=null,y?(m=y,y=null):(s=d.yyleng,o=d.yytext,u=d.yylineno,_=d.yylloc,c>0&&c--);break;case 2:if(L=this.productions_[v[1]][1],D.$=r[r.length-L],D._$={first_line:i[i.length-(L||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(L||1)].first_column,last_column:i[i.length-1].last_column},p&&(D._$.range=[i[i.length-(L||1)].range[0],i[i.length-1].range[1]]),void 0!==(M=this.performAction.apply(D,[o,s,u,h.yy,v[1],r,i].concat(l))))return M;L&&(n=n.slice(0,-1*L*2),r=r.slice(0,-1*L),i=i.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),r.push(D.$),i.push(D._$),k=a[n[n.length-2]][n[n.length-1]],n.push(k);break;case 3:return!0}}return!0}},W=function(){return{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),r&&(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;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[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),t>=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"STYLE";case 1:return"LINKSTYLE";case 2:return"CLASSDEF";case 3:return"CLASS";case 4:return"CLICK";case 5:return 12;case 6:return 13;case 7:return 47;case 8:return 35;case 9:return 36;case 10:case 11:case 12:case 13:case 14:case 15:return"DIR";case 16:return 17;case 17:return 23;case 18:return 18;case 19:return 28;case 20:return 40;case 21:return 32;case 22:return 21;case 23:return 22;case 24:return"ARROW_CROSS";case 25:return 57;case 26:return"ARROW_CIRCLE";case 27:return 58;case 28:return 25;case 29:return 19;case 30:return 20;case 31:return 16;case 32:return"PIPE";case 33:return"PS";case 34:return"PE";case 35:return 37;case 36:return 39;case 37:return 8;case 38:return 10;case 39:return"QUOTE";case 40:return 24;case 41:return"NEWLINE";case 42:return 5}},rules:[/^(?:style\b)/,/^(?:linkStyle\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:digraph\b)/,/^(?:subgraph\b)/,/^(?:node\b)/,/^(?:edge\b)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9])/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:=)/,/^(?:\*)/,/^(?:\.)/,/^(?:--[x])/,/^(?:->)/,/^(?:--[o])/,/^(?:--)/,/^(?:-)/,/^(?:\+)/,/^(?:=)/,/^(?:[\u0021-\u0027\u002A-\u002E\u003F\u0041-\u005A\u0061-\u007A\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)/,/^(?:\n)/,/^(?:$)/],conditions:{INITIAL:{rules:[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,33,34,35,36,37,38,39,40,41,42],inclusive:!0}}}}();return R.lexer=W,t.prototype=R,R.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(12).readFileSync(n(13).normalize(r[1]),"utf8");return e.parser.parse(i)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(11),n(4)(t))},function(t,e,n){function r(t,e,n,r){return i(t,String(e),n||u,r||function(e){return t.outEdges(e)})}function i(t,e,n,r){var i,a,u={},s=new o,c=function(t){var e=t.v!==i?t.v:t.w,r=u[e],o=n(t),c=a.distance+o;if(o<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+t+" Weight: "+o);c<r.distance&&(r.distance=c,r.predecessor=i,s.decrease(e,c))};for(t.nodes().forEach(function(t){var n=t===e?0:Number.POSITIVE_INFINITY;u[t]={distance:n},s.add(t,n)});s.size()>0&&(i=s.removeMin(),a=u[i],a.distance!==Number.POSITIVE_INFINITY);)r(i).forEach(c);return u}var a=n(5),o=n(28);t.exports=r;var u=a.constant(1)},function(t,e,n){function r(){this._arr=[],this._keyIndices={}}var i=n(5);t.exports=r,r.prototype.size=function(){return this._arr.length},r.prototype.keys=function(){return this._arr.map(function(t){return t.key})},r.prototype.has=function(t){return i.has(this._keyIndices,t)},r.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},r.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},r.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!i.has(n,t)){var r=this._arr,a=r.length;return n[t]=a,r.push({key:t,priority:e}),this._decrease(a),!0}return!1},r.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},r.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)},r.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n<e.length&&(i=e[n].priority<e[i].priority?n:i,r<e.length&&(i=e[r].priority<e[i].priority?r:i),i!==t&&(this._swap(t,i),this._heapify(i)))},r.prototype._decrease=function(t){for(var e,n=this._arr,r=n[t].priority;0!==t&&(e=t>>1,!(n[e].priority<r));)this._swap(t,e),t=e},r.prototype._swap=function(t,e){var n=this._arr,r=this._keyIndices,i=n[t],a=n[e];n[t]=a,n[e]=i,r[a.key]=t,r[i.key]=e}},function(t,e,n){function r(t){function e(u){var s=a[u]={onStack:!0,lowlink:n,index:n++};if(r.push(u),t.successors(u).forEach(function(t){i.has(a,t)?a[t].onStack&&(s.lowlink=Math.min(s.lowlink,a[t].index)):(e(t),s.lowlink=Math.min(s.lowlink,a[t].lowlink))}),s.lowlink===s.index){var c,l=[];do{c=r.pop(),a[c].onStack=!1,l.push(c)}while(u!==c);o.push(l)}}var n=0,r=[],a={},o=[];return t.nodes().forEach(function(t){i.has(a,t)||e(t)}),o}var i=n(5);t.exports=r},function(t,e,n){function r(t){function e(u){if(a.has(r,u))throw new i;a.has(n,u)||(r[u]=!0,n[u]=!0,a.each(t.predecessors(u),e),delete r[u],o.push(u))}var n={},r={},o=[];if(a.each(t.sinks(),e),a.size(n)!==t.nodeCount())throw new i;return o}function i(){}var a=n(5);t.exports=r,r.CycleException=i},function(t,e,n){function r(t,e,n){a.isArray(e)||(e=[e]);var r=(t.isDirected()?t.successors:t.neighbors).bind(t),o=[],u={};return a.each(e,function(e){if(!t.hasNode(e))throw new Error("Graph does not have node: "+e);i(t,e,"post"===n,u,r,o)}),o}function i(t,e,n,r,o,u){a.has(r,e)||(r[e]=!0,n||u.push(e),a.each(o(e),function(e){i(t,e,n,r,o,u)}),n&&u.push(e))}var a=n(5);t.exports=r},function(t,e,n){const r=n(33);t.exports=r},function(t,e,n){t.exports={graphlib:n(8),layout:n(202),debug:n(225),util:{time:n(3).time,notime:n(3).notime},version:n(226)}},function(t,e,n){function r(t,e,n,r){return i(t,String(e),n||u,r||function(e){return t.outEdges(e)})}function i(t,e,n,r){var i,a,u={},s=new o,c=function(t){var e=t.v!==i?t.v:t.w,r=u[e],o=n(t),c=a.distance+o;if(o<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+t+" Weight: "+o);c<r.distance&&(r.distance=c,r.predecessor=i,s.decrease(e,c))};for(t.nodes().forEach(function(t){var n=t===e?0:Number.POSITIVE_INFINITY;u[t]={distance:n},s.add(t,n)});s.size()>0&&(i=s.removeMin(),a=u[i],a.distance!==Number.POSITIVE_INFINITY);)r(i).forEach(c);return u}var a=n(6),o=n(35);t.exports=r;var u=a.constant(1)},function(t,e,n){function r(){this._arr=[],this._keyIndices={}}var i=n(6);t.exports=r,r.prototype.size=function(){return this._arr.length},r.prototype.keys=function(){return this._arr.map(function(t){return t.key})},r.prototype.has=function(t){return i.has(this._keyIndices,t)},r.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},r.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},r.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!i.has(n,t)){var r=this._arr,a=r.length;return n[t]=a,r.push({key:t,priority:e}),this._decrease(a),!0}return!1},r.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},r.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)},r.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n<e.length&&(i=e[n].priority<e[i].priority?n:i,r<e.length&&(i=e[r].priority<e[i].priority?r:i),i!==t&&(this._swap(t,i),this._heapify(i)))},r.prototype._decrease=function(t){for(var e,n=this._arr,r=n[t].priority;0!==t&&(e=t>>1,!(n[e].priority<r));)this._swap(t,e),t=e},r.prototype._swap=function(t,e){var n=this._arr,r=this._keyIndices,i=n[t],a=n[e];n[t]=a,n[e]=i,r[a.key]=t,r[i.key]=e}},function(t,e,n){function r(t){function e(u){var s=a[u]={onStack:!0,lowlink:n,index:n++};if(r.push(u),t.successors(u).forEach(function(t){i.has(a,t)?a[t].onStack&&(s.lowlink=Math.min(s.lowlink,a[t].index)):(e(t),s.lowlink=Math.min(s.lowlink,a[t].lowlink))}),s.lowlink===s.index){var c,l=[];do{c=r.pop(),a[c].onStack=!1,l.push(c)}while(u!==c);o.push(l)}}var n=0,r=[],a={},o=[];return t.nodes().forEach(function(t){i.has(a,t)||e(t)}),o}var i=n(6);t.exports=r},function(t,e,n){function r(t){function e(u){if(a.has(r,u))throw new i;a.has(n,u)||(r[u]=!0,n[u]=!0,a.each(t.predecessors(u),e),delete r[u],o.push(u))}var n={},r={},o=[];if(a.each(t.sinks(),e),a.size(n)!==t.nodeCount())throw new i;return o}function i(){}var a=n(6);t.exports=r,r.CycleException=i},function(t,e,n){function r(t,e,n){a.isArray(e)||(e=[e]);var r=[],o={};return a.each(e,function(e){if(!t.hasNode(e))throw new Error("Graph does not have node: "+e);i(t,e,"post"===n,o,r)}),r}function i(t,e,n,r,o){a.has(r,e)||(r[e]=!0,n||o.push(e),a.each(t.neighbors(e),function(e){i(t,e,n,r,o)}),n&&o.push(e))}var a=n(6);t.exports=r},function(t,e,n){"use strict";function r(t){var e=new s({directed:!1}),n=t.nodes()[0],r=t.nodeCount();e.setNode(n,{});for(var u,l;i(e,t)<r;)u=a(e,t),l=e.hasNode(u.v)?c(t,u):-c(t,u),o(e,t,l);return e}function i(t,e){function n(r){u.each(e.nodeEdges(r),function(i){var a=i.v,o=r===a?i.w:a;t.hasNode(o)||c(e,i)||(t.setNode(o,{}),t.setEdge(r,o,{}),n(o))})}return u.each(t.nodes(),n),t.nodeCount()}function a(t,e){return u.min(e.edges(),function(n){if(t.hasNode(n.v)!==t.hasNode(n.w))return c(e,n)})}function o(t,e,n){u.each(t.nodes(),function(t){e.node(t).rank+=n})}var u=n(1),s=n(8).Graph,c=n(17).slack;t.exports=r},function(t,e){function n(t,e){return t.intersect(e)}t.exports=n},function(t,e,n){function r(t,e,n){return i(t,e,e,n)}var i=n(20);t.exports=r},function(t,e,n){function r(t,e,n){var r=t.x,a=t.y,o=[],u=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY;e.forEach(function(t){u=Math.min(u,t.x),s=Math.min(s,t.y)});for(var c=r-t.width/2-u,l=a-t.height/2-s,d=0;d<e.length;d++){var h=e[d],f=e[d<e.length-1?d+1:0],_=i(t,n,{x:c+h.x,y:l+h.y},{x:c+f.x,y:l+f.y});_&&o.push(_)}return o.length?(o.length>1&&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,u=e.y-n.y,s=Math.sqrt(o*o+u*u);return a<s?-1:a===s?0:1}),o[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",t),t)}var i=n(228);t.exports=r},function(t,e){function n(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,u=e.y-a,s=t.width/2,c=t.height/2;return Math.abs(u)*s>Math.abs(o)*c?(u<0&&(c=-c),n=0===u?0:c*o/u,r=c):(o<0&&(s=-s),n=s,r=0===o?0:s*u/o),{x:i+n,y:a+r}}t.exports=n},function(t,e,n){(function(t,r){var i=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,2],r=[1,3],i=[1,4],a=[2,4],o=[1,9],u=[1,11],s=[1,12],c=[1,14],l=[1,15],d=[1,17],h=[1,18],f=[1,19],_=[1,20],p=[1,21],m=[1,23],y=[1,24],g=[1,4,5,10,15,16,18,20,21,22,23,24,25,27,28,39],v=[1,32],M=[4,5,10,15,16,18,20,21,22,23,25,28,39],b=[4,5,10,15,16,18,20,21,22,23,25,27,28,39],L=[37,38,39],k={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,participant:10,actor:11,AS:12,restOfLine:13,signal:14,activate:15,deactivate:16,note_statement:17,title:18,text2:19,loop:20,end:21,opt:22,alt:23,else:24,par:25,par_sections:26,and:27,note:28,placement:29,over:30,actor_pair:31,spaceList:32,",":33,left_of:34,right_of:35,signaltype:36,"+":37,"-":38,ACTOR:39,SOLID_OPEN_ARROW:40,DOTTED_OPEN_ARROW:41,SOLID_ARROW:42,DOTTED_ARROW:43,SOLID_CROSS:44,DOTTED_CROSS:45,TXT:46,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",10:"participant",12:"AS",13:"restOfLine",15:"activate",16:"deactivate",18:"title",20:"loop",21:"end",22:"opt",23:"alt",24:"else",25:"par",27:"and",28:"note",30:"over",33:",",34:"left_of",35:"right_of",37:"+",38:"-",39:"ACTOR",40:"SOLID_OPEN_ARROW",41:"DOTTED_OPEN_ARROW",42:"SOLID_ARROW",43:"DOTTED_ARROW",44:"SOLID_CROSS",45:"DOTTED_CROSS",46:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,5],[9,3],[9,2],[9,3],[9,3],[9,2],[9,3],[9,4],[9,4],[9,7],[9,4],[26,1],[26,4],[17,4],[17,4],[32,2],[32,1],[31,3],[31,1],[29,1],[29,1],[14,5],[14,5],[14,4],[11,1],[36,1],[36,1],[36,1],[36,1],[36,1],[36,1],[19,1]],performAction:function(t,e,n,r,i,a,o){var u=a.length-1;switch(i){case 3:return r.apply(a[u]),a[u];case 4:this.$=[];break;case 5:a[u-1].push(a[u]),this.$=a[u-1];break;case 6:case 7:this.$=a[u];break;case 8:this.$=[];break;case 9:a[u-3].description=a[u-1],this.$=a[u-3];break;case 10:this.$=a[u-1];break;case 12:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[u-1]};break;case 13:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[u-1]};break;case 15:this.$=[{type:"setTitle",text:a[u-1]}];break;case 16:a[u-1].unshift({type:"loopStart",loopText:a[u-2],signalType:r.LINETYPE.LOOP_START}),a[u-1].push({type:"loopEnd",loopText:a[u-2],signalType:r.LINETYPE.LOOP_END}),this.$=a[u-1];break;case 17:a[u-1].unshift({type:"optStart",optText:a[u-2],signalType:r.LINETYPE.OPT_START}),a[u-1].push({type:"optEnd",optText:a[u-2],signalType:r.LINETYPE.OPT_END}),this.$=a[u-1];break;case 18:a[u-4].unshift({type:"altStart",altText:a[u-5],signalType:r.LINETYPE.ALT_START}),a[u-4].push({type:"else",altText:a[u-2],signalType:r.LINETYPE.ALT_ELSE}),a[u-4]=a[u-4].concat(a[u-1]),a[u-4].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=a[u-4];break;case 19:a[u-1].unshift({type:"parStart",parText:a[u-2],signalType:r.LINETYPE.PAR_START}),a[u-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=a[u-1];break;case 21:this.$=a[u-3].concat([{type:"and",parText:a[u-1],signalType:r.LINETYPE.PAR_AND},a[u]]);break;case 22:this.$=[a[u-1],{type:"addNote",placement:a[u-2],actor:a[u-1].actor,text:a[u]}];break;case 23:a[u-2]=[].concat(a[u-1],a[u-1]).slice(0,2),a[u-2][0]=a[u-2][0].actor,a[u-2][1]=a[u-2][1].actor,this.$=[a[u-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:a[u-2].slice(0,2),text:a[u]}];break;case 26:this.$=[a[u-2],a[u]];break;case 27:this.$=a[u];break;case 28:this.$=r.PLACEMENT.LEFTOF;break;case 29:this.$=r.PLACEMENT.RIGHTOF;break;case 30:this.$=[a[u-4],a[u-1],{type:"addMessage",from:a[u-4].actor,to:a[u-1].actor,signalType:a[u-3],msg:a[u]},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[u-1]}];break;case 31:this.$=[a[u-4],a[u-1],{type:"addMessage",from:a[u-4].actor,to:a[u-1].actor,signalType:a[u-3],msg:a[u]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[u-4]}];break;case 32:this.$=[a[u-3],a[u-1],{type:"addMessage",from:a[u-3].actor,to:a[u-1].actor,signalType:a[u-2],msg:a[u]}];break;case 33:this.$={type:"addActor",actor:a[u]};break;case 34:this.$=r.LINETYPE.SOLID_OPEN;break;case 35:this.$=r.LINETYPE.DOTTED_OPEN;break;case 36:this.$=r.LINETYPE.SOLID;break;case 37:this.$=r.LINETYPE.DOTTED;break;case 38:this.$=r.LINETYPE.SOLID_CROSS;break;case 39:this.$=r.LINETYPE.DOTTED_CROSS;break;case 40:this.$=a[u].substring(1).trim().replace(/\\n/gm,"\n")}},table:[{3:1,4:n,5:r,6:i},{1:[3]},{3:5,4:n,5:r,6:i},{3:6,4:n,5:r,6:i},e([1,4,5,10,15,16,18,20,22,23,25,28,39],a,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:o,5:u,8:8,9:10,10:s,11:22,14:13,15:c,16:l,17:16,18:d,20:h,22:f,23:_,25:p,28:m,39:y},e(g,[2,5]),{9:25,10:s,11:22,14:13,15:c,16:l,17:16,18:d,20:h,22:f,23:_,25:p,28:m,39:y},e(g,[2,7]),e(g,[2,8]),{11:26,39:y},{5:[1,27]},{11:28,39:y},{11:29,39:y},{5:[1,30]},{19:31,46:v},{13:[1,33]},{13:[1,34]},{13:[1,35]},{13:[1,36]},{36:37,40:[1,38],41:[1,39],42:[1,40],43:[1,41],44:[1,42],45:[1,43]},{29:44,30:[1,45],34:[1,46],35:[1,47]},e([5,12,33,40,41,42,43,44,45,46],[2,33]),e(g,[2,6]),{5:[1,49],12:[1,48]},e(g,[2,11]),{5:[1,50]},{5:[1,51]},e(g,[2,14]),{5:[1,52]},{5:[2,40]},e(M,a,{7:53}),e(M,a,{7:54}),e([4,5,10,15,16,18,20,22,23,24,25,28,39],a,{7:55}),e(b,a,{26:56,7:57}),{11:60,37:[1,58],38:[1,59],39:y},e(L,[2,34]),e(L,[2,35]),e(L,[2,36]),e(L,[2,37]),e(L,[2,38]),e(L,[2,39]),{11:61,39:y},{11:63,31:62,39:y},{39:[2,28]},{39:[2,29]},{13:[1,64]},e(g,[2,10]),e(g,[2,12]),e(g,[2,13]),e(g,[2,15]),{4:o,5:u,8:8,9:10,10:s,11:22,14:13,15:c,16:l,17:16,18:d,20:h,21:[1,65],22:f,23:_,25:p,28:m,39:y},{4:o,5:u,8:8,9:10,10:s,11:22,14:13,15:c,16:l,17:16,18:d,20:h,21:[1,66],22:f,23:_,25:p,28:m,39:y},{4:o,5:u,8:8,9:10,10:s,11:22,14:13,15:c,16:l,17:16,18:d,20:h,22:f,23:_,24:[1,67],25:p,28:m,39:y},{21:[1,68]},{4:o,5:u,8:8,9:10,10:s,11:22,14:13,15:c,16:l,17:16,18:d,20:h,21:[2,20],22:f,23:_,25:p,27:[1,69],28:m,39:y},{11:70,39:y},{11:71,39:y},{19:72,46:v},{19:73,46:v},{19:74,46:v},{33:[1,75],46:[2,27]},{5:[1,76]},e(g,[2,16]),e(g,[2,17]),{13:[1,77]},e(g,[2,19]),{13:[1,78]},{19:79,46:v},{19:80,46:v},{5:[2,32]},{5:[2,22]},{5:[2,23]},{11:81,39:y},e(g,[2,9]),e(M,a,{7:82}),e(b,a,{7:57,26:83}),{5:[2,30]},{5:[2,31]},{46:[2,26]},{4:o,5:u,8:8,9:10,10:s,11:22,14:13,15:c,16:l,17:16,18:d,20:h,21:[1,84],22:f,23:_,25:p,28:m,39:y},{21:[2,21]},e(g,[2,18])],defaultActions:{5:[2,1],6:[2,2],32:[2,40],46:[2,28],47:[2,29],72:[2,32],73:[2,22],74:[2,23],79:[2,30],80:[2,31],81:[2,26],83:[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=[null],i=[],a=this.table,o="",u=0,s=0,c=0,l=i.slice.call(arguments,1),d=Object.create(this.lexer),h={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(h.yy[f]=this.yy[f]);d.setInput(t,h.yy),h.yy.lexer=d,h.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var _=d.yylloc;i.push(_);var p=d.options&&d.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,y,g,v,M,b,L,k,w,D={};;){if(g=n[n.length-1],this.defaultActions[g]?v=this.defaultActions[g]:(null!==m&&void 0!==m||(m=function(){var t;return t=d.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),v=a[g]&&a[g][m]),void 0===v||!v.length||!v[0]){var x="";w=[];for(b in a[g])this.terminals_[b]&&b>2&&w.push("'"+this.terminals_[b]+"'");x=d.showPosition?"Parse error on line "+(u+1)+":\n"+d.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(x,{text:d.match,token:this.terminals_[m]||m,line:d.yylineno,loc:_,expected:w})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(v[0]){case 1:n.push(m),r.push(d.yytext),i.push(d.yylloc),n.push(v[1]),m=null,y?(m=y,y=null):(s=d.yyleng,o=d.yytext,u=d.yylineno,_=d.yylloc,c>0&&c--);break;case 2:if(L=this.productions_[v[1]][1],D.$=r[r.length-L],D._$={first_line:i[i.length-(L||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(L||1)].first_column,last_column:i[i.length-1].last_column},p&&(D._$.range=[i[i.length-(L||1)].range[0],i[i.length-1].range[1]]),void 0!==(M=this.performAction.apply(D,[o,s,u,h.yy,v[1],r,i].concat(l))))return M;L&&(n=n.slice(0,-1*L*2),r=r.slice(0,-1*L),i=i.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),r.push(D.$),i.push(D._$),k=a[n[n.length-2]][n[n.length-1]],n.push(k);break;case 3:return!0}}return!0}},w=function(){return{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),r&&(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;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[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),t>=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 5;case 1:case 2:case 3:case 4:break;case 5:return this.begin("ID"),10;case 6:return this.begin("ALIAS"),39;case 7:return this.popState(),this.popState(),this.begin("LINE"),12;case 8:return this.popState(),this.popState(),5;case 9:return this.begin("LINE"),20;case 10:return this.begin("LINE"),22;case 11:return this.begin("LINE"),23;case 12:return this.begin("LINE"),24;case 13:return this.begin("LINE"),25;case 14:return this.begin("LINE"),27;case 15:return this.popState(),13;case 16:return 21;case 17:return 34;case 18:return 35;case 19:return 30;case 20:return 28;case 21:return this.begin("ID"),15;case 22:return this.begin("ID"),16;case 23:return 18;case 24:return 6;case 25:return 33;case 26:return 5;case 27:return e.yytext=e.yytext.trim(),39;case 28:return 42;case 29:return 43;case 30:return 40;case 31:return 41;case 32:return 44;case 33:return 45;case 34:return 46;case 35:return 37;case 36:return 38;case 37:return 5;case 38:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:[^#\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,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[2,3,15],inclusive:!1},ALIAS:{rules:[2,3,7,8],inclusive:!1},ID:{rules:[2,3,6],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],inclusive:!0}}}}();return k.lexer=w,t.prototype=k,k.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(12).readFileSync(n(13).normalize(r[1]),"utf8");return e.parser.parse(i)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(11),n(4)(t))},function(t,e,n){(function(t){var r={},i=[],a=[],o="",u=n(2),s=u.Log;e.addActor=function(t,e,n){var i=r[t];i&&e===i.name&&null==n||(null==n&&(n=e),r[t]={name:e,description:n})},e.addMessage=function(t,e,n,r){i.push({from:t,to:e,message:n,answer:r})},e.addSignal=function(t,e,n,r){s.debug("Adding message from="+t+" to="+e+" message="+n+" type="+r),i.push({from:t,to:e,message:n,type:r})},e.getMessages=function(){return i},e.getActors=function(){return r},e.getActor=function(t){return r[t]},e.getActorKeys=function(){return Object.keys(r)},e.getTitle=function(){return o},e.clear=function(){r={},i=[]},e.LINETYPE={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},e.ARROWTYPE={FILLED:0,OPEN:1},e.PLACEMENT={LEFTOF:0,RIGHTOF:1,OVER:2},e.addNote=function(t,n,r){var o={actor:t,placement:n,message:r},u=[].concat(t,t);a.push(o),i.push({from:u[0],to:u[1],message:r,type:e.LINETYPE.NOTE,placement:n})},e.setTitle=function(t){o=t},e.parseError=function(e,n){t.mermaidAPI.parseError(e,n)},e.apply=function(t){if(t instanceof Array)t.forEach(function(t){e.apply(t)});else switch(t.type){case"addActor":e.addActor(t.actor,t.actor,t.description);break;case"activeStart":case"activeEnd":e.addSignal(t.actor,void 0,void 0,t.signalType);break;case"addNote":e.addNote(t.actor,t.placement,t.text);break;case"addMessage":e.addSignal(t.from,t.to,t.msg,t.signalType);break;case"loopStart":e.addSignal(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":e.addSignal(void 0,void 0,void 0,t.signalType);break;case"optStart":e.addSignal(void 0,void 0,t.optText,t.signalType);break;case"optEnd":e.addSignal(void 0,void 0,void 0,t.signalType);break;case"altStart":case"else":e.addSignal(void 0,void 0,t.altText,t.signalType);break;case"altEnd":e.addSignal(void 0,void 0,void 0,t.signalType);break;case"setTitle":e.setTitle(t.text);break;case"parStart":case"and":e.addSignal(void 0,void 0,t.parText,t.signalType);break;case"parEnd":e.addSignal(void 0,void 0,void 0,t.signalType)}}}).call(e,n(9))},function(t,e,n){(function(t){var r=n(2),i=r.Log,a="",o=!1;e.setMessage=function(t){i.debug("Setting message to: "+t),a=t},e.getMessage=function(){return a},e.setInfo=function(t){o=t},e.getInfo=function(){return o},e.parseError=function(e,n){t.mermaidAPI.parseError(e,n)}}).call(e,n(9))},function(t,e,n){(function(t,r){var i=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[6,9,10,12],r={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,message:11,say:12,TXT:13,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo",12:"say",13:"TXT"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1],[8,1],[11,2]],performAction:function(t,e,n,r,i,a,o){var u=a.length-1;switch(i){case 1:return r;case 4:break;case 6:r.setInfo(!0);break;case 7:r.setMessage(a[u]);break;case 8:this.$=a[u-1].substring(1).trim().replace(/\\n/gm,"\n")}},table:[{3:1,4:[1,2]},{1:[3]},e(n,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8],11:9,12:[1,10]},{1:[2,1]},e(n,[2,3]),e(n,[2,4]),e(n,[2,5]),e(n,[2,6]),e(n,[2,7]),{13:[1,11]},e(n,[2,8])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[null],i=[],a=this.table,o="",u=0,s=0,c=0,l=i.slice.call(arguments,1),d=Object.create(this.lexer),h={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(h.yy[f]=this.yy[f]);d.setInput(t,h.yy),h.yy.lexer=d,h.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var _=d.yylloc;i.push(_);var p=d.options&&d.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,y,g,v,M,b,L,k,w,D={};;){if(g=n[n.length-1],this.defaultActions[g]?v=this.defaultActions[g]:(null!==m&&void 0!==m||(m=function(){var t;return t=d.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),v=a[g]&&a[g][m]),void 0===v||!v.length||!v[0]){var x="";w=[];for(b in a[g])this.terminals_[b]&&b>2&&w.push("'"+this.terminals_[b]+"'");x=d.showPosition?"Parse error on line "+(u+1)+":\n"+d.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(x,{text:d.match,token:this.terminals_[m]||m,line:d.yylineno,loc:_,expected:w})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(v[0]){case 1:n.push(m),r.push(d.yytext),i.push(d.yylloc),n.push(v[1]),m=null,y?(m=y,y=null):(s=d.yyleng,o=d.yytext,u=d.yylineno,_=d.yylloc,c>0&&c--);break;case 2:if(L=this.productions_[v[1]][1],D.$=r[r.length-L],D._$={first_line:i[i.length-(L||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(L||1)].first_column,last_column:i[i.length-1].last_column},p&&(D._$.range=[i[i.length-(L||1)].range[0],i[i.length-1].range[1]]),void 0!==(M=this.performAction.apply(D,[o,s,u,h.yy,v[1],r,i].concat(l))))return M;L&&(n=n.slice(0,-1*L*2),r=r.slice(0,-1*L),i=i.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),r.push(D.$),i.push(D._$),k=a[n[n.length-2]][n[n.length-1]],n.push(k);break;case 3:return!0}}return!0}},i=function(){return{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),r&&(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;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[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),t>=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 9;case 1:return 10;case 2:return 4;case 3:return 12;case 4:return 13;case 5:return 6;case 6:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:showInfo\b)/i,/^(?:info\b)/i,/^(?:say\b)/i,/^(?::[^#\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6],inclusive:!0}}}}();return r.lexer=i,t.prototype=r,r.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(12).readFileSync(n(13).normalize(r[1]),"utf8");return e.parser.parse(i)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(11),n(4)(t))},function(t,e,n){(function(t,r){var i=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[6,8,10,11,12,13,14],r=[1,9],i=[1,10],a=[1,11],o=[1,12],u={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,dateFormat:11,title:12,section:13,taskTxt:14,taskData:15,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",11:"dateFormat",12:"title",13:"section",14:"taskTxt",15:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,1],[9,1],[9,2]],performAction:function(t,e,n,r,i,a,o){var u=a.length-1;switch(i){case 1:return a[u-1];case 2:this.$=[];break;case 3:a[u-1].push(a[u]),this.$=a[u-1];break;case 4:case 5:this.$=a[u];break;case 6:case 7:this.$=[];break;case 8:r.setDateFormat(a[u].substr(11)),this.$=a[u].substr(11);break;case 9:r.setTitle(a[u].substr(6)),this.$=a[u].substr(6);break;case 10:r.addSection(a[u].substr(8)),this.$=a[u].substr(8);break;case 11:r.addTask(a[u-1],a[u]),this.$="task"}},table:[{3:1,4:[1,2]},{1:[3]},e(n,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:r,12:i,13:a,14:o},e(n,[2,7],{1:[2,1]}),e(n,[2,3]),{9:13,11:r,12:i,13:a,14:o},e(n,[2,5]),e(n,[2,6]),e(n,[2,8]),e(n,[2,9]),e(n,[2,10]),{15:[1,14]},e(n,[2,4]),e(n,[2,11])],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[null],i=[],a=this.table,o="",u=0,s=0,c=0,l=i.slice.call(arguments,1),d=Object.create(this.lexer),h={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(h.yy[f]=this.yy[f]);d.setInput(t,h.yy),h.yy.lexer=d,h.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var _=d.yylloc;i.push(_);var p=d.options&&d.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,y,g,v,M,b,L,k,w,D={};;){if(g=n[n.length-1],this.defaultActions[g]?v=this.defaultActions[g]:(null!==m&&void 0!==m||(m=function(){var t;return t=d.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),v=a[g]&&a[g][m]),void 0===v||!v.length||!v[0]){var x="";w=[];for(b in a[g])this.terminals_[b]&&b>2&&w.push("'"+this.terminals_[b]+"'");x=d.showPosition?"Parse error on line "+(u+1)+":\n"+d.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(x,{text:d.match,token:this.terminals_[m]||m,line:d.yylineno,loc:_,expected:w})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(v[0]){case 1:n.push(m),r.push(d.yytext),i.push(d.yylloc),n.push(v[1]),m=null,y?(m=y,y=null):(s=d.yyleng,o=d.yytext,u=d.yylineno,_=d.yylloc,c>0&&c--);break;case 2:if(L=this.productions_[v[1]][1],D.$=r[r.length-L],D._$={first_line:i[i.length-(L||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(L||1)].first_column,last_column:i[i.length-1].last_column},p&&(D._$.range=[i[i.length-(L||1)].range[0],i[i.length-1].range[1]]),void 0!==(M=this.performAction.apply(D,[o,s,u,h.yy,v[1],r,i].concat(l))))return M;L&&(n=n.slice(0,-1*L*2),r=r.slice(0,-1*L),i=i.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),r.push(D.$),i.push(D._$),k=a[n[n.length-2]][n[n.length-1]],n.push(k);break;case 3:return!0}}return!0}},s=function(){return{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),r&&(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;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[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),t>=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 10;case 1:case 2:case 3:break;case 4:return 4;case 5:return 11;case 6:return"date";case 7:return 12;case 8:return 13;case 9:return 14;case 10:return 15;case 11:return":";case 12:return 6;case 13:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\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:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}}}();return u.lexer=s,t.prototype=u,u.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(12).readFileSync(n(13).normalize(r[1]),"utf8");return e.parser.parse(i)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(11),n(4)(t))},function(t,e,n){(function(t){var r=n(0),i=n(2),a=i.Log,o="",u="",s=[],c=[],l="";e.clear=function(){s=[],c=[],l="",u="",p=0,d=void 0,h=void 0,v=[]},e.setDateFormat=function(t){o=t},e.getDateFormat=function(){return o},e.setTitle=function(t){u=t},e.getTitle=function(){return u},e.addSection=function(t){l=t,s.push(t)},e.getTasks=function(){for(var t=b(),e=0;!t&&e<10;)t=b(),e++;return c=v};var d,h,f=function(t,n,i){i=i.trim();var o=/^after\s+([\d\w-]+)/,u=o.exec(i.trim());if(null!==u){var s=e.findTaskById(u[1]);if(void 0===s){var c=new Date;return c.setHours(0,0,0,0),c}return s.endTime}return r(i,n.trim(),!0).isValid()?r(i,n.trim(),!0).toDate():(a.debug("Invalid date:"+i),a.debug("With date format:"+n.trim()),new Date)},_=function(t,e,n){if(n=n.trim(),r(n,e.trim(),!0).isValid())return r(n,e.trim()).toDate();var i=r(t),a=/^([\d]+)([wdhms])/,o=a.exec(n.trim());if(null!==o){switch(o[2]){case"s":i.add(o[1],"seconds");break;case"m":i.add(o[1],"minutes");break;case"h":i.add(o[1],"hours");break;case"d":i.add(o[1],"days");break;case"w":i.add(o[1],"weeks")}return i.toDate()}return i.toDate()},p=0,m=function(t){return void 0===t?"task"+(p+=1):t},y=function(t,n){var r;r=":"===n.substr(0,1)?n.substr(1,n.length):n;for(var i=r.split(","),a={},o=e.getDateFormat(),u=!0;u;)u=!1,i[0].match(/^\s*active\s*$/)&&(a.active=!0,i.shift(1),u=!0),i[0].match(/^\s*done\s*$/)&&(a.done=!0,i.shift(1),u=!0),i[0].match(/^\s*crit\s*$/)&&(a.crit=!0,i.shift(1),u=!0);var s;for(s=0;s<i.length;s++)i[s]=i[s].trim();switch(i.length){case 1:a.id=m(),a.startTime=t.endTime,a.endTime=_(a.startTime,o,i[0]);break;case 2:a.id=m(),a.startTime=f(0,o,i[0]),a.endTime=_(a.startTime,o,i[1]);break;case 3:a.id=m(i[0]),a.startTime=f(0,o,i[1]),a.endTime=_(a.startTime,o,i[2])}return a},g=function(t,e){var n;n=":"===e.substr(0,1)?e.substr(1,e.length):e;for(var r=n.split(","),i={},a=!0;a;)a=!1,r[0].match(/^\s*active\s*$/)&&(i.active=!0,r.shift(1),a=!0),r[0].match(/^\s*done\s*$/)&&(i.done=!0,r.shift(1),a=!0),r[0].match(/^\s*crit\s*$/)&&(i.crit=!0,r.shift(1),a=!0);var o;for(o=0;o<r.length;o++)r[o]=r[o].trim();switch(r.length){case 1:i.id=m(),i.startTime={type:"prevTaskEnd",id:t},i.endTime={data:r[0]};break;case 2:i.id=m(),i.startTime={type:"getStartDate",startData:r[0]},i.endTime={data:r[1]};break;case 3:i.id=m(r[0]),i.startTime={type:"getStartDate",startData:r[1]},i.endTime={data:r[2]}}return i},v=[],M={};e.addTask=function(t,e){var n={section:l,type:l,processed:!1,raw:{data:e},task:t},r=g(h,e);n.raw.startTime=r.startTime,n.raw.endTime=r.endTime,n.id=r.id,n.prevTaskId=h,n.active=r.active,n.done=r.done,n.crit=r.crit;var i=v.push(n);h=n.id,M[n.id]=i-1},e.findTaskById=function(t){var e=M[t];return v[e]},e.addTaskOrg=function(t,e){var n={section:l,type:l,description:t,task:t},r=y(d,e);n.startTime=r.startTime,n.endTime=r.endTime,n.id=r.id,n.active=r.active,n.done=r.done,n.crit=r.crit,d=n,c.push(n)};var b=function(){var t,n=e.getDateFormat(),r=!0;for(t=0;t<v.length;t++)!function(t){var r=v[t],i="";switch(v[t].raw.startTime.type){case"prevTaskEnd":var a=e.findTaskById(r.prevTaskId);r.startTime=a.endTime;break;case"getStartDate":i=f(0,n,v[t].raw.startTime.startData),i&&(v[t].startTime=i)}v[t].startTime&&(v[t].endTime=_(v[t].startTime,n,v[t].raw.endTime.data),v[t].endTime&&(v[t].processed=!0)),v[t].processed}(t),r=r&&v[t].processed;return r};e.parseError=function(e,n){t.mermaidAPI.parseError(e,n)}}).call(e,n(9))},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(t){return/^nm$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"vm":"VM":n?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},r=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},i={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},a=function(t){return function(e,n,a,o){var u=r(e),s=i[t][r(e)];return 2===u&&(s=s[n?0:1]),s.replace(/%d/i,e)}},o=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"];return t.defineLocale("ar",{months:o,monthsShort:o,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},preparse:function(t){return t.replace(/\u200f/g,"").replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(t){return n[t]}).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},week:{dow:6,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},n=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},i=function(t){return function(e,i,a,o){var u=n(e),s=r[t][n(e)];return 2===u&&(s=s[i?0:1]),s.replace(/%d/i,e)}},a=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];return t.defineLocale("ar-ly",{months:a,monthsShort:a,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:i("s"),m:i("m"),mm:i("m"),h:i("h"),hh:i("h"),d:i("d"),dd:i("d"),M:i("M"),MM:i("M"),y:i("y"),yy:i("y")},preparse:function(t){return t.replace(/\u200f/g,"").replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},week:{dow:6,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};return t.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(t){return t.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(t){return n[t]}).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};return t.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(t){return/^(gündüz|axşam)$/.test(t)},meridiem:function(t,e,n){return t<4?"gecə":t<12?"səhər":t<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(t){if(0===t)return t+"-ıncı";var n=t%10,r=t%100-n,i=t>=100?100:null;return t+(e[n]||e[r]||e[i])},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e){var n=t.split("_");return e%10==1&&e%100!=11?n[0]:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?n[1]:n[2]}function n(t,n,r){var i={mm:n?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:n?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===r?n?"хвіліна":"хвіліну":"h"===r?n?"гадзіна":"гадзіну":t+" "+e(i[r],+t)}return t.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:n,mm:n,h:n,hh:n,d:"дзень",dd:n,M:"месяц",MM:n,y:"год",yy:n},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(t){return/^(дня|вечара)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночы":t<12?"раніцы":t<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t%10!=2&&t%10!=3||t%100==12||t%100==13?t+"-ы":t+"-і";case"D":return t+"-га";default:return t}},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-ев":0===n?t+"-ен":n>10&&n<20?t+"-ти":1===e?t+"-ви":2===e?t+"-ри":7===e||8===e?t+"-ми":t+"-ти"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};return t.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(t){return t.replace(/[১২৩৪৫৬৭৮৯০]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(t,e){return 12===t&&(t=0),"রাত"===e&&t>=4||"দুপুর"===e&&t<5||"বিকাল"===e?t+12:t},meridiem:function(t,e,n){return t<4?"রাত":t<10?"সকাল":t<17?"দুপুর":t<20?"বিকাল":"রাত"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},n={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};return t.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(t){return t.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(t,e){return 12===t&&(t=0),"མཚན་མོ"===e&&t>=4||"ཉིན་གུང"===e&&t<5||"དགོང་དག"===e?t+12:t},meridiem:function(t,e,n){return t<4?"མཚན་མོ":t<10?"ཞོགས་ཀས":t<17?"ཉིན་གུང":t<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n){return t+" "+i({mm:"munutenn",MM:"miz",dd:"devezh"}[n],t)}function n(t){switch(r(t)){case 1:case 3:case 4:case 5:case 9:return t+" bloaz";default:return t+" vloaz"}}function r(t){return t>9?r(t%10):t}function i(t,e){return 2===e?a(t):t}function a(t){var e={m:"v",b:"v",d:"z"};return void 0===e[t.charAt(0)]?t:e[t.charAt(0)]+t.substring(1)}return t.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",m:"ur vunutenn",mm:e,h:"un eur",hh:"%d eur",d:"un devezh",dd:e,M:"ur miz",MM:e,y:"ur bloaz",yy:n},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(t){return t+(1===t?"añ":"vet")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n){var r=t+" ";switch(n){case"m":return e?"jedna minuta":"jedne minute";case"mm":return r+=1===t?"minuta":2===t||3===t||4===t?"minute":"minuta";case"h":return e?"jedan sat":"jednog sata";case"hh":return r+=1===t?"sat":2===t||3===t||4===t?"sata":"sati";case"dd":return r+=1===t?"dan":"dana";case"MM":return r+=1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci";case"yy":return r+=1===t?"godina":2===t||3===t||4===t?"godine":"godina"}}return t.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"Dg_Dl_Dt_Dc_Dj_Dv_Ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"[el] D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"[el] D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"[el] dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(t,e){var n=1===t?"r":2===t?"n":3===t?"r":4===t?"t":"è";return"w"!==e&&"W"!==e||(n="a"),t+n},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t){return t>1&&t<5&&1!=~~(t/10)}function n(t,n,r,i){var a=t+" ";switch(r){case"s":return n||i?"pár sekund":"pár sekundami";case"m":return n?"minuta":i?"minutu":"minutou";case"mm":return n||i?a+(e(t)?"minuty":"minut"):a+"minutami";case"h":return n?"hodina":i?"hodinu":"hodinou";case"hh":return n||i?a+(e(t)?"hodiny":"hodin"):a+"hodinami";case"d":return n||i?"den":"dnem";case"dd":return n||i?a+(e(t)?"dny":"dní"):a+"dny";case"M":return n||i?"měsíc":"měsícem";case"MM":return n||i?a+(e(t)?"měsíce":"měsíců"):a+"měsíci";case"y":return n||i?"rok":"rokem";case"yy":return n||i?a+(e(t)?"roky":"let"):a+"lety"}}var r="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),i="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");return t.defineLocale("cs",{months:r,monthsShort:i,monthsParse:function(t,e){var n,r=[];for(n=0;n<12;n++)r[n]=new RegExp("^"+t[n]+"$|^"+e[n]+"$","i");return r}(r,i),shortMonthsParse:function(t){var e,n=[];for(e=0;e<12;e++)n[e]=new RegExp("^"+t[e]+"$","i");return n}(i),longMonthsParse:function(t){var e,n=[];for(e=0;e<12;e++)n[e]=new RegExp("^"+t[e]+"$","i");return n}(r),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(t){return t+(/сехет$/i.exec(t)?"рен":/ҫул$/i.exec(t)?"тан":"ран")},past:"%s каялла",s:"пӗр-ик ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(t){var e=t,n="",r=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"];return e>20?n=40===e||50===e||60===e||80===e||100===e?"fed":"ain":e>0&&(n=r[e]),t+n},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?i[n][0]:i[n][1]}return t.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?i[n][0]:i[n][1]}return t.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?i[n][0]:i[n][1]}return t.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._März_April_Mai_Juni_Juli_Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH.mm",LLLL:"dddd, D. MMMM YYYY HH.mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],n=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];return t.defineLocale("dv",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(t){return"މފ"===t},meridiem:function(t,e,n){return t<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:7,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}return t.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(t,e){return t?/D/.test(e.substring(0,e.indexOf("MMMM")))?this._monthsGenitiveEl[t.month()]:this._monthsNominativeEl[t.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(t,e,n){return t>11?n?"μμ":"ΜΜ":n?"πμ":"ΠΜ"},isPM:function(t){return"μ"===(t+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(t,n){var r=this._calendarEl[t],i=n&&n.hours();return e(r)&&(r=r.apply(n)),r.replace("{}",i%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few 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"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few 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"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few 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"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few 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"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few 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"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(t){return"p"===t.charAt(0).toLowerCase()},meridiem:function(t,e,n){return t>11?n?"p.t.m.":"P.T.M.":n?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");return t.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");return t.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var i={s:["mõne sekundi","mõni sekund","paar sekundit"],m:["ühe minuti","üks minut"],mm:[t+" minuti",t+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[t+" tunni",t+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[t+" kuu",t+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[t+" aasta",t+" aastat"]};return e?i[n][2]?i[n][2]:i[n][1]:r?i[n][0]:i[n][1]}return t.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:"%d päeva",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};return t.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(t){return/بعد از ظهر/.test(t)},meridiem:function(t,e,n){return t<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(t){return t.replace(/[۰-۹]/g,function(t){return n[t]}).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,r,i){var a="";switch(r){case"s":return i?"muutaman sekunnin":"muutama sekunti";case"m":return i?"minuutin":"minuutti";case"mm":a=i?"minuutin":"minuuttia";break;case"h":return i?"tunnin":"tunti";case"hh":a=i?"tunnin":"tuntia";break;case"d":return i?"päivän":"päivä";case"dd":a=i?"päivän":"päivää";break;case"M":return i?"kuukauden":"kuukausi";case"MM":a=i?"kuukauden":"kuukautta";break;case"y":return i?"vuoden":"vuosi";case"yy":a=i?"vuoden":"vuotta"}return a=n(t,i)+" "+a}function n(t,e){return t<10?e?i[t]:r[t]:t}var r="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),i=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",r[7],r[8],r[9]];return t.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(t,e){switch(e){case"D":return t+(1===t?"er":"");default:case"M":case"Q":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"Di_Lu_Ma_Me_Je_Ve_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),n="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");return t.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e=["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],n=["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],r=["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],i=["Did","Dil","Dim","Dic","Dia","Dih","Dis"],a=["Dò","Lu","Mà","Ci","Ar","Ha","Sa"];return t.defineLocale("gd",{months:e,monthsShort:n,monthsParseExact:!0,weekdays:r,weekdaysShort:i,weekdaysMin:a,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(t){return t+(1===t?"d":t%10==2?"na":"mh")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(t){return 0===t.indexOf("un")?"n"+t:"en "+t},past:"hai %s",s:"uns segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var i={s:["thodde secondanim","thodde second"],m:["eka mintan","ek minute"],mm:[t+" mintanim",t+" mintam"],h:["eka horan","ek hor"],hh:[t+" horanim",t+" hor"],d:["eka disan","ek dis"],dd:[t+" disanim",t+" dis"],M:["eka mhoinean","ek mhoino"],MM:[t+" mhoineanim",t+" mhoine"],y:["eka vorsan","ek voros"],yy:[t+" vorsanim",t+" vorsam"]};return e?i[n][0]:i[n][1]}return t.defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(t,e){switch(e){case"D":return t+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return t}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(t,e){return 12===t&&(t=0),"rati"===e?t<4?t:t+12:"sokalli"===e?t:"donparam"===e?t>12?t:t+12:"sanje"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"rati":t<12?"sokalli":t<16?"donparam":t<20?"sanje":"rati"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(t){return 2===t?"שעתיים":t+" שעות"},d:"יום",dd:function(t){return 2===t?"יומיים":t+" ימים"},M:"חודש",MM:function(t){return 2===t?"חודשיים":t+" חודשים"},y:"שנה",yy:function(t){return 2===t?"שנתיים":t%10==0&&10!==t?t+" שנה":t+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(t){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(t)},meridiem:function(t,e,n){return t<5?"לפנות בוקר":t<10?"בבוקר":t<12?n?'לפנה"צ':"לפני הצהריים":t<18?n?'אחה"צ':"אחרי הצהריים":"בערב"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return t.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(t,e){return 12===t&&(t=0),"रात"===e?t<4?t:t+12:"सुबह"===e?t:"दोपहर"===e?t>=10?t:t+12:"शाम"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात":t<10?"सुबह":t<17?"दोपहर":t<20?"शाम":"रात"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n){var r=t+" ";switch(n){case"m":return e?"jedna minuta":"jedne minute";case"mm":return r+=1===t?"minuta":2===t||3===t||4===t?"minute":"minuta";case"h":return e?"jedan sat":"jednog sata";case"hh":return r+=1===t?"sat":2===t||3===t||4===t?"sata":"sati";case"dd":return r+=1===t?"dan":"dana";case"MM":return r+=1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci";case"yy":return r+=1===t?"godina":2===t||3===t||4===t?"godine":"godina"}}return t.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var i=t;switch(n){case"s":return r||e?"néhány másodperc":"néhány másodperce";case"m":return"egy"+(r||e?" perc":" perce");case"mm":return i+(r||e?" perc":" perce");case"h":return"egy"+(r||e?" óra":" órája");case"hh":return i+(r||e?" óra":" órája");case"d":return"egy"+(r||e?" nap":" napja");case"dd":return i+(r||e?" nap":" napja");case"M":return"egy"+(r||e?" hónap":" hónapja");case"MM":return i+(r||e?" hónap":" hónapja");case"y":return"egy"+(r||e?" év":" éve");case"yy":return i+(r||e?" év":" éve")}return""}function n(t){return(t?"":"[múlt] ")+"["+r[this.day()]+"] LT[-kor]"}var r="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");return t.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(t){return"u"===t.charAt(1).toLowerCase()},meridiem:function(t,e,n){return t<12?!0===n?"de":"DE":!0===n?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return n.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return n.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(t){return/^(ցերեկվա|երեկոյան)$/.test(t)},meridiem:function(t){return t<4?"գիշերվա":t<12?"առավոտվա":t<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(t,e){switch(e){case"DDD":case"w":case"W":case"DDDo":return 1===t?t+"-ին":t+"-րդ";default:return t}},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"siang"===e?t>=11?t:t+12:"sore"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"siang":t<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t){return t%100==11||t%10!=1}function n(t,n,r,i){var a=t+" ";switch(r){case"s":return n||i?"nokkrar sekúndur":"nokkrum sekúndum";case"m":return n?"mínúta":"mínútu";case"mm":return e(t)?a+(n||i?"mínútur":"mínútum"):n?a+"mínúta":a+"mínútu";case"hh":return e(t)?a+(n||i?"klukkustundir":"klukkustundum"):a+"klukkustund";case"d":return n?"dagur":i?"dag":"degi";case"dd":return e(t)?n?a+"dagar":a+(i?"daga":"dögum"):n?a+"dagur":a+(i?"dag":"degi");case"M":return n?"mánuður":i?"mánuð":"mánuði";case"MM":return e(t)?n?a+"mánuðir":a+(i?"mánuði":"mánuðum"):n?a+"mánuður":a+(i?"mánuð":"mánuði");case"y":return n||i?"ár":"ári";case"yy":return e(t)?a+(n||i?"ár":"árum"):a+(n||i?"ár":"ári")}}return t.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(t){return(/^[0-9].+$/.test(t)?"tra":"in")+" "+t},past:"%s fa",s:"alcuni secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 HH:mm dddd",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日 HH:mm dddd"},meridiemParse:/午前|午後/i,isPM:function(t){return"午後"===t},meridiem:function(t,e,n){return t<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";default:return t}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(t,e){return 12===t&&(t=0),"enjing"===e?t:"siyang"===e?t>=11?t:t+12:"sonten"===e||"ndalu"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"enjing":t<15?"siyang":t<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(t){return/(წამი|წუთი|საათი|წელი)/.test(t)?t.replace(/ი$/,"ში"):t+"ში"},past:function(t){return/(წამი|წუთი|საათი|დღე|თვე)/.test(t)?t.replace(/(ი|ე)$/,"ის უკან"):/წელი/.test(t)?t.replace(/წელი$/,"წლის უკან"):void 0},s:"რამდენიმე წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(t){return 0===t?t:1===t?t+"-ლი":t<20||t<=100&&t%20==0||t%100==0?"მე-"+t:t+"-ე"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};return t.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(t){var n=t%10,r=t>=100?100:null;return t+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};return t.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬ_ಅಕ್ಟೋಬ_ನವೆಂಬ_ಡಿಸೆಂಬ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(t){return t.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ರಾತ್ರಿ"===e?t<4?t:t+12:"ಬೆಳಿಗ್ಗೆ"===e?t:"ಮಧ್ಯಾಹ್ನ"===e?t>=10?t:t+12:"ಸಂಜೆ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ರಾತ್ರಿ":t<10?"ಬೆಳಿಗ್ಗೆ":t<17?"ಮಧ್ಯಾಹ್ನ":t<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(t){return t+"ನೇ"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}일/,ordinal:"%d일",meridiemParse:/오전|오후/,isPM:function(t){return"오후"===t},meridiem:function(t,e,n){return t<12?"오전":"오후"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};return t.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кече саат] LT",lastWeek:"[Өткен аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(t){var n=t%10,r=t>=100?100:null;return t+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var i={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return e?i[n][0]:i[n][1]}function n(t){return i(t.substr(0,t.indexOf(" ")))?"a "+t:"an "+t}function r(t){return i(t.substr(0,t.indexOf(" ")))?"viru "+t:"virun "+t}function i(t){if(t=parseInt(t,10),isNaN(t))return!1;if(t<0)return!0;if(t<10)return 4<=t&&t<=7;if(t<100){var e=t%10,n=t/10;return i(0===e?n:e)}if(t<1e4){for(;t>=10;)t/=10;return i(t)}return t/=1e3,i(t)}return t.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:n,past:r,s:"e puer Sekonnen",m:e,mm:"%d Minutten",h:e,hh:"%d Stonnen",d:e,dd:"%d Deeg",M:e,MM:"%d Méint",y:e,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(t){return"ຕອນແລງ"===t},meridiem:function(t,e,n){return t<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(t){return"ທີ່"+t}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){return e?"kelios sekundės":r?"kelių sekundžių":"kelias sekundes"}function n(t,e,n,r){return e?i(n)[0]:r?i(n)[1]:i(n)[2]}function r(t){return t%10==0||t>10&&t<20}function i(t){return o[t].split("_")}function a(t,e,a,o){var u=t+" ";return 1===t?u+n(t,e,a[0],o):e?u+(r(t)?i(a)[1]:i(a)[0]):o?u+i(a)[1]:u+(r(t)?i(a)[1]:i(a)[2])}var o={m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};return t.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:e,m:n,mm:a,h:n,hh:a,d:n,dd:a,M:n,MM:a,y:n,yy:a},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(t){return t+"-oji"},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n){return n?e%10==1&&e%100!=11?t[2]:t[3]:e%10==1&&e%100!=11?t[0]:t[1]}function n(t,n,r){return t+" "+e(a[r],t,n)}function r(t,n,r){return e(a[r],t,n)}function i(t,e){return e?"dažas sekundes":"dažām sekundēm"}var a={m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};return t.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:i,m:r,mm:n,h:r,hh:n,d:r,dd:n,M:r,MM:n,y:r,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={words:{m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+" "+e.correctGrammaticalCase(t,i)}};return t.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mjesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-ев":0===n?t+"-ен":n>10&&n<20?t+"-ти":1===e?t+"-ви":2===e?t+"-ри":7===e||8===e?t+"-ми":t+"-ти"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(t,e){return 12===t&&(t=0),"രാത്രി"===e&&t>=4||"ഉച്ച കഴിഞ്ഞ്"===e||"വൈകുന്നേരം"===e?t+12:t},meridiem:function(t,e,n){return t<4?"രാത്രി":t<12?"രാവിലെ":t<17?"ഉച്ച കഴിഞ്ഞ്":t<20?"വൈകുന്നേരം":"രാത്രി"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var i="";if(e)switch(n){case"s":i="काही सेकंद";break;case"m":i="एक मिनिट";break;case"mm":i="%d मिनिटे";break;case"h":i="एक तास";break;case"hh":i="%d तास";break;case"d":i="एक दिवस";break;case"dd":i="%d दिवस";break;case"M":i="एक महिना";break;case"MM":i="%d महिने";break;case"y":i="एक वर्ष";break;case"yy":i="%d वर्षे"}else switch(n){case"s":i="काही सेकंदां";break;case"m":i="एका मिनिटा";break;case"mm":i="%d मिनिटां";break;case"h":i="एका तासा";break;case"hh":i="%d तासां";break;case"d":i="एका दिवसा";break;case"dd":i="%d दिवसां";break;case"M":i="एका महिन्या";break;case"MM":i="%d महिन्यां";break;case"y":i="एका वर्षा";break;case"yy":i="%d वर्षां"}return i.replace(/%d/i,t)}var n={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},r={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return t.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,function(t){return r[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return n[t]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(t,e){return 12===t&&(t=0),"रात्री"===e?t<4?t:t+12:"सकाळी"===e?t:"दुपारी"===e?t>=10?t:t+12:"सायंकाळी"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात्री":t<10?"सकाळी":t<17?"दुपारी":t<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},n={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};return t.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(t){return t.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};return t.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(t,e){return 12===t&&(t=0),"राति"===e?t<4?t:t+12:"बिहान"===e?t:"दिउँसो"===e?t>=10?t:t+12:"साँझ"===e?t+12:void 0},meridiem:function(t,e,n){return t<3?"राति":t<12?"बिहान":t<16?"दिउँसो":t<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;return t.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;return t.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"Zo_Ma_Di_Wo_Do_Vr_Za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};return t.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(t){return t.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ਰਾਤ"===e?t<4?t:t+12:"ਸਵੇਰ"===e?t:"ਦੁਪਹਿਰ"===e?t>=10?t:t+12:"ਸ਼ਾਮ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ਰਾਤ":t<10?"ਸਵੇਰ":t<17?"ਦੁਪਹਿਰ":t<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t){return t%10<5&&t%10>1&&~~(t/10)%10!=1}function n(t,n,r){var i=t+" ";switch(r){case"m":return n?"minuta":"minutę";case"mm":return i+(e(t)?"minuty":"minut");case"h":return n?"godzina":"godzinę";case"hh":return i+(e(t)?"godziny":"godzin");case"MM":return i+(e(t)?"miesiące":"miesięcy");case"yy":return i+(e(t)?"lata":"lat")}}var r="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),i="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");return t.defineLocale("pl",{months:function(t,e){return t?""===e?"("+i[t.month()]+"|"+r[t.month()]+")":/D MMMM/.test(e)?i[t.month()]:r[t.month()]:r},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:"[W] dddd [o] LT",lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",m:n,mm:n,h:n,hh:n,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:n,y:"rok",yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("pt",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("pt-br",{months:"Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"%s atrás",s:"poucos segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n){var r={mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"},i=" ";return(t%100>=20||t>=100&&t%100==0)&&(i=" de "),t+i+r[n]}return t.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",m:"un minut",mm:e,h:"o oră",hh:e,d:"o zi",dd:e,M:"o lună",MM:e,y:"un an",yy:e},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e){var n=t.split("_");return e%10==1&&e%100!=11?n[0]:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?n[1]:n[2]}function n(t,n,r){var i={mm:n?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===r?n?"минута":"минуту":t+" "+e(i[r],+t)}var r=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];return t.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:r,longMonthsParse:r,shortMonthsParse:r,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",m:n,mm:n,h:"час",hh:n,d:"день",dd:n,M:"месяц",MM:n,y:"год",yy:n},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(t){return/^(дня|вечера)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночи":t<12?"утра":t<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":return t+"-й";case"D":return t+"-го";case"w":case"W":return t+"-я";default:return t}},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];return t.defineLocale("sd",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(t){return t+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(t){return"ප.ව."===t||"පස් වරු"===t},meridiem:function(t,e,n){return t>11?n?"ප.ව.":"පස් වරු":n?"පෙ.ව.":"පෙර වරු"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t){return t>1&&t<5}function n(t,n,r,i){var a=t+" ";switch(r){case"s":return n||i?"pár sekúnd":"pár sekundami";case"m":return n?"minúta":i?"minútu":"minútou";case"mm":return n||i?a+(e(t)?"minúty":"minút"):a+"minútami";case"h":return n?"hodina":i?"hodinu":"hodinou";case"hh":return n||i?a+(e(t)?"hodiny":"hodín"):a+"hodinami";case"d":return n||i?"deň":"dňom";case"dd":return n||i?a+(e(t)?"dni":"dní"):a+"dňami";case"M":return n||i?"mesiac":"mesiacom";case"MM":return n||i?a+(e(t)?"mesiace":"mesiacov"):a+"mesiacmi";case"y":return n||i?"rok":"rokom";case"yy":return n||i?a+(e(t)?"roky":"rokov"):a+"rokmi"}}var r="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),i="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");return t.defineLocale("sk",{months:r,monthsShort:i,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var i=t+" ";switch(n){case"s":return e||r?"nekaj sekund":"nekaj sekundami";case"m":return e?"ena minuta":"eno minuto";case"mm":return i+=1===t?e?"minuta":"minuto":2===t?e||r?"minuti":"minutama":t<5?e||r?"minute":"minutami":e||r?"minut":"minutami";case"h":return e?"ena ura":"eno uro";case"hh":return i+=1===t?e?"ura":"uro":2===t?e||r?"uri":"urama":t<5?e||r?"ure":"urami":e||r?"ur":"urami";case"d":return e||r?"en dan":"enim dnem";case"dd":return i+=1===t?e||r?"dan":"dnem":2===t?e||r?"dni":"dnevoma":e||r?"dni":"dnevi";case"M":return e||r?"en mesec":"enim mesecem";case"MM":return i+=1===t?e||r?"mesec":"mesecem":2===t?e||r?"meseca":"mesecema":t<5?e||r?"mesece":"meseci":e||r?"mesecev":"meseci";case"y":return e||r?"eno leto":"enim letom";case"yy":return i+=1===t?e||r?"leto":"letom":2===t?e||r?"leti":"letoma":t<5?e||r?"leta":"leti":e||r?"let":"leti"}}return t.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(t){return"M"===t.charAt(0)},meridiem:function(t,e,n){return t<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={words:{m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+" "+e.correctGrammaticalCase(t,i)}};return t.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={words:{m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+" "+e.correctGrammaticalCase(t,i)}};return t.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"дан",dd:e.translate,M:"месец",MM:e.translate,y:"годину",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(t,e,n){return t<11?"ekuseni":t<15?"emini":t<19?"entsambama":"ebusuku"},meridiemHour:function(t,e){return 12===t&&(t=0),"ekuseni"===e?t:"emini"===e?t>=11?t:t+12:"entsambama"===e||"ebusuku"===e?0===t?0:t+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"e":1===e?"a":2===e?"a":"e")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};return t.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(t){return t+"வது"},preparse:function(t){return t.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(t,e,n){return t<2?" யாமம்":t<6?" வைகறை":t<10?" காலை":t<14?" நண்பகல்":t<18?" எற்பாடு":t<22?" மாலை":" யாமம்"},meridiemHour:function(t,e){return 12===t&&(t=0),"யாமம்"===e?t<2?t:t+12:"வைகறை"===e||"காலை"===e?t:"நண்பகல்"===e&&t>=10?t:t+12},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(t,e){return 12===t&&(t=0),"రాత్రి"===e?t<4?t:t+12:"ఉదయం"===e?t:"మధ్యాహ్నం"===e?t>=10?t:t+12:"సాయంత్రం"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"రాత్రి":t<10?"ఉదయం":t<17?"మధ్యాహ్నం":t<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juniu_Juliu_Augustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Aug_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sexta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sext_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Sex_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",m:"minutu ida",mm:"minutus %d",h:"horas ida",hh:"horas %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(t){return"หลังเที่ยง"===t},meridiem:function(t,e,n){return t<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t){var e=t;return e=-1!==t.indexOf("jaj")?e.slice(0,-3)+"leS":-1!==t.indexOf("jar")?e.slice(0,-3)+"waQ":-1!==t.indexOf("DIS")?e.slice(0,-3)+"nem":e+" pIq"}function n(t){var e=t;return e=-1!==t.indexOf("jaj")?e.slice(0,-3)+"Hu’":-1!==t.indexOf("jar")?e.slice(0,-3)+"wen":-1!==t.indexOf("DIS")?e.slice(0,-3)+"ben":e+" ret"}function r(t,e,n,r){var a=i(t);switch(n){case"mm":return a+" tup";case"hh":return a+" rep";case"dd":return a+" jaj";case"MM":return a+" jar";case"yy":return a+" DIS"}}function i(t){var e=Math.floor(t%1e3/100),n=Math.floor(t%100/10),r=t%10,i="";return e>0&&(i+=a[e]+"vatlh"),n>0&&(i+=(""!==i?" ":"")+a[n]+"maH"),r>0&&(i+=(""!==i?" ":"")+a[r]),""===i?"pagh":i}var a="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");return t.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:e,past:n,s:"puS lup",m:"wa’ tup",mm:r,h:"wa’ rep",hh:r,d:"wa’ jaj",dd:r,M:"wa’ jar",MM:r,y:"wa’ DIS",yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};return t.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[haftaya] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen hafta] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},dayOfMonthOrdinalParse:/\d{1,2}'(inci|nci|üncü|ncı|uncu|ıncı)/,ordinal:function(t){if(0===t)return t+"'ıncı";var n=t%10,r=t%100-n,i=t>=100?100:null;return t+(e[n]||e[r]||e[i])},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e,n,r){var i={s:["viensas secunds","'iensas secunds"],m:["'n míut","'iens míut"],mm:[t+" míuts",t+" míuts"],h:["'n þora","'iensa þora"],hh:[t+" þoras",t+" þoras"],d:["'n ziua","'iensa ziua"],dd:[t+" ziuas",t+" ziuas"],M:["'n mes","'iens mes"],MM:[t+" mesen",t+" mesen"],y:["'n ar","'iens ar"],yy:[t+" ars",t+" ars"]};return r?i[n][0]:e?i[n][0]:i[n][1]}return t.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(t){return"d'o"===t.toLowerCase()},meridiem:function(t,e,n){return t>11?n?"d'o":"D'O":n?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";function e(t,e){var n=t.split("_");return e%10==1&&e%100!=11?n[0]:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?n[1]:n[2]}function n(t,n,r){var i={mm:n?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:n?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===r?n?"хвилина":"хвилину":"h"===r?n?"година":"годину":t+" "+e(i[r],+t)}function r(t,e){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};return t?n[/(\[[ВвУу]\]) ?dddd/.test(e)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(e)?"genitive":"nominative"][t.day()]:n.nominative}function i(t){return function(){return t+"о"+(11===this.hours()?"б":"")+"] LT"}}return t.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:r,weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:i("[Сьогодні "),nextDay:i("[Завтра "),lastDay:i("[Вчора "),nextWeek:i("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return i("[Минулої] dddd [").call(this);case 1:case 2:case 4:return i("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",m:n,mm:n,h:"годину",hh:n,d:"день",dd:n,M:"місяць",MM:n,y:"рік",yy:n},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(t){return/^(дня|вечора)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночі":t<12?"ранку":t<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t+"-й";case"D":return t+"-го";default:return t}},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";var e=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"];return t.defineLocale("ur",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(t){return/^ch$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"sa":"SA":n?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10;return t+(1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th")},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日Ah点mm分",LLLL:"YYYY年MMMD日ddddAh点mm分",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"下午"===e||"晚上"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"周";default:return t}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})})},function(t,e,n){!function(t,e){e(n(0))}(0,function(t){"use strict";return t.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY年MMMD日",LL:"YYYY年MMMD日",LLL:"YYYY年MMMD日 HH:mm",LLLL:"YYYY年MMMD日dddd HH:mm",l:"YYYY年MMMD日",ll:"YYYY年MMMD日",lll:"YYYY年MMMD日 HH:mm",llll:"YYYY年MMMD日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})})},function(t,e,n){(function(t,r){var i=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[1,11],r=[1,12],i=[1,13],a=[1,15],o=[1,16],u=[1,17],s=[6,8],c=[1,26],l=[1,27],d=[1,28],h=[1,29],f=[1,30],_=[1,31],p=[6,8,13,17,23,26,27,28,29,30,31],m=[6,8,13,17,23,26,27,28,29,30,31,45,46,47],y=[23,45,46,47],g=[23,30,31,45,46,47],v=[23,26,27,28,29,45,46,47],M=[6,8,13],b=[1,46],L={trace:function(){},yy:{},symbols_:{error:2,mermaidDoc:3,graphConfig:4,CLASS_DIAGRAM:5,NEWLINE:6,statements:7,EOF:8,statement:9,className:10,alphaNumToken:11,relationStatement:12,LABEL:13,classStatement:14,methodStatement:15,CLASS:16,STRUCT_START:17,members:18,STRUCT_STOP:19,MEMBER:20,SEPARATOR:21,relation:22,STR:23,relationType:24,lineType:25,AGGREGATION:26,EXTENSION:27,COMPOSITION:28,DEPENDENCY:29,LINE:30,DOTTED_LINE:31,commentToken:32,textToken:33,graphCodeTokens:34,textNoTagsToken:35,TAGSTART:36,TAGEND:37,"==":38,"--":39,PCT:40,DEFAULT:41,SPACE:42,MINUS:43,keywords:44,UNICODE_TEXT:45,NUM:46,ALPHA:47,$accept:0,$end:1},terminals_:{2:"error",5:"CLASS_DIAGRAM",6:"NEWLINE",8:"EOF",13:"LABEL",16:"CLASS",17:"STRUCT_START",19:"STRUCT_STOP",20:"MEMBER",21:"SEPARATOR",23:"STR",26:"AGGREGATION",27:"EXTENSION",28:"COMPOSITION",29:"DEPENDENCY",30:"LINE",31:"DOTTED_LINE",34:"graphCodeTokens",36:"TAGSTART",37:"TAGEND",38:"==",39:"--",40:"PCT",41:"DEFAULT",42:"SPACE",43:"MINUS",44:"keywords",45:"UNICODE_TEXT",46:"NUM",47:"ALPHA"},productions_:[0,[3,1],[4,4],[7,1],[7,3],[10,2],[10,1],[9,1],[9,2],[9,1],[9,1],[14,2],[14,5],[18,1],[18,2],[15,1],[15,2],[15,1],[15,1],[12,3],[12,4],[12,4],[12,5],[22,3],[22,2],[22,2],[22,1],[24,1],[24,1],[24,1],[24,1],[25,1],[25,1],[32,1],[32,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[35,1],[35,1],[35,1],[35,1],[11,1],[11,1],[11,1]],performAction:function(t,e,n,r,i,a,o){var u=a.length-1;switch(i){case 5:this.$=a[u-1]+a[u];break;case 6:this.$=a[u];break;case 7:r.addRelation(a[u]);break;case 8:a[u-1].title=r.cleanupLabel(a[u]),r.addRelation(a[u-1]);break;case 12:r.addMembers(a[u-3],a[u-1]);break;case 13:this.$=[a[u]];break;case 14:a[u].push(a[u-1]),this.$=a[u];break;case 15:break;case 16:r.addMembers(a[u-1],r.cleanupLabel(a[u]));break;case 17:console.warn("Member",a[u]);break;case 18:break;case 19:this.$={id1:a[u-2],id2:a[u],relation:a[u-1],relationTitle1:"none",relationTitle2:"none"};break;case 20:this.$={id1:a[u-3],id2:a[u],relation:a[u-1],relationTitle1:a[u-2],relationTitle2:"none"};break;case 21:this.$={id1:a[u-3],id2:a[u],relation:a[u-2],relationTitle1:"none",relationTitle2:a[u-1]};break;case 22:this.$={id1:a[u-4],id2:a[u],relation:a[u-2],relationTitle1:a[u-3],relationTitle2:a[u-1]};break;case 23:this.$={type1:a[u-2],type2:a[u],lineType:a[u-1]};break;case 24:this.$={type1:"none",type2:a[u],lineType:a[u-1]};break;case 25:this.$={type1:a[u-1],type2:"none",lineType:a[u]};break;case 26:this.$={type1:"none",type2:"none",lineType:a[u]};break;case 27:this.$=r.relationType.AGGREGATION;break;case 28:this.$=r.relationType.EXTENSION;break;case 29:this.$=r.relationType.COMPOSITION;break;case 30:this.$=r.relationType.DEPENDENCY;break;case 31:this.$=r.lineType.LINE;break;case 32:this.$=r.lineType.DOTTED_LINE}},table:[{3:1,4:2,5:[1,3]},{1:[3]},{1:[2,1]},{6:[1,4]},{7:5,9:6,10:10,11:14,12:7,14:8,15:9,16:n,20:r,21:i,45:a,46:o,47:u},{8:[1,18]},{6:[1,19],8:[2,3]},e(s,[2,7],{13:[1,20]}),e(s,[2,9]),e(s,[2,10]),e(s,[2,15],{22:21,24:24,25:25,13:[1,23],23:[1,22],26:c,27:l,28:d,29:h,30:f,31:_}),{10:32,11:14,45:a,46:o,47:u},e(s,[2,17]),e(s,[2,18]),e(p,[2,6],{11:14,10:33,45:a,46:o,47:u}),e(m,[2,46]),e(m,[2,47]),e(m,[2,48]),{1:[2,2]},{7:34,9:6,10:10,11:14,12:7,14:8,15:9,16:n,20:r,21:i,45:a,46:o,47:u},e(s,[2,8]),{10:35,11:14,23:[1,36],45:a,46:o,47:u},{22:37,24:24,25:25,26:c,27:l,28:d,29:h,30:f,31:_},e(s,[2,16]),{25:38,30:f,31:_},e(y,[2,26],{24:39,26:c,27:l,28:d,29:h}),e(g,[2,27]),e(g,[2,28]),e(g,[2,29]),e(g,[2,30]),e(v,[2,31]),e(v,[2,32]),e(s,[2,11],{17:[1,40]}),e(p,[2,5]),{8:[2,4]},e(M,[2,19]),{10:41,11:14,45:a,46:o,47:u},{10:42,11:14,23:[1,43],45:a,46:o,47:u},e(y,[2,25],{24:44,26:c,27:l,28:d,29:h}),e(y,[2,24]),{18:45,20:b},e(M,[2,21]),e(M,[2,20]),{10:47,11:14,45:a,46:o,47:u},e(y,[2,23]),{19:[1,48]},{18:49,19:[2,13],20:b},e(M,[2,22]),e(s,[2,12]),{19:[2,14]}],defaultActions:{2:[2,1],18:[2,2],34:[2,4],49:[2,14]},parseError:function(t,e){if(!e.recoverable){var n=function(t,e){this.message=t,this.hash=e};throw n.prototype=Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[null],i=[],a=this.table,o="",u=0,s=0,c=0,l=i.slice.call(arguments,1),d=Object.create(this.lexer),h={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(h.yy[f]=this.yy[f]);d.setInput(t,h.yy),h.yy.lexer=d,h.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var _=d.yylloc;i.push(_);var p=d.options&&d.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,y,g,v,M,b,L,k,w,D={};;){if(g=n[n.length-1],this.defaultActions[g]?v=this.defaultActions[g]:(null!==m&&void 0!==m||(m=function(){var t;return t=d.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),v=a[g]&&a[g][m]),void 0===v||!v.length||!v[0]){var x="";w=[];for(b in a[g])this.terminals_[b]&&b>2&&w.push("'"+this.terminals_[b]+"'");x=d.showPosition?"Parse error on line "+(u+1)+":\n"+d.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(x,{text:d.match,token:this.terminals_[m]||m,line:d.yylineno,loc:_,expected:w})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(v[0]){case 1:n.push(m),r.push(d.yytext),i.push(d.yylloc),n.push(v[1]),m=null,y?(m=y,y=null):(s=d.yyleng,o=d.yytext,u=d.yylineno,_=d.yylloc,c>0&&c--);break;case 2:if(L=this.productions_[v[1]][1],D.$=r[r.length-L],D._$={first_line:i[i.length-(L||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(L||1)].first_column,last_column:i[i.length-1].last_column},p&&(D._$.range=[i[i.length-(L||1)].range[0],i[i.length-1].range[1]]),void 0!==(M=this.performAction.apply(D,[o,s,u,h.yy,v[1],r,i].concat(l))))return M;L&&(n=n.slice(0,-1*L*2),r=r.slice(0,-1*L),i=i.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),r.push(D.$),i.push(D._$),k=a[n[n.length-2]][n[n.length-1]],n.push(k);break;case 3:return!0}}return!0}},k=function(){return{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),r&&(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;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[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),t>=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:break;case 1:return 6;case 2:break;case 3:return 5;case 4:return this.begin("struct"),17;case 5:return this.popState(),19;case 6:break;case 7:return"MEMBER";case 8:return 16;case 9:this.begin("string");break;case 10:this.popState();break;case 11:return"STR";case 12:case 13:return 27;case 14:case 15:return 29;case 16:return 28;case 17:return 26;case 18:return 30;case 19:return 31;case 20:return 13;case 21:return 43;case 22:return"DOT";case 23:return"PLUS";case 24:return 40;case 25:case 26:return"EQUALS";case 27:return 47;case 28:return"PUNCTUATION";case 29:return 46;case 30:return 45;case 31:return 42;case 32:return 8}},rules:[/^(?:%%[^\n]*)/,/^(?:\n+)/,/^(?:\s+)/,/^(?:classDiagram\b)/,/^(?:[\{])/,/^(?:\})/,/^(?:[\n])/,/^(?:[^\{\}\n]*)/,/^(?:class\b)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::[^#\n;]+)/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!"#$%&'*+,-.`?\\_\/])/,/^(?:[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:[10,11],inclusive:!1},struct:{rules:[5,6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,8,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],inclusive:!0}}}}();return L.lexer=k,t.prototype=L,L.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(12).readFileSync(n(13).normalize(r[1]),"utf8");return e.parser.parse(i)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(11),n(4)(t))},function(t,e,n){var r,i=n(2),a=i.Log,o=[];r={},e.addClass=function(t){void 0===r[t]&&(r[t]={id:t,methods:[],members:[]})},e.clear=function(){o=[],r={}},t.exports.getClass=function(t){return r[t]},t.exports.getClasses=function(){return r},t.exports.getRelations=function(){return o},e.addRelation=function(t){a.warn("Adding relation: "+JSON.stringify(t)),e.addClass(t.id1),e.addClass(t.id2),o.push(t)},e.addMembers=function(t,e){var n=r[t];"string"==typeof e&&(")"===e.substr(-1)?n.methods.push(e):n.members.push(e))},e.cleanupLabel=function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},e.lineType={LINE:0,DOTTED_LINE:1},e.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3}},function(t,e,n){(function(t,r){var i=function(){function t(){this.yy={}}var e=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},n=[2,3],r=[1,7],i=[7,12,15,17,19,20,21],a=[7,11,12,15,17,19,20,21],o=[2,20],u=[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 u=a.length-1;switch(i){case 1:return a[u-1];case 2:return r.setDirection(a[u-3]),a[u-1];case 4:r.setOptions(a[u-1]),this.$=a[u];break;case 5:a[u-1]+=a[u],this.$=a[u-1];break;case 7:this.$=[];break;case 8:a[u-1].push(a[u]),this.$=a[u-1];break;case 9:this.$=a[u-1];break;case 11:r.commit(a[u]);break;case 12:r.branch(a[u]);break;case 13:r.checkout(a[u]);break;case 14:r.merge(a[u]);break;case 15:r.reset(a[u]);break;case 16:this.$="";break;case 17:this.$=a[u];break;case 18:this.$=a[u-1]+":"+a[u];break;case 19:this.$=a[u-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:n,9:6,12:r},{5:[1,8]},{7:[1,9]},e(i,[2,7],{10:10,11:[1,11]}),e(a,[2,6]),{6:12,7:n,9:6,12:r},{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]},e(a,[2,5]),{7:[1,21]},e(i,[2,8]),{12:[1,22]},e(i,[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]},e(i,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:o,25:31,26:u},{12:o,25:33,26:u},{12:[2,18]},{12:o,25:34,26:u},{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=function(t,e){this.message=t,this.hash=e};throw n.prototype=Error,new n(t,e)}this.trace(t)},parse:function(t){var e=this,n=[0],r=[null],i=[],a=this.table,o="",u=0,s=0,c=0,l=i.slice.call(arguments,1),d=Object.create(this.lexer),h={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(h.yy[f]=this.yy[f]);d.setInput(t,h.yy),h.yy.lexer=d,h.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var _=d.yylloc;i.push(_);var p=d.options&&d.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,y,g,v,M,b,L,k,w,D={};;){if(g=n[n.length-1],this.defaultActions[g]?v=this.defaultActions[g]:(null!==m&&void 0!==m||(m=function(){var t;return t=d.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),v=a[g]&&a[g][m]),void 0===v||!v.length||!v[0]){var x="";w=[];for(b in a[g])this.terminals_[b]&&b>2&&w.push("'"+this.terminals_[b]+"'");x=d.showPosition?"Parse error on line "+(u+1)+":\n"+d.showPosition()+"\nExpecting "+w.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(x,{text:d.match,token:this.terminals_[m]||m,line:d.yylineno,loc:_,expected:w})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+g+", token: "+m);switch(v[0]){case 1:n.push(m),r.push(d.yytext),i.push(d.yylloc),n.push(v[1]),m=null,y?(m=y,y=null):(s=d.yyleng,o=d.yytext,u=d.yylineno,_=d.yylloc,c>0&&c--);break;case 2:if(L=this.productions_[v[1]][1],D.$=r[r.length-L],D._$={first_line:i[i.length-(L||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(L||1)].first_column,last_column:i[i.length-1].last_column},p&&(D._$.range=[i[i.length-(L||1)].range[0],i[i.length-1].range[1]]),void 0!==(M=this.performAction.apply(D,[o,s,u,h.yy,v[1],r,i].concat(l))))return M;L&&(n=n.slice(0,-1*L*2),r=r.slice(0,-1*L),i=i.slice(0,-1*L)),n.push(this.productions_[v[1]][0]),r.push(D.$),i.push(D._$),k=a[n[n.length-2]][n[n.length-1]],n.push(k);break;case 3:return!0}}return!0}},c=function(){return{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),r&&(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;this._input||(this.done=!0);var t,e,n,r;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[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),t>=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_]+)/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}}}}();return s.lexer=c,t.prototype=s,s.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(12).readFileSync(n(13).normalize(r[1]),"utf8");return e.parser.parse(i)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(e,n(11),n(4)(t))},function(t,e,n){function r(t,e){return Math.floor(Math.random()*(e-t))+t}function i(){for(var t="",e=0;e<7;e++)t+="0123456789abcdef"[r(0,16)];return t}function a(t,e){for(l.debug("Entering isfastforwardable:",t.id,e.id);t.seq<=e.seq&&t!==e&&null!=e.parent;){if(Array.isArray(e.parent))return l.debug("In merge commit:",e.parent),a(t,h[e.parent[0]])||a(t,h[e.parent[1]]);e=h[e.parent]}return l.debug(t.id,e.id),t.id===e.id}function o(t,e){return t.seq>e.seq&&a(e,t)}function u(t,e,n){var r=t.indexOf(e);-1===r?t.push(n):t.splice(r,1,n)}function s(t){var e=d.maxBy(t,"seq"),n="";t.forEach(function(t){n+=t===e?"\t*":"\t|"});var r=[n,e.id,e.seq];if(d.each(_,function(t,n){t===e.id&&r.push(n)}),l.debug(r.join(" ")),Array.isArray(e.parent)){var i=h[e.parent[0]];u(t,e,i),t.push(h[e.parent[1]])}else{if(null==e.parent)return;var a=h[e.parent];u(t,e,a)}t=d.uniqBy(t,"id"),s(t)}var c=n(2),l=c.Log,d=n(16),h={},f=null,_={master:f},p="master",m="LR",y=0;e.setDirection=function(t){m=t};var g={};e.setOptions=function(t){l.debug("options str",t),t=t&&t.trim(),t=t||"{}";try{g=JSON.parse(t)}catch(t){l.error("error while parsing gitGraph options",t.message)}},e.getOptions=function(){return g},e.commit=function(t){var e={id:i(),message:t,seq:y++,parent:null==f?null:f.id};f=e,h[e.id]=e,_[p]=e.id,l.debug("in pushCommit "+e.id)},e.branch=function(t){_[t]=null!=f?f.id:null,l.debug("in createBranch")},e.merge=function(t){var e=h[_[p]],n=h[_[t]];if(o(e,n))return void l.debug("Already merged");if(a(e,n))_[p]=_[t],f=h[_[p]];else{var r={id:i(),message:"merged branch "+t+" into "+p,seq:y++,parent:[null==f?null:f.id,_[t]]};f=r,h[r.id]=r,_[p]=r.id}l.debug(_),l.debug("in mergeBranch")},e.checkout=function(t){l.debug("in checkout"),p=t;var e=_[p];f=h[e]},e.reset=function(t){l.debug("in reset",t);var e=t.split(":")[0],n=parseInt(t.split(":")[1]),r="HEAD"===e?f:h[_[e]];for(l.debug(r,n);n>0;)if(r=h[r.parent],n--,!r){var i="Critical error - unique parent commit not found during reset";throw l.error(i),i}f=r,_[p]=r.id},e.prettyPrint=function(){l.debug(h),s([e.getCommitsArray()[0]])},e.clear=function(){h={},f=null,_={master:f},p="master",y=0},e.getBranchesAsObjArray=function(){return d.map(_,function(t,e){return{name:e,commit:h[t]}})},e.getBranches=function(){return _},e.getCommits=function(){return h},e.getCommitsArray=function(){var t=Object.keys(h).map(function(t){return h[t]});return t.forEach(function(t){l.debug(t.id)}),d.orderBy(t,["seq"],["desc"])},e.getCurrentBranch=function(){return p},e.getDirection=function(){return m},e.getHead=function(){return f}},function(t,e){t.exports={name:"mermaid",version:"7.0.5",description:"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.",main:"src/mermaid.js",keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],bin:{mermaid:"./bin/mermaid.js"},scripts:{build:"node -r babel-register ./node_modules/.bin/webpack --progress --colors",watch:"yarn build -- --watch",release:"yarn build -- -p --config webpack.config.prod.js",upgrade:"yarn-upgrade-all && yarn remove d3 && yarn add d3@3.5.17",lint:"node_modules/.bin/standard",karma:"node node_modules/karma/bin/karma start karma.conf.js --single-run",tape:"node node_modules/tape/bin/tape test/cli_test-*.js",test:"yarn lint && yarn tape && yarn karma",live:"live-server ./test/examples",jison:"gulp jison_legacy",live_server:"gulp live-server",prepublishOnly:"yarn build && yarn release && yarn test"},repository:{type:"git",url:"https://github.com/knsv/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js"]},dependencies:{chalk:"^2.1.0",d3:"3.5.17",dagre:"^0.7.4","dagre-d3-renderer":"^0.1.6",he:"^1.1.1",lodash:"^4.17.4",minimist:"^1.2.0",mkdirp:"^0.5.1",moment:"^2.18.1",semver:"^5.4.1",which:"^1.3.0"},devDependencies:{async:"^2.5.0","babel-core":"^6.26.0","babel-loader":"^7.1.2","babel-plugin-transform-remove-strict-mode":"^0.0.2","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1",clone:"^2.1.1","codeclimate-test-reporter":"^0.5.0","css-loader":"^0.28.7",dox:"^0.9.0","event-stream":"^3.3.4","extract-text-webpack-plugin":"^3.0.0","front-matter":"^2.2.0",gulp:"^3.9.1","gulp-bower":"^0.0.13","gulp-bump":"^2.7.0","gulp-concat":"^2.6.1","gulp-data":"^1.2.1","gulp-dox":"^0.1.6","gulp-ext-replace":"^0.3.0","gulp-filelog":"^0.4.1","gulp-front-matter":"^1.3.0","gulp-hogan":"^2.0.0","gulp-if":"^2.0.2","gulp-insert":"^0.5.0","gulp-istanbul":"^1.1.2","gulp-jasmine":"^2.4.2","gulp-jasmine-browser":"^1.9.0","gulp-jison":"^1.2.0","gulp-less":"^3.3.2","gulp-livereload":"^3.8.1","gulp-marked":"^1.0.0","gulp-mdvars":"^2.0.0","gulp-qunit":"^1.5.0","gulp-rename":"^1.2.2","gulp-shell":"^0.6.3","gulp-tag-version":"^1.3.0","gulp-util":"^3.0.8","gulp-vartree":"^2.0.1","hogan.js":"^3.0.2","inject-loader":"^3.0.1",jasmine:"^2.8.0","jasmine-es6":"^0.4.1",jison:"^0.4.17",jsdom:"^11.2.0",karma:"^1.7.1","karma-chrome-launcher":"^2.2.0","karma-jasmine":"^1.1.0","karma-webpack":"^2.0.4",less:"^2.7.2","less-loader":"^4.0.5","live-server":"^1.2.0","map-stream":"^0.0.7",marked:"^0.3.6","mock-browser":"^0.92.14","phantomjs-prebuilt":"^2.1.15","require-dir":"^0.3.2",rimraf:"^2.6.1",standard:"^10.0.3","style-loader":"^0.18.2",tape:"^4.8.0",webpack:"^3.5.5","webpack-node-externals":"^1.6.0","yarn-upgrade-all":"^0.1.8"},files:["bin","dist","lib","src"]}},function(t,e,n){(function(r){var i=n(2),a=i.Log,o=n(171),u=0,s=n(250);t.exports.mermaidAPI=o;var c=function(){var t=o.getConfig();a.debug("Starting rendering diagrams");var e;arguments.length>=2?(/*! sequence config was passed as #1 */
+void 0!==arguments[0]&&(r.mermaid.sequenceConfig=arguments[0]),e=arguments[1]):e=arguments[0];var n;"function"==typeof arguments[arguments.length-1]?(n=arguments[arguments.length-1],a.debug("Callback function found")):void 0!==t.mermaid&&("function"==typeof t.mermaid.callback?(n=t.mermaid.callback,a.debug("Callback function found")):a.debug("No Callback function found")),e=void 0===e?document.querySelectorAll(".mermaid"):"string"==typeof e?document.querySelectorAll(e):e instanceof window.Node?[e]:e,void 0!==r.mermaid_config&&o.initialize(r.mermaid_config),a.debug("Start On Load before: "+r.mermaid.startOnLoad),void 0!==r.mermaid.startOnLoad&&(a.debug("Start On Load inner: "+r.mermaid.startOnLoad),o.initialize({startOnLoad:r.mermaid.startOnLoad})),void 0!==r.mermaid.ganttConfig&&o.initialize({gantt:r.mermaid.ganttConfig});for(var i,c=function(t,e){d.innerHTML=t,void 0!==n&&n(h),e(d)},l=0;l<e.length;l++){var d=e[l];/*! Check if previously processed */
+if(!d.getAttribute("data-processed")){d.setAttribute("data-processed",!0);var h="mermaidChart"+u++;i=d.innerHTML,i=s.decode(i).trim(),o.render(h,i,c,d)}}};e.init=c,e.parse=o.parse,e.version=function(){return"v"+n(169).version},e.initialize=function(t){a.debug("Initializing mermaid"),void 0!==t.mermaid&&(void 0!==t.mermaid.startOnLoad&&(r.mermaid.startOnLoad=t.mermaid.startOnLoad),void 0!==t.mermaid.htmlLabels&&(r.mermaid.htmlLabels=t.mermaid.htmlLabels)),o.initialize(t)};var l=function(t,e){return void 0!==e&&t===e};r.mermaid={startOnLoad:!0,htmlLabels:!0,init:function(){c.apply(null,arguments)},initialize:function(t){e.initialize(t)},version:function(){return o.version()},parse:function(t){return o.parse(t)},parseError:function(t){a.debug("Mermaid Syntax error:"),a.debug(t)},render:function(t,e,n,r){return o.render(t,e,n,r)}},e.parseError=r.mermaid.parseError,e.contentLoaded=function(){var t;void 0!==r.mermaid_config&&l(!1,r.mermaid_config.htmlLabels)&&(r.mermaid.htmlLabels=!1),r.mermaid.startOnLoad?void 0!==r.mermaid_config?l(!0,r.mermaid_config.startOnLoad)&&r.mermaid.init():(t=o.getConfig(),t.startOnLoad&&r.mermaid.init()):void 0===r.mermaid.startOnLoad&&(a.debug("In start, no config"),t=o.getConfig(),t.startOnLoad&&r.mermaid.init())},"undefined"!=typeof document&&/*!
+ * Wait for document loaded before starting the execution
+ */
+window.addEventListener("load",function(){e.contentLoaded()},!1)}).call(e,n(9))},function(t,e,n){(function(t){var r="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},i=n(2),a=i.Log,o=n(22),u=n(23),s=n(172),c=n(243),l=n(245),d=n(47),h=n(25),f=n(26),_=n(44),p=n(45),m=n(46),y=n(246),g=n(48),v=n(49),M=n(165),b=n(248),L=n(166),k=n(167),w=n(249),D=n(168),x=n(10),Y={logLevel:5,cloneCssStyles:!0,startOnLoad:!0,arrowMarkerAbsolute:!1,flowchart:{htmlLabels:!0,useMaxWidth:!0},sequenceDiagram:{diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!0,bottomMarginAdj:1,useMaxWidth:!0},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"',numberSectionStyles:3,axisFormatter:[["%I:%M",function(t){return t.getHours()}],["w. %U",function(t){return 1===t.getDay()}],["%a %d",function(t){return t.getDay()&&1!==t.getDate()}],["%b %d",function(t){return 1!==t.getDate()}],["%m-%y",function(t){return t.getMonth()}]]},classDiagram:{},gitGraph:{},info:{}};i.setLogLevel(Y.logLevel);var T=function(t){var e,n=u.detectType(t);switch(n){case"gitGraph":e=k,e.parser.yy=D;break;case"graph":e=h,e.parser.yy=o;break;case"dotGraph":e=f,e.parser.yy=o;break;case"sequenceDiagram":e=_,e.parser.yy=p;break;case"info":e=d,e.parser.yy=m;break;case"gantt":e=g,e.parser.yy=v;break;case"classDiagram":e=M,e.parser.yy=L}try{return e.parse(t),!0}catch(t){return!1}};e.parse=T,e.version=function(){return n(169).version},e.encodeEntities=function(t){var e=t;return e=e.replace(/style.*:\S*#.*;/g,function(t){return t.substring(0,t.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(t){return t.substring(0,t.length-1)}),e=e.replace(/#\w+;/g,function(t){var e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"fl°°"+e+"¶ß":"fl°"+e+"¶ß"})},e.decodeEntities=function(t){var e=t;return e=e.replace(/fl°°/g,function(){return"&#"}),e=e.replace(/fl°/g,function(){return"&"}),e=e.replace(/¶ß/g,function(){return";"})};var A=function(t,n,r,i){if(void 0!==i)i.innerHTML="",x.select(i).append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g");else{var d=document.querySelector("#d"+t);d&&(d.innerHTML=""),x.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=n,n=e.encodeEntities(n);var h=x.select("#d"+t).node(),f=u.detectType(n),_={};switch(f){case"gitGraph":Y.flowchart.arrowMarkerAbsolute=Y.arrowMarkerAbsolute,w.setConf(Y.gitGraph),w.draw(n,t,!1);break;case"graph":Y.flowchart.arrowMarkerAbsolute=Y.arrowMarkerAbsolute,s.setConf(Y.flowchart),s.draw(n,t,!1),Y.cloneCssStyles&&(_=s.getClasses(n,!1),u.cloneCssStyles(h.firstChild,_));break;case"dotGraph":Y.flowchart.arrowMarkerAbsolute=Y.arrowMarkerAbsolute,s.setConf(Y.flowchart),s.draw(n,t,!0),Y.cloneCssStyles&&(_=s.getClasses(n,!0),u.cloneCssStyles(h.firstChild,_));break;case"sequenceDiagram":Y.sequenceDiagram.arrowMarkerAbsolute=Y.arrowMarkerAbsolute,c.setConf(Y.sequenceDiagram),c.draw(n,t),Y.cloneCssStyles&&u.cloneCssStyles(h.firstChild,[]);break;case"gantt":Y.gantt.arrowMarkerAbsolute=Y.arrowMarkerAbsolute,y.setConf(Y.gantt),y.draw(n,t),Y.cloneCssStyles&&u.cloneCssStyles(h.firstChild,[]);break;case"classDiagram":Y.classDiagram.arrowMarkerAbsolute=Y.arrowMarkerAbsolute,b.setConf(Y.classDiagram),b.draw(n,t),Y.cloneCssStyles&&u.cloneCssStyles(h.firstChild,[]);break;case"info":Y.info.arrowMarkerAbsolute=Y.arrowMarkerAbsolute,l.draw(n,t,e.version()),Y.cloneCssStyles&&u.cloneCssStyles(h.firstChild,[])}x.select("#d"+t).selectAll("foreignobject div").attr("xmlns","http://www.w3.org/1999/xhtml");var p="";Y.arrowMarkerAbsolute&&(p=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,p=p.replace(/\(/g,"\\("),p=p.replace(/\)/g,"\\)"));var m=x.select("#d"+t).node().innerHTML.replace(/url\(#arrowhead/g,"url("+p+"#arrowhead","g");m=e.decodeEntities(m),void 0!==r?r(m,o.bindFunctions):a.warn("CB = undefined!");var g=x.select("#d"+t).node();return null!==g&&"function"==typeof g.remove&&x.select("#d"+t).node().remove(),m};e.render=function(t,e,n,r){try{if(1===arguments.length&&(e=t,t="mermaidId0"),"undefined"!=typeof document)return A(t,e,n,r)}catch(t){a.warn(t)}};var E=function(t){var e,n=Object.keys(t);for(e=0;e<n.length;e++)if("object"===r(t[n[e]])){var i,o=Object.keys(t[n[e]]);for(i=0;i<o.length;i++)a.debug("Setting conf ",n[e],"-",o[i]),void 0===Y[n[e]]&&(Y[n[e]]={}),a.debug("Setting config: "+n[e]+" "+o[i]+" to "+t[n[e]][o[i]]),Y[n[e]][o[i]]=t[n[e]][o[i]]}else Y[n[e]]=t[n[e]]};e.initialize=function(t){a.debug("Initializing mermaidAPI"),"object"===(void 0===t?"undefined":r(t))&&E(t),i.setLogLevel(Y.logLevel)},e.getConfig=function(){return Y},e.parseError=function(e,n){"undefined"!=typeof mermaid?t.mermaid.parseError(e,n):(a.debug("Mermaid Syntax error:"),a.debug(e))},t.mermaidAPI={render:e.render,parse:e.parse,initialize:e.initialize,detectType:u.detectType,parseError:e.parseError,getConfig:e.getConfig}}).call(e,n(9))},function(t,e,n){var r=n(22),i=n(25),a=n(26),o=n(10),u=n(173),s=n(2),c=s.Log,l={};t.exports.setConf=function(t){var e,n=Object.keys(t);for(e=0;e<n.length;e++)l[n[e]]=t[n[e]]},e.addVertices=function(t,e){var n=function(t,e){var n;for(n=0;n<e.length;n++)void 0!==e[n]&&(t=t+e[n]+";");return t};Object.keys(t).forEach(function(r){var i,a=t[r],o="";a.classes.length>0&&(o=a.classes.join(" "));var u="";u=n(u,a.styles),i=void 0===a.text?a.id:a.text;var s="";if(l.htmlLabels)s="html",i=i.replace(/fa:fa[\w-]+/g,function(t){return'<i class="fa '+t.substring(3)+'"></i>'});else{var c=document.createElementNS("http://www.w3.org/2000/svg","text"),d=i.split(/<br>/),h=0;for(h=0;h<d.length;h++){var f=document.createElementNS("http://www.w3.org/2000/svg","tspan");f.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),f.setAttribute("dy","1em"),f.setAttribute("x","1"),f.textContent=d[h],c.appendChild(f)}s="svg",i=c}var _=0,p="";switch(a.type){case"round":_=5,p="rect";break;case"square":p="rect";break;case"diamond":p="question";break;case"odd":case"odd_right":p="rect_left_inv_arrow";break;case"circle":p="circle";break;case"ellipse":p="ellipse";break;case"group":p="rect",i=l.htmlLabels?"":document.createElementNS("http://www.w3.org/2000/svg","text");break;default:p="rect"}e.setNode(a.id,{labelType:s,shape:p,label:i,rx:_,ry:_,class:o,style:u,id:a.id})})},e.addEdges=function(t,e){var n,r=0;void 0!==t.defaultStyle&&(n=t.defaultStyle.toString().replace(/,/g,";")),t.forEach(function(i){r++;var a={};"arrow_open"===i.type?a.arrowhead="none":a.arrowhead="normal";var o="";if(void 0!==i.style)i.style.forEach(function(t){o=o+t+";"});else switch(i.stroke){case"normal":o="fill:none",void 0!==n&&(o=n);break;case"dotted":o="stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":o="stroke: #333; stroke-width: 3.5px;fill:none"}a.style=o,void 0!==i.interpolate?a.lineInterpolate=i.interpolate:void 0!==t.defaultInterpolate&&(a.lineInterpolate=t.defaultInterpolate),void 0===i.text?void 0!==i.style&&(a.arrowheadStyle="fill: #333"):(a.arrowheadStyle="fill: #333",void 0===i.style?(a.labelpos="c",l.htmlLabels?(a.labelType="html",a.label='<span class="edgeLabel">'+i.text+"</span>"):(a.labelType="text",a.style="stroke: #333; stroke-width: 1.5px;fill:none",a.label=i.text.replace(/<br>/g,"\n"))):a.label=i.text.replace(/<br>/g,"\n")),e.setEdge(i.start,i.end,a,r)})},e.getClasses=function(t,e){var n;r.clear(),n=e?a.parser:i.parser,n.yy=r,n.parse(t);var o=r.getClasses();return void 0===o.default&&(o.default={id:"default"},o.default.styles=[],o.default.clusterStyles=["rx:4px","fill: rgb(255, 255, 222)","rx: 4px","stroke: rgb(170, 170, 51)","stroke-width: 1px"],o.default.nodeLabelStyles=["fill:#000","stroke:none","font-weight:300",'font-family:"Helvetica Neue",Helvetica,Arial,sans-serf',"font-size:14px"],o.default.edgeLabelStyles=["fill:#000","stroke:none","font-weight:300",'font-family:"Helvetica Neue",Helvetica,Arial,sans-serf',"font-size:14px"]),o},e.draw=function(t,n,s){c.debug("Drawing flowchart");var d;r.clear(),d=s?a.parser:i.parser,d.yy=r;try{d.parse(t)}catch(t){c.debug("Parsing failed")}var h;void 0===(h=r.getDirection())&&(h="TD");var f,_=new u.graphlib.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:h,marginx:20,marginy:20}).setDefaultEdgeLabel(function(){return{}}),p=r.getSubGraphs(),m=0;for(m=p.length-1;m>=0;m--)f=p[m],r.addVertex(f.id,f.title,"group",void 0);var y=r.getVertices(),g=r.getEdges();m=0;var v;for(m=p.length-1;m>=0;m--)for(f=p[m],o.selectAll("cluster").append("text"),v=0;v<f.nodes.length;v++)_.setParent(f.nodes[v],f.id);e.addVertices(y,_),e.addEdges(g,_);var M=u.render,b=new M;b.shapes().question=function(t,e,n){var r=e.width,i=e.height,a=.8*(r+i),o=[{x:a/2,y:0},{x:a,y:-a/2},{x:a/2,y:-a},{x:0,y:-a/2}],s=t.insert("polygon",":first-child").attr("points",o.map(function(t){return t.x+","+t.y}).join(" ")).attr("rx",5).attr("ry",5).attr("transform","translate("+-a/2+","+2*a/4+")");return n.intersect=function(t){return u.intersect.polygon(n,o,t)},s},b.shapes().rect_left_inv_arrow=function(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=t.insert("polygon",":first-child").attr("points",a.map(function(t){return t.x+","+t.y}).join(" ")).attr("transform","translate("+-r/2+","+2*i/4+")");return n.intersect=function(t){return u.intersect.polygon(n,a,t)},o},b.shapes().rect_right_inv_arrow=function(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=t.insert("polygon",":first-child").attr("points",a.map(function(t){return t.x+","+t.y}).join(" ")).attr("transform","translate("+-r/2+","+2*i/4+")");return n.intersect=function(t){return u.intersect.polygon(n,a,t)},o},b.arrows().none=function(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),a=i.append("path").attr("d","M 0 0 L 0 0 L 0 0 z");u.util.applyStyle(a,n[r+"Style"])},b.arrows().normal=function(t,e,n,r){t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowheadPath").style("stroke-width",1).style("stroke-dasharray","1,0")};var L=o.select("#"+n),k=o.select("#"+n+" g");for(b(k,_),k.selectAll("g.node").attr("title",function(){return r.getTooltip(this.id)}),l.useMaxWidth?(L.attr("height","100%"),L.attr("width",l.width),L.attr("viewBox","0 0 "+(_.graph().width+20)+" "+(_.graph().height+20)),L.attr("style","max-width:"+(_.graph().width+20)+"px;")):(L.attr("height",_.graph().height),void 0===l.width?L.attr("width",_.graph().width):L.attr("width",l.width),L.attr("viewBox","0 0 "+(_.graph().width+20)+" "+(_.graph().height+20))),r.indexNodes("subGraph"+m),m=0;m<p.length;m++)if(f=p[m],"undefined"!==f.title){var w=document.querySelectorAll("#"+n+" #"+f.id+" rect"),D=document.querySelectorAll("#"+n+" #"+f.id),x=w[0].x.baseVal.value,Y=w[0].y.baseVal.value,T=w[0].width.baseVal.value,A=o.select(D[0]),E=A.append("text");E.attr("x",x+T/2),E.attr("y",Y+14),E.attr("fill","black"),E.attr("stroke","none"),E.attr("id",n+"Text"),E.style("text-anchor","middle"),void 0===f.title?E.text("Undef"):E.text(f.title)}if(!l.htmlLabels){var S,F=document.querySelectorAll("#"+n+" .edgeLabel .label");for(S=0;S<F.length;S++){var C=F[m],j=C.getBBox(),H=document.createElementNS("http://www.w3.org/2000/svg","rect");H.setAttribute("rx",0),H.setAttribute("ry",0),H.setAttribute("width",j.width),H.setAttribute("height",j.height),H.setAttribute("style","fill:#e8e8e8;"),C.insertBefore(H,C.firstChild)}}}},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(174),dagre:n(32),intersect:n(227),render:n(229),util:n(7),version:n(242)}},function(t,e,n){const r=n(175);t.exports=r},function(t,e,n){var r=n(176);t.exports={Graph:r.Graph,json:n(178),alg:n(179),version:r.version}},function(t,e,n){t.exports={Graph:n(18),version:n(177)}},function(t,e){t.exports="2.1.1"},function(t,e,n){function r(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:i(t),edges:a(t)};return u.isUndefined(t.graph())||(e.value=u.clone(t.graph())),e}function i(t){return u.map(t.nodes(),function(e){var n=t.node(e),r=t.parent(e),i={v:e};return u.isUndefined(n)||(i.value=n),u.isUndefined(r)||(i.parent=r),i})}function a(t){return u.map(t.edges(),function(e){var n=t.edge(e),r={v:e.v,w:e.w};return u.isUndefined(e.name)||(r.name=e.name),u.isUndefined(n)||(r.value=n),r})}function o(t){var e=new s(t.options).setGraph(t.value);return u.each(t.nodes,function(t){e.setNode(t.v,t.value),t.parent&&e.setParent(t.v,t.parent)}),u.each(t.edges,function(t){e.setEdge({v:t.v,w:t.w,name:t.name},t.value)}),e}var u=n(5),s=n(18);t.exports={write:r,read:o}},function(t,e,n){t.exports={components:n(180),dijkstra:n(27),dijkstraAll:n(181),findCycles:n(182),floydWarshall:n(183),isAcyclic:n(184),postorder:n(185),preorder:n(186),prim:n(187),tarjan:n(29),topsort:n(30)}},function(t,e,n){function r(t){function e(a){i.has(r,a)||(r[a]=!0,n.push(a),i.each(t.successors(a),e),i.each(t.predecessors(a),e))}var n,r={},a=[];return i.each(t.nodes(),function(t){n=[],e(t),n.length&&a.push(n)}),a}var i=n(5);t.exports=r},function(t,e,n){function r(t,e,n){return a.transform(t.nodes(),function(r,a){r[a]=i(t,a,e,n)},{})}var i=n(27),a=n(5);t.exports=r},function(t,e,n){function r(t){return i.filter(a(t),function(e){return e.length>1||1===e.length&&t.hasEdge(e[0],e[0])})}var i=n(5),a=n(29);t.exports=r},function(t,e,n){function r(t,e,n){return i(t,e||o,n||function(e){return t.outEdges(e)})}function i(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],u=r.distance+i.distance;u<o.distance&&(o.distance=u,o.predecessor=i.predecessor)})})}),r}var a=n(5);t.exports=r;var o=a.constant(1)},function(t,e,n){function r(t){try{i(t)}catch(t){if(t instanceof i.CycleException)return!1;throw t}return!0}var i=n(30);t.exports=r},function(t,e,n){function r(t,e){return i(t,e,"post")}var i=n(31);t.exports=r},function(t,e,n){function r(t,e){return i(t,e,"pre")}var i=n(31);t.exports=r},function(t,e,n){function r(t,e){function n(t){var n=t.v===r?t.w:t.v,i=c.priority(n);if(void 0!==i){var a=e(t);a<i&&(s[n]=r,c.decrease(n,a))}}var r,u=new a,s={},c=new o;if(0===t.nodeCount())return u;i.each(t.nodes(),function(t){c.add(t,Number.POSITIVE_INFINITY),u.setNode(t)}),c.decrease(t.nodes()[0],0);for(var l=!1;c.size()>0;){if(r=c.removeMin(),i.has(s,r))u.setEdge(r,s[r]);else{if(l)throw new Error("Input graph is not connected: "+t);l=!0}t.nodeEdges(r).forEach(n)}return u}var i=n(5),a=n(18),o=n(28);t.exports=r},function(t,e,n){var r=n(189);t.exports={Graph:r.Graph,json:n(192),alg:n(193),version:r.version}},function(t,e,n){t.exports={Graph:n(19),version:n(191)}},function(t,e,n){(function(t,n){(function(){function r(t,e){if(t!==e){var n=null===t,r=t===D,i=t===t,a=null===e,o=e===D,u=e===e;if(t>e&&!a||!i||n&&!o&&u||r&&u)return 1;if(t<e&&!n||!u||a&&!r&&i||o&&i)return-1}return 0}function i(t,e,n){for(var r=t.length,i=n?r:-1;n?i--:++i<r;)if(e(t[i],i,t))return i;return-1}function a(t,e,n){if(e!==e)return m(t,n);for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}function o(t){return"function"==typeof t||!1}function u(t){return null==t?"":t+""}function s(t,e){for(var n=-1,r=t.length;++n<r&&e.indexOf(t.charAt(n))>-1;);return n}function c(t,e){for(var n=t.length;n--&&e.indexOf(t.charAt(n))>-1;);return n}function l(t,e){return r(t.criteria,e.criteria)||t.index-e.index}function d(t,e,n){for(var i=-1,a=t.criteria,o=e.criteria,u=a.length,s=n.length;++i<u;){var c=r(a[i],o[i]);if(c){if(i>=s)return c;var l=n[i];return c*("asc"===l||!0===l?1:-1)}}return t.index-e.index}function h(t){return Rt[t]}function f(t){return Wt[t]}function _(t,e,n){return e?t=Ut[t]:n&&(t=$t[t]),"\\"+t}function p(t){return"\\"+$t[t]}function m(t,e,n){for(var r=t.length,i=e+(n?0:-1);n?i--:++i<r;){var a=t[i];if(a!==a)return i}return-1}function y(t){return!!t&&"object"==typeof t}function g(t){return t<=160&&t>=9&&t<=13||32==t||160==t||5760==t||6158==t||t>=8192&&(t<=8202||8232==t||8233==t||8239==t||8287==t||12288==t||65279==t)}function v(t,e){for(var n=-1,r=t.length,i=-1,a=[];++n<r;)t[n]===e&&(t[n]=q,a[++i]=n);return a}function M(t,e){for(var n,r=-1,i=t.length,a=-1,o=[];++r<i;){var u=t[r],s=e?e(u,r,t):u;r&&n===s||(n=s,o[++a]=u)}return o}function b(t){for(var e=-1,n=t.length;++e<n&&g(t.charCodeAt(e)););return e}function L(t){for(var e=t.length;e--&&g(t.charCodeAt(e)););return e}function k(t){return zt[t]}function w(t){function e(t){if(y(t)&&!Au(t)&&!(t instanceof Rt)){if(t instanceof g)return t;if(to.call(t,"__chain__")&&to.call(t,"__wrapped__"))return fr(t)}return new g(t)}function n(){}function g(t,e,n){this.__wrapped__=t,this.__actions__=n||[],this.__chain__=!!e}function Rt(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=To,this.__views__=[]}function Wt(){var t=new Rt(this.__wrapped__);return t.__actions__=ne(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=ne(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=ne(this.__views__),t}function zt(){if(this.__filtered__){var t=new Rt(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function qt(){var t=this.__wrapped__.value(),e=this.__dir__,n=Au(t),r=e<0,i=n?t.length:0,a=$n(0,i,this.__views__),o=a.start,u=a.end,s=u-o,c=r?u:o-1,l=this.__iteratees__,d=l.length,h=0,f=ko(s,this.__takeCount__);if(!n||i<I||i==s&&f==s)return nn(r&&n?t.reverse():t,this.__actions__);var _=[];t:for(;s--&&h<f;){c+=e;for(var p=-1,m=t[c];++p<d;){var y=l[p],g=y.iteratee,v=y.type,M=g(m);if(v==W)m=M;else if(!M){if(v==R)continue t;break t}}_[h++]=m}return _}function Ut(){this.__data__={}}function $t(t){return this.has(t)&&delete this.__data__[t]}function Vt(t){return"__proto__"==t?D:this.__data__[t]}function Gt(t){return"__proto__"!=t&&to.call(this.__data__,t)}function Jt(t,e){return"__proto__"!=t&&(this.__data__[t]=e),this}function Zt(t){var e=t?t.length:0;for(this.data={hash:yo(null),set:new lo};e--;)this.push(t[e])}function Kt(t,e){var n=t.data;return("string"==typeof e||ji(e)?n.set.has(e):n.hash[e])?0:-1}function Xt(t){var e=this.data;"string"==typeof t||ji(t)?e.set.add(t):e.hash[t]=!0}function ee(t,e){for(var n=-1,r=t.length,i=-1,a=e.length,o=Ia(r+a);++n<r;)o[n]=t[n];for(;++i<a;)o[n++]=e[i];return o}function ne(t,e){var n=-1,r=t.length;for(e||(e=Ia(r));++n<r;)e[n]=t[n];return e}function re(t,e){for(var n=-1,r=t.length;++n<r&&!1!==e(t[n],n,t););return t}function ie(t,e){for(var n=t.length;n--&&!1!==e(t[n],n,t););return t}function ae(t,e){for(var n=-1,r=t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function oe(t,e,n,r){for(var i=-1,a=t.length,o=r,u=o;++i<a;){var s=t[i],c=+e(s);n(c,o)&&(o=c,u=s)}return u}function ue(t,e){for(var n=-1,r=t.length,i=-1,a=[];++n<r;){var o=t[n];e(o,n,t)&&(a[++i]=o)}return a}function se(t,e){for(var n=-1,r=t.length,i=Ia(r);++n<r;)i[n]=e(t[n],n,t);return i}function ce(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function le(t,e,n,r){var i=-1,a=t.length;for(r&&a&&(n=t[++i]);++i<a;)n=e(n,t[i],i,t);return n}function de(t,e,n,r){var i=t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function he(t,e){for(var n=-1,r=t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}function fe(t,e){for(var n=t.length,r=0;n--;)r+=+e(t[n])||0;return r}function _e(t,e){return t===D?e:t}function pe(t,e,n,r){return t!==D&&to.call(r,n)?t:e}function me(t,e,n){for(var r=-1,i=Iu(e),a=i.length;++r<a;){var o=i[r],u=t[o],s=n(u,e[o],o,t,e);(s===s?s===u:u!==u)&&(u!==D||o in t)||(t[o]=s)}return t}function ye(t,e){return null==e?t:ve(e,Iu(e),t)}function ge(t,e){for(var n=-1,r=null==t,i=!r&&Kn(t),a=i?t.length:0,o=e.length,u=Ia(o);++n<o;){var s=e[n];u[n]=i?Xn(s,a)?t[s]:D:r?D:t[s]}return u}function ve(t,e,n){n||(n={});for(var r=-1,i=e.length;++r<i;){var a=e[r];n[a]=t[a]}return n}function Me(t,e,n){var r=typeof t;return"function"==r?e===D?t:on(t,e,n):null==t?Ya:"object"==r?Be(t):e===D?Ca(t):Ie(t,e)}function be(t,e,n,r,i,a,o){var u;if(n&&(u=i?n(t,r,i):n(t)),u!==D)return u;if(!ji(t))return t;var s=Au(t);if(s){if(u=Vn(t),!e)return ne(t,u)}else{var c=no.call(t),l=c==Z;if(c!=X&&c!=U&&(!l||i))return It[c]?Jn(t,c,e):i?t:{};if(u=Gn(l?{}:t),!e)return ye(u,t)}a||(a=[]),o||(o=[]);for(var d=a.length;d--;)if(a[d]==t)return o[d];return a.push(t),o.push(u),(s?re:Se)(t,function(r,i){u[i]=be(r,e,n,i,t,a,o)}),u}function Le(t,e,n){if("function"!=typeof t)throw new Ja(z);return ho(function(){t.apply(D,n)},e)}function ke(t,e){var n=t?t.length:0,r=[];if(!n)return r;var i=-1,o=zn(),u=o==a,s=u&&e.length>=I?pn(e):null,c=e.length;s&&(o=Kt,u=!1,e=s);t:for(;++i<n;){var l=t[i];if(u&&l===l){for(var d=c;d--;)if(e[d]===l)continue t;r.push(l)}else o(e,l,0)<0&&r.push(l)}return r}function we(t,e){var n=!0;return Oo(t,function(t,r,i){return n=!!e(t,r,i)}),n}function De(t,e,n,r){var i=r,a=i;return Oo(t,function(t,o,u){var s=+e(t,o,u);(n(s,i)||s===r&&s===a)&&(i=s,a=t)}),a}function xe(t,e,n,r){var i=t.length;for(n=null==n?0:+n||0,n<0&&(n=-n>i?0:i+n),r=r===D||r>i?i:+r||0,r<0&&(r+=i),i=n>r?0:r>>>0,n>>>=0;n<i;)t[n++]=e;return t}function Ye(t,e){var n=[];return Oo(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function Te(t,e,n,r){var i;return n(t,function(t,n,a){if(e(t,n,a))return i=r?n:t,!1}),i}function Ae(t,e,n,r){r||(r=[]);for(var i=-1,a=t.length;++i<a;){var o=t[i];y(o)&&Kn(o)&&(n||Au(o)||Di(o))?e?Ae(o,e,n,r):ce(r,o):n||(r[r.length]=o)}return r}function Ee(t,e){return No(t,e,ta)}function Se(t,e){return No(t,e,Iu)}function Fe(t,e){return Bo(t,e,Iu)}function Ce(t,e){for(var n=-1,r=e.length,i=-1,a=[];++n<r;){var o=e[n];Ci(t[o])&&(a[++i]=o)}return a}function je(t,e,n){if(null!=t){n!==D&&n in dr(t)&&(e=[n]);for(var r=0,i=e.length;null!=t&&r<i;)t=t[e[r++]];return r&&r==i?t:D}}function He(t,e,n,r,i,a){return t===e||(null==t||null==e||!ji(t)&&!y(e)?t!==t&&e!==e:Oe(t,e,He,n,r,i,a))}function Oe(t,e,n,r,i,a,o){var u=Au(t),s=Au(e),c=$,l=$;u||(c=no.call(t),c==U?c=X:c!=X&&(u=zi(t))),s||(l=no.call(e),l==U?l=X:l!=X&&(s=zi(e)));var d=c==X,h=l==X,f=c==l;if(f&&!u&&!d)return Bn(t,e,c);if(!i){var _=d&&to.call(t,"__wrapped__"),p=h&&to.call(e,"__wrapped__");if(_||p)return n(_?t.value():t,p?e.value():e,r,i,a,o)}if(!f)return!1;a||(a=[]),o||(o=[]);for(var m=a.length;m--;)if(a[m]==t)return o[m]==e;a.push(t),o.push(e);var y=(u?Nn:In)(t,e,n,r,i,a,o);return a.pop(),o.pop(),y}function Pe(t,e,n){var r=e.length,i=r,a=!n;if(null==t)return!i;for(t=dr(t);r--;){var o=e[r];if(a&&o[2]?o[1]!==t[o[0]]:!(o[0]in t))return!1}for(;++r<i;){o=e[r];var u=o[0],s=t[u],c=o[1];if(a&&o[2]){if(s===D&&!(u in t))return!1}else{var l=n?n(s,c,u):D;if(!(l===D?He(c,s,n,!0):l))return!1}}return!0}function Ne(t,e){var n=-1,r=Kn(t)?Ia(t.length):[];return Oo(t,function(t,i,a){r[++n]=e(t,i,a)}),r}function Be(t){var e=qn(t);if(1==e.length&&e[0][2]){var n=e[0][0],r=e[0][1];return function(t){return null!=t&&(t[n]===r&&(r!==D||n in dr(t)))}}return function(t){return Pe(t,e)}}function Ie(t,e){var n=Au(t),r=tr(t)&&rr(e),i=t+"";return t=hr(t),function(a){if(null==a)return!1;var o=i;if(a=dr(a),(n||!r)&&!(o in a)){if(null==(a=1==t.length?a:je(a,Ge(t,0,-1))))return!1;o=xr(t),a=dr(a)}return a[o]===e?e!==D||o in a:He(e,a[o],D,!0)}}function Re(t,e,n,r,i){if(!ji(t))return t;var a=Kn(e)&&(Au(e)||zi(e)),o=a?D:Iu(e);return re(o||e,function(u,s){if(o&&(s=u,u=e[s]),y(u))r||(r=[]),i||(i=[]),We(t,e,s,Re,n,r,i);else{var c=t[s],l=n?n(c,u,s,t,e):D,d=l===D;d&&(l=u),l===D&&(!a||s in t)||!d&&(l===l?l===c:c!==c)||(t[s]=l)}}),t}function We(t,e,n,r,i,a,o){for(var u=a.length,s=e[n];u--;)if(a[u]==s)return void(t[n]=o[u]);var c=t[n],l=i?i(c,s,n,t,e):D,d=l===D;d&&(l=s,Kn(s)&&(Au(s)||zi(s))?l=Au(c)?c:Kn(c)?ne(c):[]:Ii(s)||Di(s)?l=Di(c)?Gi(c):Ii(c)?c:{}:d=!1),a.push(s),o.push(l),d?t[n]=r(l,s,i,a,o):(l===l?l!==c:c===c)&&(t[n]=l)}function ze(t){return function(e){return null==e?D:e[t]}}function qe(t){var e=t+"";return t=hr(t),function(n){return je(n,t,e)}}function Ue(t,e){for(var n=t?e.length:0;n--;){var r=e[n];if(r!=i&&Xn(r)){var i=r;fo.call(t,r,1)}}return t}function $e(t,e){return t+go(xo()*(e-t+1))}function Ve(t,e,n,r,i){return i(t,function(t,i,a){n=r?(r=!1,t):e(n,t,i,a)}),n}function Ge(t,e,n){var r=-1,i=t.length;e=null==e?0:+e||0,e<0&&(e=-e>i?0:i+e),n=n===D||n>i?i:+n||0,n<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var a=Ia(i);++r<i;)a[r]=t[r+e];return a}function Je(t,e){var n;return Oo(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function Ze(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}function Ke(t,e,n){var r=Rn(),i=-1;return e=se(e,function(t){return r(t)}),Ze(Ne(t,function(t){return{criteria:se(e,function(e){return e(t)}),index:++i,value:t}}),function(t,e){return d(t,e,n)})}function Xe(t,e){var n=0;return Oo(t,function(t,r,i){n+=+e(t,r,i)||0}),n}function Qe(t,e){var n=-1,r=zn(),i=t.length,o=r==a,u=o&&i>=I,s=u?pn():null,c=[];s?(r=Kt,o=!1):(u=!1,s=e?[]:c);t:for(;++n<i;){var l=t[n],d=e?e(l,n,t):l;if(o&&l===l){for(var h=s.length;h--;)if(s[h]===d)continue t;e&&s.push(d),c.push(l)}else r(s,d,0)<0&&((e||u)&&s.push(d),c.push(l))}return c}function tn(t,e){for(var n=-1,r=e.length,i=Ia(r);++n<r;)i[n]=t[e[n]];return i}function en(t,e,n,r){for(var i=t.length,a=r?i:-1;(r?a--:++a<i)&&e(t[a],a,t););return n?Ge(t,r?0:a,r?a+1:i):Ge(t,r?a+1:0,r?i:a)}function nn(t,e){var n=t;n instanceof Rt&&(n=n.value());for(var r=-1,i=e.length;++r<i;){var a=e[r];n=a.func.apply(a.thisArg,ce([n],a.args))}return n}function rn(t,e,n){var r=0,i=t?t.length:r;if("number"==typeof e&&e===e&&i<=So){for(;r<i;){var a=r+i>>>1,o=t[a];(n?o<=e:o<e)&&null!==o?r=a+1:i=a}return i}return an(t,e,Ya,n)}function an(t,e,n,r){e=n(e);for(var i=0,a=t?t.length:0,o=e!==e,u=null===e,s=e===D;i<a;){var c=go((i+a)/2),l=n(t[c]),d=l!==D,h=l===l;if(o)var f=h||r;else f=u?h&&d&&(r||null!=l):s?h&&(r||d):null!=l&&(r?l<=e:l<e);f?i=c+1:a=c}return ko(a,Eo)}function on(t,e,n){if("function"!=typeof t)return Ya;if(e===D)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 3:return function(n,r,i){return t.call(e,n,r,i)};case 4:return function(n,r,i,a){return t.call(e,n,r,i,a)};case 5:return function(n,r,i,a,o){return t.call(e,n,r,i,a,o)}}return function(){return t.apply(e,arguments)}}function un(t){var e=new ao(t.byteLength);return new _o(e).set(new _o(t)),e}function sn(t,e,n){for(var r=n.length,i=-1,a=Lo(t.length-r,0),o=-1,u=e.length,s=Ia(u+a);++o<u;)s[o]=e[o];for(;++i<r;)s[n[i]]=t[i];for(;a--;)s[o++]=t[i++];return s}function cn(t,e,n){for(var r=-1,i=n.length,a=-1,o=Lo(t.length-i,0),u=-1,s=e.length,c=Ia(o+s);++a<o;)c[a]=t[a];for(var l=a;++u<s;)c[l+u]=e[u];for(;++r<i;)c[l+n[r]]=t[a++];return c}function ln(t,e){return function(n,r,i){var a=e?e():{};if(r=Rn(r,i,3),Au(n))for(var o=-1,u=n.length;++o<u;){var s=n[o];t(a,s,r(s,o,n),n)}else Oo(n,function(e,n,i){t(a,e,r(e,n,i),i)});return a}}function dn(t){return yi(function(e,n){var r=-1,i=null==e?0:n.length,a=i>2?n[i-2]:D,o=i>2?n[2]:D,u=i>1?n[i-1]:D;for("function"==typeof a?(a=on(a,u,5),i-=2):(a="function"==typeof u?u:D,i-=a?1:0),o&&Qn(n[0],n[1],o)&&(a=i<3?D:a,i=1);++r<i;){var s=n[r];s&&t(e,s,a)}return e})}function hn(t,e){return function(n,r){var i=n?Wo(n):0;if(!nr(i))return t(n,r);for(var a=e?i:-1,o=dr(n);(e?a--:++a<i)&&!1!==r(o[a],a,o););return n}}function fn(t){return function(e,n,r){for(var i=dr(e),a=r(e),o=a.length,u=t?o:-1;t?u--:++u<o;){var s=a[u];if(!1===n(i[s],s,i))break}return e}}function _n(t,e){function n(){return(this&&this!==Qt&&this instanceof n?r:t).apply(e,arguments)}var r=yn(t);return n}function pn(t){return yo&&lo?new Zt(t):null}function mn(t){return function(e){for(var n=-1,r=wa(la(e)),i=r.length,a="";++n<i;)a=t(a,r[n],n);return a}}function yn(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Ho(t.prototype),r=t.apply(n,e);return ji(r)?r:n}}function gn(t){function e(n,r,i){i&&Qn(n,r,i)&&(r=D);var a=Pn(n,t,D,D,D,D,D,r);return a.placeholder=e.placeholder,a}return e}function vn(t,e){return yi(function(n){var r=n[0];return null==r?r:(n.push(e),t.apply(D,n))})}function Mn(t,e){return function(n,r,i){if(i&&Qn(n,r,i)&&(r=D),r=Rn(r,i,3),1==r.length){n=Au(n)?n:lr(n);var a=oe(n,r,t,e);if(!n.length||a!==e)return a}return De(n,r,t,e)}}function bn(t,e){return function(n,r,a){if(r=Rn(r,a,3),Au(n)){var o=i(n,r,e);return o>-1?n[o]:D}return Te(n,r,t)}}function Ln(t){return function(e,n,r){return e&&e.length?(n=Rn(n,r,3),i(e,n,t)):-1}}function kn(t){return function(e,n,r){return n=Rn(n,r,3),Te(e,n,t,!0)}}function wn(t){return function(){for(var e,n=arguments.length,r=t?n:-1,i=0,a=Ia(n);t?r--:++r<n;){var o=a[i++]=arguments[r];if("function"!=typeof o)throw new Ja(z);!e&&g.prototype.thru&&"wrapper"==Wn(o)&&(e=new g([],!0))}for(r=e?-1:n;++r<n;){o=a[r];var u=Wn(o),s="wrapper"==u?Ro(o):D;e=s&&er(s[0])&&s[1]==(j|E|F|H)&&!s[4].length&&1==s[9]?e[Wn(s[0])].apply(e,s[3]):1==o.length&&er(o)?e[u]():e.thru(o)}return function(){var t=arguments,r=t[0];if(e&&1==t.length&&Au(r)&&r.length>=I)return e.plant(r).value();for(var i=0,o=n?a[i].apply(this,t):r;++i<n;)o=a[i].call(this,o);return o}}}function Dn(t,e){return function(n,r,i){return"function"==typeof r&&i===D&&Au(n)?t(n,r):e(n,on(r,i,3))}}function xn(t){return function(e,n,r){return"function"==typeof n&&r===D||(n=on(n,r,3)),t(e,n,ta)}}function Yn(t){return function(e,n,r){return"function"==typeof n&&r===D||(n=on(n,r,3)),t(e,n)}}function Tn(t){return function(e,n,r){var i={};return n=Rn(n,r,3),Se(e,function(e,r,a){var o=n(e,r,a);r=t?o:r,e=t?e:o,i[r]=e}),i}}function An(t){return function(e,n,r){return e=u(e),(t?e:"")+Cn(e,n,r)+(t?"":e)}}function En(t){var e=yi(function(n,r){var i=v(r,e.placeholder);return Pn(n,t,D,r,i)});return e}function Sn(t,e){return function(n,r,i,a){var o=arguments.length<3;return"function"==typeof r&&a===D&&Au(n)?t(n,r,i,o):Ve(n,Rn(r,a,4),i,o,e)}}function Fn(t,e,n,r,i,a,o,u,s,c){function l(){for(var g=arguments.length,M=g,b=Ia(g);M--;)b[M]=arguments[M];if(r&&(b=sn(b,r,i)),a&&(b=cn(b,a,o)),_||m){var L=l.placeholder,k=v(b,L);if((g-=k.length)<c){var w=u?ne(u):D,x=Lo(c-g,0),A=_?k:D,E=_?D:k,S=_?b:D,j=_?D:b;e|=_?F:C,e&=~(_?C:F),p||(e&=~(Y|T));var H=[t,e,n,S,A,j,E,w,s,x],O=Fn.apply(D,H);return er(t)&&zo(O,H),O.placeholder=L,O}}var P=h?n:this,N=f?P[t]:t;return u&&(b=sr(b,u)),d&&s<b.length&&(b.length=s),this&&this!==Qt&&this instanceof l&&(N=y||yn(t)),N.apply(P,b)}var d=e&j,h=e&Y,f=e&T,_=e&E,p=e&A,m=e&S,y=f?D:yn(t);return l}function Cn(t,e,n){var r=t.length;if(e=+e,r>=e||!Mo(e))return"";var i=e-r;return n=null==n?" ":n+"",ma(n,mo(i/n.length)).slice(0,i)}function jn(t,e,n,r){function i(){for(var e=-1,u=arguments.length,s=-1,c=r.length,l=Ia(c+u);++s<c;)l[s]=r[s];for(;u--;)l[s++]=arguments[++e];return(this&&this!==Qt&&this instanceof i?o:t).apply(a?n:this,l)}var a=e&Y,o=yn(t);return i}function Hn(t){var e=qa[t];return function(t,n){return n=n===D?0:+n||0,n?(n=so(10,n),e(t*n)/n):e(t)}}function On(t){return function(e,n,r,i){var a=Rn(r);return null==r&&a===Me?rn(e,n,t):an(e,n,a(r,i,1),t)}}function Pn(t,e,n,r,i,a,o,u){var s=e&T;if(!s&&"function"!=typeof t)throw new Ja(z);var c=r?r.length:0;if(c||(e&=~(F|C),r=i=D),c-=i?i.length:0,e&C){var l=r,d=i;r=i=D}var h=s?D:Ro(t),f=[t,e,n,r,i,l,d,a,o,u];if(h&&(ir(f,h),e=f[1],u=f[9]),f[9]=null==u?s?0:t.length:Lo(u-c,0)||0,e==Y)var _=_n(f[0],f[2]);else _=e!=F&&e!=(Y|F)||f[4].length?Fn.apply(D,f):jn.apply(D,f);return(h?Io:zo)(_,f)}function Nn(t,e,n,r,i,a,o){var u=-1,s=t.length,c=e.length;if(s!=c&&!(i&&c>s))return!1;for(;++u<s;){var l=t[u],d=e[u],h=r?r(i?d:l,i?l:d,u):D;if(h!==D){if(h)continue;return!1}if(i){if(!he(e,function(t){return l===t||n(l,t,r,i,a,o)}))return!1}else if(l!==d&&!n(l,d,r,i,a,o))return!1}return!0}function Bn(t,e,n){switch(n){case V:case G:return+t==+e;case J:return t.name==e.name&&t.message==e.message;case K:return t!=+t?e!=+e:t==+e;case Q:case tt:return t==e+""}return!1}function In(t,e,n,r,i,a,o){var u=Iu(t),s=u.length;if(s!=Iu(e).length&&!i)return!1;for(var c=s;c--;){var l=u[c];if(!(i?l in e:to.call(e,l)))return!1}for(var d=i;++c<s;){l=u[c];var h=t[l],f=e[l],_=r?r(i?f:h,i?h:f,l):D;if(!(_===D?n(h,f,r,i,a,o):_))return!1;d||(d="constructor"==l)}if(!d){var p=t.constructor,m=e.constructor;if(p!=m&&"constructor"in t&&"constructor"in e&&!("function"==typeof p&&p instanceof p&&"function"==typeof m&&m instanceof m))return!1}return!0}function Rn(t,n,r){var i=e.callback||Da;return i=i===Da?Me:i,r?i(t,n,r):i}function Wn(t){for(var e=t.name,n=jo[e],r=n?n.length:0;r--;){var i=n[r],a=i.func;if(null==a||a==t)return i.name}return e}function zn(t,n,r){var i=e.indexOf||wr;return i=i===wr?a:i,t?i(t,n,r):i}function qn(t){for(var e=ea(t),n=e.length;n--;)e[n][2]=rr(e[n][1]);return e}function Un(t,e){var n=null==t?D:t[e];return Pi(n)?n:D}function $n(t,e,n){for(var r=-1,i=n.length;++r<i;){var a=n[r],o=a.size;switch(a.type){case"drop":t+=o;break;case"dropRight":e-=o;break;case"take":e=ko(e,t+o);break;case"takeRight":t=Lo(t,e-o)}}return{start:t,end:e}}function Vn(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&to.call(t,"index")&&(n.index=t.index,n.input=t.input),n}function Gn(t){var e=t.constructor;return"function"==typeof e&&e instanceof e||(e=$a),new e}function Jn(t,e,n){var r=t.constructor;switch(e){case et:return un(t);case V:case G:return new r(+t);case nt:case rt:case it:case at:case ot:case ut:case st:case ct:case lt:var i=t.buffer;return new r(n?un(i):i,t.byteOffset,t.length);case K:case tt:return new r(t);case Q:var a=new r(t.source,At.exec(t));a.lastIndex=t.lastIndex}return a}function Zn(t,e,n){null==t||tr(e,t)||(e=hr(e),t=1==e.length?t:je(t,Ge(e,0,-1)),e=xr(e));var r=null==t?t:t[e];return null==r?D:r.apply(t,n)}function Kn(t){return null!=t&&nr(Wo(t))}function Xn(t,e){return t="number"==typeof t||Ft.test(t)?+t:-1,e=null==e?Fo:e,t>-1&&t%1==0&&t<e}function Qn(t,e,n){if(!ji(n))return!1;var r=typeof e;if("number"==r?Kn(n)&&Xn(e,n.length):"string"==r&&e in n){var i=n[e];return t===t?t===i:i!==i}return!1}function tr(t,e){var n=typeof t;return!!("string"==n&&Lt.test(t)||"number"==n)||!Au(t)&&(!bt.test(t)||null!=e&&t in dr(e))}function er(t){var n=Wn(t);if(!(n in Rt.prototype))return!1;var r=e[n];if(t===r)return!0;var i=Ro(r);return!!i&&t===i[0]}function nr(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=Fo}function rr(t){return t===t&&!ji(t)}function ir(t,e){var n=t[1],r=e[1],i=n|r,a=i<j,o=r==j&&n==E||r==j&&n==H&&t[7].length<=e[8]||r==(j|H)&&n==E;if(!a&&!o)return t;r&Y&&(t[2]=e[2],i|=n&Y?0:A);var u=e[3];if(u){var s=t[3];t[3]=s?sn(s,u,e[4]):ne(u),t[4]=s?v(t[3],q):ne(e[4])}return u=e[5],u&&(s=t[5],t[5]=s?cn(s,u,e[6]):ne(u),t[6]=s?v(t[5],q):ne(e[6])),u=e[7],u&&(t[7]=ne(u)),r&j&&(t[8]=null==t[8]?e[8]:ko(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i,t}function ar(t,e){return t===D?e:Eu(t,e,ar)}function or(t,e){t=dr(t);for(var n=-1,r=e.length,i={};++n<r;){var a=e[n];a in t&&(i[a]=t[a])}return i}function ur(t,e){var n={};return Ee(t,function(t,r,i){e(t,r,i)&&(n[r]=t)}),n}function sr(t,e){for(var n=t.length,r=ko(e.length,n),i=ne(t);r--;){var a=e[r];t[r]=Xn(a,n)?i[a]:D}return t}function cr(t){for(var e=ta(t),n=e.length,r=n&&t.length,i=!!r&&nr(r)&&(Au(t)||Di(t)),a=-1,o=[];++a<n;){var u=e[a];(i&&Xn(u,r)||to.call(t,u))&&o.push(u)}return o}function lr(t){return null==t?[]:Kn(t)?ji(t)?t:$a(t):aa(t)}function dr(t){return ji(t)?t:$a(t)}function hr(t){if(Au(t))return t;var e=[];return u(t).replace(kt,function(t,n,r,i){e.push(r?i.replace(Yt,"$1"):n||t)}),e}function fr(t){return t instanceof Rt?t.clone():new g(t.__wrapped__,t.__chain__,ne(t.__actions__))}function _r(t,e,n){e=(n?Qn(t,e,n):null==e)?1:Lo(go(e)||1,1);for(var r=0,i=t?t.length:0,a=-1,o=Ia(mo(i/e));r<i;)o[++a]=Ge(t,r,r+=e);return o}function pr(t){for(var e=-1,n=t?t.length:0,r=-1,i=[];++e<n;){var a=t[e];a&&(i[++r]=a)}return i}function mr(t,e,n){return(t?t.length:0)?((n?Qn(t,e,n):null==e)&&(e=1),Ge(t,e<0?0:e)):[]}function yr(t,e,n){var r=t?t.length:0;return r?((n?Qn(t,e,n):null==e)&&(e=1),e=r-(+e||0),Ge(t,0,e<0?0:e)):[]}function gr(t,e,n){return t&&t.length?en(t,Rn(e,n,3),!0,!0):[]}function vr(t,e,n){return t&&t.length?en(t,Rn(e,n,3),!0):[]}function Mr(t,e,n,r){var i=t?t.length:0;return i?(n&&"number"!=typeof n&&Qn(t,e,n)&&(n=0,r=i),xe(t,e,n,r)):[]}function br(t){return t?t[0]:D}function Lr(t,e,n){var r=t?t.length:0;return n&&Qn(t,e,n)&&(e=!1),r?Ae(t,e):[]}function kr(t){return(t?t.length:0)?Ae(t,!0):[]}function wr(t,e,n){var r=t?t.length:0;if(!r)return-1;if("number"==typeof n)n=n<0?Lo(r+n,0):n;else if(n){var i=rn(t,e);return i<r&&(e===e?e===t[i]:t[i]!==t[i])?i:-1}return a(t,e,n||0)}function Dr(t){return yr(t,1)}function xr(t){var e=t?t.length:0;return e?t[e-1]:D}function Yr(t,e,n){var r=t?t.length:0;if(!r)return-1;var i=r;if("number"==typeof n)i=(n<0?Lo(r+n,0):ko(n||0,r-1))+1;else if(n){i=rn(t,e,!0)-1;var a=t[i];return(e===e?e===a:a!==a)?i:-1}if(e!==e)return m(t,i,!0);for(;i--;)if(t[i]===e)return i;return-1}function Tr(){var t=arguments,e=t[0];if(!e||!e.length)return e;for(var n=0,r=zn(),i=t.length;++n<i;)for(var a=0,o=t[n];(a=r(e,o,a))>-1;)fo.call(e,a,1);return e}function Ar(t,e,n){var r=[];if(!t||!t.length)return r;var i=-1,a=[],o=t.length;for(e=Rn(e,n,3);++i<o;){var u=t[i];e(u,i,t)&&(r.push(u),a.push(i))}return Ue(t,a),r}function Er(t){return mr(t,1)}function Sr(t,e,n){var r=t?t.length:0;return r?(n&&"number"!=typeof n&&Qn(t,e,n)&&(e=0,n=r),Ge(t,e,n)):[]}function Fr(t,e,n){return(t?t.length:0)?((n?Qn(t,e,n):null==e)&&(e=1),Ge(t,0,e<0?0:e)):[]}function Cr(t,e,n){var r=t?t.length:0;return r?((n?Qn(t,e,n):null==e)&&(e=1),e=r-(+e||0),Ge(t,e<0?0:e)):[]}function jr(t,e,n){return t&&t.length?en(t,Rn(e,n,3),!1,!0):[]}function Hr(t,e,n){return t&&t.length?en(t,Rn(e,n,3)):[]}function Or(t,e,n,r){if(!(t?t.length:0))return[];null!=e&&"boolean"!=typeof e&&(r=n,n=Qn(t,e,r)?D:e,e=!1);var i=Rn();return null==n&&i===Me||(n=i(n,r,3)),e&&zn()==a?M(t,n):Qe(t,n)}function Pr(t){if(!t||!t.length)return[];var e=-1,n=0;t=ue(t,function(t){if(Kn(t))return n=Lo(t.length,n),!0});for(var r=Ia(n);++e<n;)r[e]=se(t,ze(e));return r}function Nr(t,e,n){if(!(t?t.length:0))return[];var r=Pr(t);return null==e?r:(e=on(e,n,4),se(r,function(t){return le(t,e,D,!0)}))}function Br(){for(var t=-1,e=arguments.length;++t<e;){var n=arguments[t];if(Kn(n))var r=r?ce(ke(r,n),ke(n,r)):n}return r?Qe(r):[]}function Ir(t,e){var n=-1,r=t?t.length:0,i={};for(!r||e||Au(t[0])||(e=[]);++n<r;){var a=t[n];e?i[a]=e[n]:a&&(i[a[0]]=a[1])}return i}function Rr(t){var n=e(t);return n.__chain__=!0,n}function Wr(t,e,n){return e.call(n,t),t}function zr(t,e,n){return e.call(n,t)}function qr(){return Rr(this)}function Ur(){return new g(this.value(),this.__chain__)}function $r(t){for(var e,r=this;r instanceof n;){var i=fr(r);e?a.__wrapped__=i:e=i;var a=i;r=r.__wrapped__}return a.__wrapped__=t,e}function Vr(){var t=this.__wrapped__,e=function(t){return n&&n.__dir__<0?t:t.reverse()};if(t instanceof Rt){var n=t;return this.__actions__.length&&(n=new Rt(this)),n=n.reverse(),n.__actions__.push({func:zr,args:[e],thisArg:D}),new g(n,this.__chain__)}return this.thru(e)}function Gr(){return this.value()+""}function Jr(){return nn(this.__wrapped__,this.__actions__)}function Zr(t,e,n){var r=Au(t)?ae:we;return n&&Qn(t,e,n)&&(e=D),"function"==typeof e&&n===D||(e=Rn(e,n,3)),r(t,e)}function Kr(t,e,n){var r=Au(t)?ue:Ye;return e=Rn(e,n,3),r(t,e)}function Xr(t,e){return iu(t,Be(e))}function Qr(t,e,n,r){var i=t?Wo(t):0;return nr(i)||(t=aa(t),i=t.length),n="number"!=typeof n||r&&Qn(e,n,r)?0:n<0?Lo(i+n,0):n||0,"string"==typeof t||!Au(t)&&Wi(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&zn(t,e,n)>-1}function ti(t,e,n){var r=Au(t)?se:Ne;return e=Rn(e,n,3),r(t,e)}function ei(t,e){return ti(t,Ca(e))}function ni(t,e,n){var r=Au(t)?ue:Ye;return e=Rn(e,n,3),r(t,function(t,n,r){return!e(t,n,r)})}function ri(t,e,n){if(n?Qn(t,e,n):null==e){t=lr(t);var r=t.length;return r>0?t[$e(0,r-1)]:D}var i=-1,a=Vi(t),r=a.length,o=r-1;for(e=ko(e<0?0:+e||0,r);++i<e;){var u=$e(i,o),s=a[u];a[u]=a[i],a[i]=s}return a.length=e,a}function ii(t){return ri(t,To)}function ai(t){var e=t?Wo(t):0;return nr(e)?e:Iu(t).length}function oi(t,e,n){var r=Au(t)?he:Je;return n&&Qn(t,e,n)&&(e=D),"function"==typeof e&&n===D||(e=Rn(e,n,3)),r(t,e)}function ui(t,e,n){if(null==t)return[];n&&Qn(t,e,n)&&(e=D);var r=-1;return e=Rn(e,n,3),Ze(Ne(t,function(t,n,i){return{criteria:e(t,n,i),index:++r,value:t}}),l)}function si(t,e,n,r){return null==t?[]:(r&&Qn(e,n,r)&&(n=D),Au(e)||(e=null==e?[]:[e]),Au(n)||(n=null==n?[]:[n]),Ke(t,e,n))}function ci(t,e){return Kr(t,Be(e))}function li(t,e){if("function"!=typeof e){if("function"!=typeof t)throw new Ja(z);var n=t;t=e,e=n}return t=Mo(t=+t)?t:0,function(){if(--t<1)return e.apply(this,arguments)}}function di(t,e,n){return n&&Qn(t,e,n)&&(e=D),e=t&&null==e?t.length:Lo(+e||0,0),Pn(t,j,D,D,D,D,e)}function hi(t,e){var n;if("function"!=typeof e){if("function"!=typeof t)throw new Ja(z);var r=t;t=e,e=r}return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=D),n}}function fi(t,e,n){function r(){f&&oo(f),c&&oo(c),p=0,c=f=_=D}function i(e,n){n&&oo(n),c=f=_=D,e&&(p=pu(),l=t.apply(h,s),f||c||(s=h=D))}function a(){var t=e-(pu()-d);t<=0||t>e?i(_,c):f=ho(a,t)}function o(){i(y,f)}function u(){if(s=arguments,d=pu(),h=this,_=y&&(f||!g),!1===m)var n=g&&!f;else{c||g||(p=d);var r=m-(d-p),i=r<=0||r>m;i?(c&&(c=oo(c)),p=d,l=t.apply(h,s)):c||(c=ho(o,r))}return i&&f?f=oo(f):f||e===m||(f=ho(a,e)),n&&(i=!0,l=t.apply(h,s)),!i||f||c||(s=h=D),l}var s,c,l,d,h,f,_,p=0,m=!1,y=!0;if("function"!=typeof t)throw new Ja(z);if(e=e<0?0:+e||0,!0===n){var g=!0;y=!1}else ji(n)&&(g=!!n.leading,m="maxWait"in n&&Lo(+n.maxWait||0,e),y="trailing"in n?!!n.trailing:y);return u.cancel=r,u}function _i(t,e){if("function"!=typeof t||e&&"function"!=typeof e)throw new Ja(z);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=t.apply(this,r);return n.cache=a.set(i,o),o};return n.cache=new _i.Cache,n}function pi(t){if("function"!=typeof t)throw new Ja(z);return function(){return!t.apply(this,arguments)}}function mi(t){return hi(2,t)}function yi(t,e){if("function"!=typeof t)throw new Ja(z);return e=Lo(e===D?t.length-1:+e||0,0),function(){for(var n=arguments,r=-1,i=Lo(n.length-e,0),a=Ia(i);++r<i;)a[r]=n[e+r];switch(e){case 0:return t.call(this,a);case 1:return t.call(this,n[0],a);case 2:return t.call(this,n[0],n[1],a)}var o=Ia(e+1);for(r=-1;++r<e;)o[r]=n[r];return o[e]=a,t.apply(this,o)}}function gi(t){if("function"!=typeof t)throw new Ja(z);return function(e){return t.apply(this,e)}}function vi(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new Ja(z);return!1===n?r=!1:ji(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),fi(t,e,{leading:r,maxWait:+e,trailing:i})}function Mi(t,e){return e=null==e?Ya:e,Pn(e,F,D,[t],[])}function bi(t,e,n,r){return e&&"boolean"!=typeof e&&Qn(t,e,n)?e=!1:"function"==typeof e&&(r=n,n=e,e=!1),"function"==typeof n?be(t,e,on(n,r,1)):be(t,e)}function Li(t,e,n){return"function"==typeof e?be(t,!0,on(e,n,1)):be(t,!0)}function ki(t,e){return t>e}function wi(t,e){return t>=e}function Di(t){return y(t)&&Kn(t)&&to.call(t,"callee")&&!co.call(t,"callee")}function xi(t){return!0===t||!1===t||y(t)&&no.call(t)==V}function Yi(t){return y(t)&&no.call(t)==G}function Ti(t){return!!t&&1===t.nodeType&&y(t)&&!Ii(t)}function Ai(t){return null==t||(Kn(t)&&(Au(t)||Wi(t)||Di(t)||y(t)&&Ci(t.splice))?!t.length:!Iu(t).length)}function Ei(t,e,n,r){n="function"==typeof n?on(n,r,3):D;var i=n?n(t,e):D;return i===D?He(t,e,n):!!i}function Si(t){return y(t)&&"string"==typeof t.message&&no.call(t)==J}function Fi(t){return"number"==typeof t&&Mo(t)}function Ci(t){return ji(t)&&no.call(t)==Z}function ji(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Hi(t,e,n,r){return n="function"==typeof n?on(n,r,3):D,Pe(t,qn(e),n)}function Oi(t){return Bi(t)&&t!=+t}function Pi(t){return null!=t&&(Ci(t)?io.test(Qa.call(t)):y(t)&&St.test(t))}function Ni(t){return null===t}function Bi(t){return"number"==typeof t||y(t)&&no.call(t)==K}function Ii(t){var e;if(!y(t)||no.call(t)!=X||Di(t)||!to.call(t,"constructor")&&"function"==typeof(e=t.constructor)&&!(e instanceof e))return!1;var n;return Ee(t,function(t,e){n=e}),n===D||to.call(t,n)}function Ri(t){return ji(t)&&no.call(t)==Q}function Wi(t){return"string"==typeof t||y(t)&&no.call(t)==tt}function zi(t){return y(t)&&nr(t.length)&&!!Bt[no.call(t)]}function qi(t){return t===D}function Ui(t,e){return t<e}function $i(t,e){return t<=e}function Vi(t){var e=t?Wo(t):0;return nr(e)?e?ne(t):[]:aa(t)}function Gi(t){return ve(t,ta(t))}function Ji(t,e,n){var r=Ho(t);return n&&Qn(t,e,n)&&(e=D),e?ye(r,e):r}function Zi(t){return Ce(t,ta(t))}function Ki(t,e,n){var r=null==t?D:je(t,hr(e),e+"");return r===D?n:r}function Xi(t,e){if(null==t)return!1;var n=to.call(t,e);if(!n&&!tr(e)){if(e=hr(e),null==(t=1==e.length?t:je(t,Ge(e,0,-1))))return!1;e=xr(e),n=to.call(t,e)}return n||nr(t.length)&&Xn(e,t.length)&&(Au(t)||Di(t))}function Qi(t,e,n){n&&Qn(t,e,n)&&(e=D);for(var r=-1,i=Iu(t),a=i.length,o={};++r<a;){var u=i[r],s=t[u];e?to.call(o,s)?o[s].push(u):o[s]=[u]:o[s]=u}return o}function ta(t){if(null==t)return[];ji(t)||(t=$a(t));var e=t.length;e=e&&nr(e)&&(Au(t)||Di(t))&&e||0;for(var n=t.constructor,r=-1,i="function"==typeof n&&n.prototype===t,a=Ia(e),o=e>0;++r<e;)a[r]=r+"";for(var u in t)o&&Xn(u,e)||"constructor"==u&&(i||!to.call(t,u))||a.push(u);return a}function ea(t){t=dr(t);for(var e=-1,n=Iu(t),r=n.length,i=Ia(r);++e<r;){var a=n[e];i[e]=[a,t[a]]}return i}function na(t,e,n){var r=null==t?D:t[e];return r===D&&(null==t||tr(e,t)||(e=hr(e),t=1==e.length?t:je(t,Ge(e,0,-1)),r=null==t?D:t[xr(e)]),r=r===D?n:r),Ci(r)?r.call(t):r}function ra(t,e,n){if(null==t)return t;var r=e+"";e=null!=t[r]||tr(e,t)?[r]:hr(e);for(var i=-1,a=e.length,o=a-1,u=t;null!=u&&++i<a;){var s=e[i];ji(u)&&(i==o?u[s]=n:null==u[s]&&(u[s]=Xn(e[i+1])?[]:{})),u=u[s]}return t}function ia(t,e,n,r){var i=Au(t)||zi(t);if(e=Rn(e,r,4),null==n)if(i||ji(t)){var a=t.constructor;n=i?Au(t)?new a:[]:Ho(Ci(a)?a.prototype:D)}else n={};return(i?re:Se)(t,function(t,r,i){return e(n,t,r,i)}),n}function aa(t){return tn(t,Iu(t))}function oa(t){return tn(t,ta(t))}function ua(t,e,n){return e=+e||0,n===D?(n=e,e=0):n=+n||0,t>=ko(e,n)&&t<Lo(e,n)}function sa(t,e,n){n&&Qn(t,e,n)&&(e=n=D);var r=null==t,i=null==e;if(null==n&&(i&&"boolean"==typeof t?(n=t,t=1):"boolean"==typeof e&&(n=e,i=!0)),r&&i&&(e=1,i=!1),t=+t||0,i?(e=t,t=0):e=+e||0,n||t%1||e%1){var a=xo();return ko(t+a*(e-t+uo("1e-"+((a+"").length-1))),e)}return $e(t,e)}function ca(t){return(t=u(t))&&t.charAt(0).toUpperCase()+t.slice(1)}function la(t){return(t=u(t))&&t.replace(Ct,h).replace(xt,"")}function da(t,e,n){t=u(t),e+="";var r=t.length;return n=n===D?r:ko(n<0?0:+n||0,r),(n-=e.length)>=0&&t.indexOf(e,n)==n}function ha(t){return t=u(t),t&&yt.test(t)?t.replace(pt,f):t}function fa(t){return t=u(t),t&&Dt.test(t)?t.replace(wt,_):t||"(?:)"}function _a(t,e,n){t=u(t),e=+e;var r=t.length;if(r>=e||!Mo(e))return t;var i=(e-r)/2,a=go(i);return n=Cn("",mo(i),n),n.slice(0,a)+t+n}function pa(t,e,n){return(n?Qn(t,e,n):null==e)?e=0:e&&(e=+e),t=va(t),Do(t,e||(Et.test(t)?16:10))}function ma(t,e){var n="";if(t=u(t),(e=+e)<1||!t||!Mo(e))return n;do{e%2&&(n+=t),e=go(e/2),t+=t}while(e);return n}function ya(t,e,n){return t=u(t),n=null==n?0:ko(n<0?0:+n||0,t.length),t.lastIndexOf(e,n)==n}function ga(t,n,r){var i=e.templateSettings;r&&Qn(t,n,r)&&(n=r=D),t=u(t),n=me(ye({},r||n),i,pe);var a,o,s=me(ye({},n.imports),i.imports,pe),c=Iu(s),l=tn(s,c),d=0,h=n.interpolate||jt,f="__p += '",_=Va((n.escape||jt).source+"|"+h.source+"|"+(h===Mt?Tt:jt).source+"|"+(n.evaluate||jt).source+"|$","g"),m="//# sourceURL="+("sourceURL"in n?n.sourceURL:"lodash.templateSources["+ ++Nt+"]")+"\n";t.replace(_,function(e,n,r,i,u,s){return r||(r=i),f+=t.slice(d,s).replace(Ht,p),n&&(a=!0,f+="' +\n__e("+n+") +\n'"),u&&(o=!0,f+="';\n"+u+";\n__p += '"),r&&(f+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),d=s+e.length,e}),f+="';\n";var y=n.variable;y||(f="with (obj) {\n"+f+"\n}\n"),f=(o?f.replace(dt,""):f).replace(ht,"$1").replace(ft,"$1;"),f="function("+(y||"obj")+") {\n"+(y?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(a?", __e = _.escape":"")+(o?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+f+"return __p\n}";var g=Ku(function(){return za(c,m+"return "+f).apply(D,l)});if(g.source=f,Si(g))throw g;return g}function va(t,e,n){var r=t;return(t=u(t))?(n?Qn(r,e,n):null==e)?t.slice(b(t),L(t)+1):(e+="",t.slice(s(t,e),c(t,e)+1)):t}function Ma(t,e,n){var r=t;return t=u(t),t?(n?Qn(r,e,n):null==e)?t.slice(b(t)):t.slice(s(t,e+"")):t}function ba(t,e,n){var r=t;return t=u(t),t?(n?Qn(r,e,n):null==e)?t.slice(0,L(t)+1):t.slice(0,c(t,e+"")+1):t}function La(t,e,n){n&&Qn(t,e,n)&&(e=D);var r=O,i=P;if(null!=e)if(ji(e)){var a="separator"in e?e.separator:a;r="length"in e?+e.length||0:r,i="omission"in e?u(e.omission):i}else r=+e||0;if(t=u(t),r>=t.length)return t;var o=r-i.length;if(o<1)return i;var s=t.slice(0,o);if(null==a)return s+i;if(Ri(a)){if(t.slice(o).search(a)){var c,l,d=t.slice(0,o);for(a.global||(a=Va(a.source,(At.exec(a)||"")+"g")),a.lastIndex=0;c=a.exec(d);)l=c.index;s=s.slice(0,null==l?o:l)}}else if(t.indexOf(a,o)!=o){var h=s.lastIndexOf(a);h>-1&&(s=s.slice(0,h))}return s+i}function ka(t){return t=u(t),t&&mt.test(t)?t.replace(_t,k):t}function wa(t,e,n){return n&&Qn(t,e,n)&&(e=D),t=u(t),t.match(e||Ot)||[]}function Da(t,e,n){return n&&Qn(t,e,n)&&(e=D),y(t)?Ta(t):Me(t,e)}function xa(t){return function(){return t}}function Ya(t){return t}function Ta(t){return Be(be(t,!0))}function Aa(t,e){return Ie(t,be(e,!0))}function Ea(t,e,n){if(null==n){var r=ji(e),i=r?Iu(e):D,a=i&&i.length?Ce(e,i):D;(a?a.length:r)||(a=!1,n=e,e=t,t=this)}a||(a=Ce(e,Iu(e)));var o=!0,u=-1,s=Ci(t),c=a.length;!1===n?o=!1:ji(n)&&"chain"in n&&(o=n.chain);for(;++u<c;){var l=a[u],d=e[l];t[l]=d,s&&(t.prototype[l]=function(e){return function(){var n=this.__chain__;if(o||n){var r=t(this.__wrapped__);return(r.__actions__=ne(this.__actions__)).push({func:e,args:arguments,thisArg:t}),r.__chain__=n,r}return e.apply(t,ce([this.value()],arguments))}}(d))}return t}function Sa(){return Qt._=ro,this}function Fa(){}function Ca(t){return tr(t)?ze(t):qe(t)}function ja(t){return function(e){return je(t,hr(e),e+"")}}function Ha(t,e,n){n&&Qn(t,e,n)&&(e=n=D),t=+t||0,n=null==n?1:+n||0,null==e?(e=t,t=0):e=+e||0;for(var r=-1,i=Lo(mo((e-t)/(n||1)),0),a=Ia(i);++r<i;)a[r]=t,t+=n;return a}function Oa(t,e,n){if((t=go(t))<1||!Mo(t))return[];var r=-1,i=Ia(ko(t,Ao));for(e=on(e,n,1);++r<t;)r<Ao?i[r]=e(r):e(r);return i}function Pa(t){var e=++eo;return u(t)+e}function Na(t,e){return(+t||0)+(+e||0)}function Ba(t,e,n){return n&&Qn(t,e,n)&&(e=D),e=Rn(e,n,3),1==e.length?fe(Au(t)?t:lr(t),e):Xe(t,e)}t=t?te.defaults(Qt.Object(),t,te.pick(Qt,Pt)):Qt;var Ia=t.Array,Ra=t.Date,Wa=t.Error,za=t.Function,qa=t.Math,Ua=t.Number,$a=t.Object,Va=t.RegExp,Ga=t.String,Ja=t.TypeError,Za=Ia.prototype,Ka=$a.prototype,Xa=Ga.prototype,Qa=za.prototype.toString,to=Ka.hasOwnProperty,eo=0,no=Ka.toString,ro=Qt._,io=Va("^"+Qa.call(to).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ao=t.ArrayBuffer,oo=t.clearTimeout,uo=t.parseFloat,so=qa.pow,co=Ka.propertyIsEnumerable,lo=Un(t,"Set"),ho=t.setTimeout,fo=Za.splice,_o=t.Uint8Array,po=Un(t,"WeakMap"),mo=qa.ceil,yo=Un($a,"create"),go=qa.floor,vo=Un(Ia,"isArray"),Mo=t.isFinite,bo=Un($a,"keys"),Lo=qa.max,ko=qa.min,wo=Un(Ra,"now"),Do=t.parseInt,xo=qa.random,Yo=Ua.NEGATIVE_INFINITY,To=Ua.POSITIVE_INFINITY,Ao=4294967295,Eo=Ao-1,So=Ao>>>1,Fo=9007199254740991,Co=po&&new po,jo={};e.support={};e.templateSettings={escape:gt,evaluate:vt,interpolate:Mt,variable:"",imports:{_:e}};var Ho=function(){function t(){}return function(e){if(ji(e)){t.prototype=e;var n=new t;t.prototype=D}return n||{}}}(),Oo=hn(Se),Po=hn(Fe,!0),No=fn(),Bo=fn(!0),Io=Co?function(t,e){return Co.set(t,e),t}:Ya,Ro=Co?function(t){return Co.get(t)}:Fa,Wo=ze("length"),zo=function(){var t=0,e=0;return function(n,r){var i=pu(),a=B-(i-e);if(e=i,a>0){if(++t>=N)return n}else t=0;return Io(n,r)}}(),qo=yi(function(t,e){return y(t)&&Kn(t)?ke(t,Ae(e,!1,!0)):[]}),Uo=Ln(),$o=Ln(!0),Vo=yi(function(t){for(var e=t.length,n=e,r=Ia(d),i=zn(),o=i==a,u=[];n--;){var s=t[n]=Kn(s=t[n])?s:[];r[n]=o&&s.length>=120?pn(n&&s):null}var c=t[0],l=-1,d=c?c.length:0,h=r[0];t:for(;++l<d;)if(s=c[l],(h?Kt(h,s):i(u,s,0))<0){for(var n=e;--n;){var f=r[n];if((f?Kt(f,s):i(t[n],s,0))<0)continue t}h&&h.push(s),u.push(s)}return u}),Go=yi(function(t,e){e=Ae(e);var n=ge(t,e);return Ue(t,e.sort(r)),n}),Jo=On(),Zo=On(!0),Ko=yi(function(t){return Qe(Ae(t,!1,!0))}),Xo=yi(function(t,e){return Kn(t)?ke(t,e):[]}),Qo=yi(Pr),tu=yi(function(t){var e=t.length,n=e>2?t[e-2]:D,r=e>1?t[e-1]:D;return e>2&&"function"==typeof n?e-=2:(n=e>1&&"function"==typeof r?(--e,r):D,r=D),t.length=e,Nr(t,n,r)}),eu=yi(function(t){return t=Ae(t),this.thru(function(e){return ee(Au(e)?e:[dr(e)],t)})}),nu=yi(function(t,e){return ge(t,Ae(e))}),ru=ln(function(t,e,n){to.call(t,n)?++t[n]:t[n]=1}),iu=bn(Oo),au=bn(Po,!0),ou=Dn(re,Oo),uu=Dn(ie,Po),su=ln(function(t,e,n){to.call(t,n)?t[n].push(e):t[n]=[e]}),cu=ln(function(t,e,n){t[n]=e}),lu=yi(function(t,e,n){var r=-1,i="function"==typeof e,a=tr(e),o=Kn(t)?Ia(t.length):[];return Oo(t,function(t){var u=i?e:a&&null!=t?t[e]:D;o[++r]=u?u.apply(t,n):Zn(t,e,n)}),o}),du=ln(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),hu=Sn(le,Oo),fu=Sn(de,Po),_u=yi(function(t,e){if(null==t)return[];var n=e[2];return n&&Qn(e[0],e[1],n)&&(e.length=1),Ke(t,Ae(e),[])}),pu=wo||function(){return(new Ra).getTime()},mu=yi(function(t,e,n){var r=Y;if(n.length){var i=v(n,mu.placeholder);r|=F}return Pn(t,r,e,n,i)}),yu=yi(function(t,e){e=e.length?Ae(e):Zi(t);for(var n=-1,r=e.length;++n<r;){var i=e[n];t[i]=Pn(t[i],Y,t)}return t}),gu=yi(function(t,e,n){var r=Y|T;if(n.length){var i=v(n,gu.placeholder);r|=F}return Pn(e,r,t,n,i)}),vu=gn(E),Mu=gn(S),bu=yi(function(t,e){return Le(t,1,e)}),Lu=yi(function(t,e,n){return Le(t,e,n)}),ku=wn(),wu=wn(!0),Du=yi(function(t,e){if(e=Ae(e),"function"!=typeof t||!ae(e,o))throw new Ja(z);var n=e.length;return yi(function(r){for(var i=ko(r.length,n);i--;)r[i]=e[i](r[i]);return t.apply(this,r)})}),xu=En(F),Yu=En(C),Tu=yi(function(t,e){return Pn(t,H,D,D,D,Ae(e))}),Au=vo||function(t){return y(t)&&nr(t.length)&&no.call(t)==$},Eu=dn(Re),Su=dn(function(t,e,n){return n?me(t,e,n):ye(t,e)}),Fu=vn(Su,_e),Cu=vn(Eu,ar),ju=kn(Se),Hu=kn(Fe),Ou=xn(No),Pu=xn(Bo),Nu=Yn(Se),Bu=Yn(Fe),Iu=bo?function(t){var e=null==t?D:t.constructor;return"function"==typeof e&&e.prototype===t||"function"!=typeof t&&Kn(t)?cr(t):ji(t)?bo(t):[]}:cr,Ru=Tn(!0),Wu=Tn(),zu=yi(function(t,e){if(null==t)return{};if("function"!=typeof e[0]){var e=se(Ae(e),Ga);return or(t,ke(ta(t),e))}var n=on(e[0],e[1],3);return ur(t,function(t,e,r){return!n(t,e,r)})}),qu=yi(function(t,e){return null==t?{}:"function"==typeof e[0]?ur(t,on(e[0],e[1],3)):or(t,Ae(e))}),Uu=mn(function(t,e,n){return e=e.toLowerCase(),t+(n?e.charAt(0).toUpperCase()+e.slice(1):e)}),$u=mn(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),Vu=An(),Gu=An(!0),Ju=mn(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}),Zu=mn(function(t,e,n){return t+(n?" ":"")+(e.charAt(0).toUpperCase()+e.slice(1))}),Ku=yi(function(t,e){try{return t.apply(D,e)}catch(t){return Si(t)?t:new Wa(t)}}),Xu=yi(function(t,e){return function(n){return Zn(n,t,e)}}),Qu=yi(function(t,e){return function(n){return Zn(t,n,e)}}),ts=Hn("ceil"),es=Hn("floor"),ns=Mn(ki,Yo),rs=Mn(Ui,To),is=Hn("round");return e.prototype=n.prototype,g.prototype=Ho(n.prototype),g.prototype.constructor=g,Rt.prototype=Ho(n.prototype),Rt.prototype.constructor=Rt,Ut.prototype.delete=$t,Ut.prototype.get=Vt,Ut.prototype.has=Gt,Ut.prototype.set=Jt,Zt.prototype.push=Xt,_i.Cache=Ut,e.after=li,e.ary=di,e.assign=Su,e.at=nu,e.before=hi,e.bind=mu,e.bindAll=yu,e.bindKey=gu,e.callback=Da,e.chain=Rr,e.chunk=_r,e.compact=pr,e.constant=xa,e.countBy=ru,e.create=Ji,e.curry=vu,e.curryRight=Mu,e.debounce=fi,e.defaults=Fu,e.defaultsDeep=Cu,e.defer=bu,e.delay=Lu,e.difference=qo,e.drop=mr,e.dropRight=yr,e.dropRightWhile=gr,e.dropWhile=vr,e.fill=Mr,e.filter=Kr,e.flatten=Lr,e.flattenDeep=kr,e.flow=ku,e.flowRight=wu,e.forEach=ou,e.forEachRight=uu,e.forIn=Ou,e.forInRight=Pu,e.forOwn=Nu,e.forOwnRight=Bu,e.functions=Zi,e.groupBy=su,e.indexBy=cu,e.initial=Dr,e.intersection=Vo,e.invert=Qi,e.invoke=lu,e.keys=Iu,e.keysIn=ta,e.map=ti,e.mapKeys=Ru,e.mapValues=Wu,e.matches=Ta,e.matchesProperty=Aa,e.memoize=_i,e.merge=Eu,e.method=Xu,e.methodOf=Qu,e.mixin=Ea,e.modArgs=Du,e.negate=pi,e.omit=zu,e.once=mi,e.pairs=ea,e.partial=xu,e.partialRight=Yu,e.partition=du,e.pick=qu,e.pluck=ei,e.property=Ca,e.propertyOf=ja,e.pull=Tr,e.pullAt=Go,e.range=Ha,e.rearg=Tu,e.reject=ni,e.remove=Ar,e.rest=Er,e.restParam=yi,e.set=ra,e.shuffle=ii,e.slice=Sr,e.sortBy=ui,e.sortByAll=_u,e.sortByOrder=si,e.spread=gi,e.take=Fr,e.takeRight=Cr,e.takeRightWhile=jr,e.takeWhile=Hr,e.tap=Wr,e.throttle=vi,e.thru=zr,e.times=Oa,e.toArray=Vi,e.toPlainObject=Gi,e.transform=ia,e.union=Ko,e.uniq=Or,e.unzip=Pr,e.unzipWith=Nr,e.values=aa,e.valuesIn=oa,e.where=ci,e.without=Xo,e.wrap=Mi,e.xor=Br,e.zip=Qo,e.zipObject=Ir,e.zipWith=tu,e.backflow=wu,e.collect=ti,e.compose=wu,e.each=ou,e.eachRight=uu,e.extend=Su,e.iteratee=Da,e.methods=Zi,e.object=Ir,e.select=Kr,e.tail=Er,e.unique=Or,Ea(e,e),e.add=Na,e.attempt=Ku,e.camelCase=Uu,e.capitalize=ca,e.ceil=ts,e.clone=bi,e.cloneDeep=Li,e.deburr=la,e.endsWith=da,e.escape=ha,e.escapeRegExp=fa,e.every=Zr,e.find=iu,e.findIndex=Uo,e.findKey=ju,e.findLast=au,e.findLastIndex=$o,e.findLastKey=Hu,e.findWhere=Xr,e.first=br,e.floor=es,e.get=Ki,e.gt=ki,e.gte=wi,e.has=Xi,e.identity=Ya,e.includes=Qr,e.indexOf=wr,e.inRange=ua,e.isArguments=Di,e.isArray=Au,e.isBoolean=xi,e.isDate=Yi,e.isElement=Ti,e.isEmpty=Ai,e.isEqual=Ei,e.isError=Si,e.isFinite=Fi,e.isFunction=Ci,e.isMatch=Hi,e.isNaN=Oi,e.isNative=Pi,e.isNull=Ni,e.isNumber=Bi,e.isObject=ji,e.isPlainObject=Ii,e.isRegExp=Ri,e.isString=Wi,e.isTypedArray=zi,e.isUndefined=qi,e.kebabCase=$u,e.last=xr,e.lastIndexOf=Yr,e.lt=Ui,e.lte=$i,e.max=ns,e.min=rs,e.noConflict=Sa,e.noop=Fa,e.now=pu,e.pad=_a,e.padLeft=Vu,e.padRight=Gu,e.parseInt=pa,e.random=sa,e.reduce=hu,e.reduceRight=fu,e.repeat=ma,e.result=na,e.round=is,e.runInContext=w,e.size=ai,e.snakeCase=Ju,e.some=oi,e.sortedIndex=Jo,e.sortedLastIndex=Zo,e.startCase=Zu,e.startsWith=ya,e.sum=Ba,e.template=ga,e.trim=va,e.trimLeft=Ma,e.trimRight=ba,e.trunc=La,e.unescape=ka,e.uniqueId=Pa,e.words=wa,e.all=Zr,e.any=oi,e.contains=Qr,e.eq=Ei,e.detect=iu,e.foldl=hu,e.foldr=fu,e.head=br,e.include=Qr,e.inject=hu,Ea(e,function(){var t={};return Se(e,function(n,r){e.prototype[r]||(t[r]=n)}),t}(),!1),e.sample=ri,e.prototype.sample=function(t){return this.__chain__||null!=t?this.thru(function(e){return ri(e,t)}):ri(this.value())},e.VERSION=x,re(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){e[t].placeholder=e}),re(["drop","take"],function(t,e){Rt.prototype[t]=function(n){var r=this.__filtered__;if(r&&!e)return new Rt(this);n=null==n?1:Lo(go(n)||0,0);var i=this.clone();return r?i.__takeCount__=ko(i.__takeCount__,n):i.__views__.push({size:n,type:t+(i.__dir__<0?"Right":"")}),i},Rt.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),re(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n!=W;Rt.prototype[t]=function(t,e){var i=this.clone();return i.__iteratees__.push({iteratee:Rn(t,e,1),type:n}),i.__filtered__=i.__filtered__||r,i}}),re(["first","last"],function(t,e){var n="take"+(e?"Right":"");Rt.prototype[t]=function(){return this[n](1).value()[0]}}),re(["initial","rest"],function(t,e){var n="drop"+(e?"":"Right");Rt.prototype[t]=function(){return this.__filtered__?new Rt(this):this[n](1)}}),re(["pluck","where"],function(t,e){var n=e?"filter":"map",r=e?Be:Ca;Rt.prototype[t]=function(t){return this[n](r(t))}}),Rt.prototype.compact=function(){return this.filter(Ya)},Rt.prototype.reject=function(t,e){return t=Rn(t,e,1),this.filter(function(e){return!t(e)})},Rt.prototype.slice=function(t,e){t=null==t?0:+t||0;var n=this;return n.__filtered__&&(t>0||e<0)?new Rt(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==D&&(e=+e||0,n=e<0?n.dropRight(-e):n.take(e-t)),n)},Rt.prototype.takeRightWhile=function(t,e){return this.reverse().takeWhile(t,e).reverse()},Rt.prototype.toArray=function(){return this.take(To)},Se(Rt.prototype,function(t,n){var r=/^(?:filter|map|reject)|While$/.test(n),i=/^(?:first|last)$/.test(n),a=e[i?"take"+("last"==n?"Right":""):n];a&&(e.prototype[n]=function(){var e=i?[1]:arguments,n=this.__chain__,o=this.__wrapped__,u=!!this.__actions__.length,s=o instanceof Rt,c=e[0],l=s||Au(o);l&&r&&"function"==typeof c&&1!=c.length&&(s=l=!1);var d=function(t){return i&&n?a(t,1)[0]:a.apply(D,ce([t],e))},h={func:zr,args:[d],thisArg:D},f=s&&!u;if(i&&!n)return f?(o=o.clone(),o.__actions__.push(h),t.call(o)):a.call(D,this.value())[0];if(!i&&l){o=f?o:new Rt(this);var _=t.apply(o,e);return _.__actions__.push(h),new g(_,n)}return this.thru(d)})}),re(["join","pop","push","replace","shift","sort","splice","split","unshift"],function(t){var n=(/^(?:replace|split)$/.test(t)?Xa:Za)[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",i=/^(?:join|pop|replace|shift)$/.test(t);e.prototype[t]=function(){var t=arguments;return i&&!this.__chain__?n.apply(this.value(),t):this[r](function(e){return n.apply(e,t)})}}),Se(Rt.prototype,function(t,n){var r=e[n];if(r){var i=r.name;(jo[i]||(jo[i]=[])).push({name:n,func:r})}}),jo[Fn(D,T).name]=[{name:"wrapper",func:D}],Rt.prototype.clone=Wt,Rt.prototype.reverse=zt,Rt.prototype.value=qt,e.prototype.chain=qr,e.prototype.commit=Ur,e.prototype.concat=eu,e.prototype.plant=$r,e.prototype.reverse=Vr,e.prototype.toString=Gr,e.prototype.run=e.prototype.toJSON=e.prototype.valueOf=e.prototype.value=Jr,e.prototype.collect=e.prototype.map,e.prototype.head=e.prototype.first,e.prototype.select=e.prototype.filter,e.prototype.tail=e.prototype.rest,e}var D,x="3.10.1",Y=1,T=2,A=4,E=8,S=16,F=32,C=64,j=128,H=256,O=30,P="...",N=150,B=16,I=200,R=1,W=2,z="Expected a function",q="__lodash_placeholder__",U="[object Arguments]",$="[object Array]",V="[object Boolean]",G="[object Date]",J="[object Error]",Z="[object Function]",K="[object Number]",X="[object Object]",Q="[object RegExp]",tt="[object String]",et="[object ArrayBuffer]",nt="[object Float32Array]",rt="[object Float64Array]",it="[object Int8Array]",at="[object Int16Array]",ot="[object Int32Array]",ut="[object Uint8Array]",st="[object Uint8ClampedArray]",ct="[object Uint16Array]",lt="[object Uint32Array]",dt=/\b__p \+= '';/g,ht=/\b(__p \+=) '' \+/g,ft=/(__e\(.*?\)|\b__t\)) \+\n'';/g,_t=/&(?:amp|lt|gt|quot|#39|#96);/g,pt=/[&<>"'`]/g,mt=RegExp(_t.source),yt=RegExp(pt.source),gt=/<%-([\s\S]+?)%>/g,vt=/<%([\s\S]+?)%>/g,Mt=/<%=([\s\S]+?)%>/g,bt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,Lt=/^\w*$/,kt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,wt=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,Dt=RegExp(wt.source),xt=/[\u0300-\u036f\ufe20-\ufe23]/g,Yt=/\\(\\)?/g,Tt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,At=/\w*$/,Et=/^0[xX]/,St=/^\[object .+?Constructor\]$/,Ft=/^\d+$/,Ct=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,jt=/($^)/,Ht=/['\n\r\u2028\u2029\\]/g,Ot=function(){var t="[A-Z\\xc0-\\xd6\\xd8-\\xde]",e="[a-z\\xdf-\\xf6\\xf8-\\xff]+";return RegExp(t+"+(?="+t+e+")|"+t+"?"+e+"|"+t+"+|[0-9]+","g")}(),Pt=["Array","ArrayBuffer","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Math","Number","Object","RegExp","Set","String","_","clearTimeout","isFinite","parseFloat","parseInt","setTimeout","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap"],Nt=-1,Bt={};Bt[nt]=Bt[rt]=Bt[it]=Bt[at]=Bt[ot]=Bt[ut]=Bt[st]=Bt[ct]=Bt[lt]=!0,Bt[U]=Bt[$]=Bt[et]=Bt[V]=Bt[G]=Bt[J]=Bt[Z]=Bt["[object Map]"]=Bt[K]=Bt[X]=Bt[Q]=Bt["[object Set]"]=Bt[tt]=Bt["[object WeakMap]"]=!1;var It={};It[U]=It[$]=It[et]=It[V]=It[G]=It[nt]=It[rt]=It[it]=It[at]=It[ot]=It[K]=It[X]=It[Q]=It[tt]=It[ut]=It[st]=It[ct]=It[lt]=!0,It[J]=It[Z]=It["[object Map]"]=It["[object Set]"]=It["[object WeakMap]"]=!1;var Rt={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Wt={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},zt={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},qt={function:!0,object:!0},Ut={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},$t={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Vt=qt[typeof e]&&e&&!e.nodeType&&e,Gt=qt[typeof t]&&t&&!t.nodeType&&t,Jt=Vt&&Gt&&"object"==typeof n&&n&&n.Object&&n,Zt=qt[typeof self]&&self&&self.Object&&self,Kt=qt[typeof window]&&window&&window.Object&&window,Xt=Gt&&Gt.exports===Vt&&Vt,Qt=Jt||Kt!==(this&&this.window)&&Kt||Zt||this,te=w();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Qt._=te,define(function(){return te})):Vt&&Gt?Xt?(Gt.exports=te)._=te:Vt._=te:Qt._=te}).call(this)}).call(e,n(4)(t),n(9))},function(t,e){t.exports="1.0.7"},function(t,e,n){function r(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:i(t),edges:a(t)};return u.isUndefined(t.graph())||(e.value=u.clone(t.graph())),e}function i(t){return u.map(t.nodes(),function(e){var n=t.node(e),r=t.parent(e),i={v:e};return u.isUndefined(n)||(i.value=n),u.isUndefined(r)||(i.parent=r),i})}function a(t){return u.map(t.edges(),function(e){var n=t.edge(e),r={v:e.v,w:e.w};return u.isUndefined(e.name)||(r.name=e.name),u.isUndefined(n)||(r.value=n),r})}function o(t){var e=new s(t.options).setGraph(t.value);return u.each(t.nodes,function(t){e.setNode(t.v,t.value),t.parent&&e.setParent(t.v,t.parent)}),u.each(t.edges,function(t){e.setEdge({v:t.v,w:t.w,name:t.name},t.value)}),e}var u=n(6),s=n(19);t.exports={write:r,read:o}},function(t,e,n){t.exports={components:n(194),dijkstra:n(34),dijkstraAll:n(195),findCycles:n(196),floydWarshall:n(197),isAcyclic:n(198),postorder:n(199),preorder:n(200),prim:n(201),tarjan:n(36),topsort:n(37)}},function(t,e,n){function r(t){function e(a){i.has(r,a)||(r[a]=!0,n.push(a),i.each(t.successors(a),e),i.each(t.predecessors(a),e))}var n,r={},a=[];return i.each(t.nodes(),function(t){n=[],e(t),n.length&&a.push(n)}),a}var i=n(6);t.exports=r},function(t,e,n){function r(t,e,n){return a.transform(t.nodes(),function(r,a){r[a]=i(t,a,e,n)},{})}var i=n(34),a=n(6);t.exports=r},function(t,e,n){function r(t){return i.filter(a(t),function(e){return e.length>1||1===e.length&&t.hasEdge(e[0],e[0])})}var i=n(6),a=n(36);t.exports=r},function(t,e,n){function r(t,e,n){return i(t,e||o,n||function(e){return t.outEdges(e)})}function i(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],u=r.distance+i.distance;u<o.distance&&(o.distance=u,o.predecessor=i.predecessor)})})}),r}var a=n(6);t.exports=r;var o=a.constant(1)},function(t,e,n){function r(t){try{i(t)}catch(t){if(t instanceof i.CycleException)return!1;throw t}return!0}var i=n(37);t.exports=r},function(t,e,n){function r(t,e){return i(t,e,"post")}var i=n(38);t.exports=r},function(t,e,n){function r(t,e){return i(t,e,"pre")}var i=n(38);t.exports=r},function(t,e,n){function r(t,e){function n(t){var n=t.v===r?t.w:t.v,i=c.priority(n);if(void 0!==i){var a=e(t);a<i&&(s[n]=r,c.decrease(n,a))}}var r,u=new a,s={},c=new o;if(0===t.nodeCount())return u;i.each(t.nodes(),function(t){c.add(t,Number.POSITIVE_INFINITY),u.setNode(t)}),c.decrease(t.nodes()[0],0);for(var l=!1;c.size()>0;){if(r=c.removeMin(),i.has(s,r))u.setEdge(r,s[r]);else{if(l)throw new Error("Input graph is not connected: "+t);l=!0}t.nodeEdges(r).forEach(n)}return u}var i=n(6),a=n(19),o=n(35);t.exports=r},function(t,e,n){"use strict";function r(t,e){var n=e&&e.debugTiming?C.time:C.notime;n("layout",function(){var e=n(" buildLayoutGraph",function(){return o(t)});n(" runLayout",function(){i(e,n)}),n(" updateInputGraph",function(){a(t,e)})})}function i(t,e){e(" makeSpaceForEdgeLabels",function(){u(t)}),e(" removeSelfEdges",function(){m(t)}),e(" acyclic",function(){L.run(t)}),e(" nestingGraph.run",function(){T.run(t)}),e(" rank",function(){w(C.asNonCompoundGraph(t))}),e(" injectEdgeLabelProxies",function(){s(t)}),e(" removeEmptyRanks",function(){Y(t)}),e(" nestingGraph.cleanup",function(){T.cleanup(t)}),e(" normalizeRanks",function(){D(t)}),e(" assignRankMinMax",function(){c(t)}),e(" removeEdgeLabelProxies",function(){l(t)}),e(" normalize.run",function(){k.run(t)}),e(" parentDummyChains",function(){x(t)}),e(" addBorderSegments",function(){A(t)}),e(" order",function(){S(t)}),e(" insertSelfEdges",function(){y(t)}),e(" adjustCoordinateSystem",function(){E.adjust(t)}),e(" position",function(){F(t)}),e(" positionSelfEdges",function(){g(t)}),e(" removeBorderNodes",function(){p(t)}),e(" normalize.undo",function(){k.undo(t)}),e(" fixupEdgeLabelCoords",function(){f(t)}),e(" undoCoordinateSystem",function(){E.undo(t)}),e(" translateGraph",function(){d(t)}),e(" assignNodeIntersects",function(){h(t)}),e(" reversePoints",function(){_(t)}),e(" acyclic.undo",function(){L.undo(t)})}function a(t,e){b.each(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))}),b.each(t.edges(),function(n){var r=t.edge(n),i=e.edge(n);r.points=i.points,b.has(i,"x")&&(r.x=i.x,r.y=i.y)}),t.graph().width=e.graph().width,t.graph().height=e.graph().height}function o(t){var e=new j({multigraph:!0,compound:!0}),n=M(t.graph());return e.setGraph(b.merge({},O,v(n,H),b.pick(n,P))),b.each(t.nodes(),function(n){var r=M(t.node(n));e.setNode(n,b.defaults(v(r,N),B)),e.setParent(n,t.parent(n))}),b.each(t.edges(),function(n){var r=M(t.edge(n));e.setEdge(n,b.merge({},R,v(r,I),b.pick(r,W)))}),e}function u(t){var e=t.graph();e.ranksep/=2,b.each(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)})}function s(t){b.each(t.edges(),function(e){var n=t.edge(e);if(n.width&&n.height){var r=t.node(e.v),i=t.node(e.w),a={rank:(i.rank-r.rank)/2+r.rank,e:e};C.addDummyNode(t,"edge-proxy",a,"_ep")}})}function c(t){var e=0;b.each(t.nodes(),function(n){var r=t.node(n);r.borderTop&&(r.minRank=t.node(r.borderTop).rank,r.maxRank=t.node(r.borderBottom).rank,e=b.max(e,r.maxRank))}),t.graph().maxRank=e}function l(t){b.each(t.nodes(),function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))})}function d(t){function e(t){var e=t.x,o=t.y,u=t.width,s=t.height;n=Math.min(n,e-u/2),r=Math.max(r,e+u/2),i=Math.min(i,o-s/2),a=Math.max(a,o+s/2)}var n=Number.POSITIVE_INFINITY,r=0,i=Number.POSITIVE_INFINITY,a=0,o=t.graph(),u=o.marginx||0,s=o.marginy||0;b.each(t.nodes(),function(n){e(t.node(n))}),b.each(t.edges(),function(n){var r=t.edge(n);b.has(r,"x")&&e(r)}),n-=u,i-=s,b.each(t.nodes(),function(e){var r=t.node(e);r.x-=n,r.y-=i}),b.each(t.edges(),function(e){var r=t.edge(e);b.each(r.points,function(t){t.x-=n,t.y-=i}),b.has(r,"x")&&(r.x-=n),b.has(r,"y")&&(r.y-=i)}),o.width=r-n+u,o.height=a-i+s}function h(t){b.each(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(C.intersectRect(a,n)),i.points.push(C.intersectRect(o,r))})}function f(t){b.each(t.edges(),function(e){var n=t.edge(e);if(b.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}})}function _(t){b.each(t.edges(),function(e){var n=t.edge(e);n.reversed&&n.points.reverse()})}function p(t){b.each(t.nodes(),function(e){if(t.children(e).length){var n=t.node(e),r=t.node(n.borderTop),i=t.node(n.borderBottom),a=t.node(b.last(n.borderLeft)),o=t.node(b.last(n.borderRight));n.width=Math.abs(o.x-a.x),n.height=Math.abs(i.y-r.y),n.x=a.x+n.width/2,n.y=r.y+n.height/2}}),b.each(t.nodes(),function(e){"border"===t.node(e).dummy&&t.removeNode(e)})}function m(t){b.each(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)}})}function y(t){var e=C.buildLayerMatrix(t);b.each(e,function(e){var n=0;b.each(e,function(e,r){var i=t.node(e);i.order=r+n,b.each(i.selfEdges,function(e){C.addDummyNode(t,"selfedge",{width:e.label.width,height:e.label.height,rank:i.rank,order:r+ ++n,e:e.e,label:e.label},"_se")}),delete i.selfEdges})})}function g(t){b.each(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,u=r.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:i+2*o/3,y:a-u},{x:i+5*o/6,y:a-u},{x:i+o,y:a},{x:i+5*o/6,y:a+u},{x:i+2*o/3,y:a+u}],n.label.x=n.x,n.label.y=n.y}})}function v(t,e){return b.mapValues(b.pick(t,e),Number)}function M(t){var e={};return b.each(t,function(t,n){e[n.toLowerCase()]=t}),e}var b=n(1),L=n(204),k=n(207),w=n(208),D=n(3).normalizeRanks,x=n(210),Y=n(3).removeEmptyRanks,T=n(211),A=n(212),E=n(213),S=n(214),F=n(223),C=n(3),j=n(8).Graph;t.exports=r;var H=["nodesep","edgesep","ranksep","marginx","marginy"],O={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},P=["acyclicer","ranker","rankdir","align"],N=["width","height"],B={width:0,height:0},I=["minlen","weight","width","height","labeloffset"],R={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},W=["labelpos"]},function(t,e,n){(function(t,n){(function(){function r(t,e){if(t!==e){var n=null===t,r=t===D,i=t===t,a=null===e,o=e===D,u=e===e;if(t>e&&!a||!i||n&&!o&&u||r&&u)return 1;if(t<e&&!n||!u||a&&!r&&i||o&&i)return-1}return 0}function i(t,e,n){for(var r=t.length,i=n?r:-1;n?i--:++i<r;)if(e(t[i],i,t))return i;return-1}function a(t,e,n){if(e!==e)return m(t,n);for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}function o(t){return"function"==typeof t||!1}function u(t){return null==t?"":t+""}function s(t,e){for(var n=-1,r=t.length;++n<r&&e.indexOf(t.charAt(n))>-1;);return n}function c(t,e){for(var n=t.length;n--&&e.indexOf(t.charAt(n))>-1;);return n}function l(t,e){return r(t.criteria,e.criteria)||t.index-e.index}function d(t,e,n){for(var i=-1,a=t.criteria,o=e.criteria,u=a.length,s=n.length;++i<u;){var c=r(a[i],o[i]);if(c){if(i>=s)return c;var l=n[i];return c*("asc"===l||!0===l?1:-1)}}return t.index-e.index}function h(t){return Rt[t]}function f(t){return Wt[t]}function _(t,e,n){return e?t=Ut[t]:n&&(t=$t[t]),"\\"+t}function p(t){return"\\"+$t[t]}function m(t,e,n){for(var r=t.length,i=e+(n?0:-1);n?i--:++i<r;){var a=t[i];if(a!==a)return i}return-1}function y(t){return!!t&&"object"==typeof t}function g(t){return t<=160&&t>=9&&t<=13||32==t||160==t||5760==t||6158==t||t>=8192&&(t<=8202||8232==t||8233==t||8239==t||8287==t||12288==t||65279==t)}function v(t,e){for(var n=-1,r=t.length,i=-1,a=[];++n<r;)t[n]===e&&(t[n]=q,a[++i]=n);return a}function M(t,e){for(var n,r=-1,i=t.length,a=-1,o=[];++r<i;){var u=t[r],s=e?e(u,r,t):u;r&&n===s||(n=s,o[++a]=u)}return o}function b(t){for(var e=-1,n=t.length;++e<n&&g(t.charCodeAt(e)););return e}function L(t){for(var e=t.length;e--&&g(t.charCodeAt(e)););return e}function k(t){return zt[t]}function w(t){function e(t){if(y(t)&&!Au(t)&&!(t instanceof Rt)){if(t instanceof g)return t;if(to.call(t,"__chain__")&&to.call(t,"__wrapped__"))return fr(t)}return new g(t)}function n(){}function g(t,e,n){this.__wrapped__=t,this.__actions__=n||[],this.__chain__=!!e}function Rt(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=To,this.__views__=[]}function Wt(){var t=new Rt(this.__wrapped__);return t.__actions__=ne(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=ne(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=ne(this.__views__),t}function zt(){if(this.__filtered__){var t=new Rt(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function qt(){var t=this.__wrapped__.value(),e=this.__dir__,n=Au(t),r=e<0,i=n?t.length:0,a=$n(0,i,this.__views__),o=a.start,u=a.end,s=u-o,c=r?u:o-1,l=this.__iteratees__,d=l.length,h=0,f=ko(s,this.__takeCount__);if(!n||i<I||i==s&&f==s)return nn(r&&n?t.reverse():t,this.__actions__);var _=[];t:for(;s--&&h<f;){c+=e;for(var p=-1,m=t[c];++p<d;){var y=l[p],g=y.iteratee,v=y.type,M=g(m);if(v==W)m=M;else if(!M){if(v==R)continue t;break t}}_[h++]=m}return _}function Ut(){this.__data__={}}function $t(t){return this.has(t)&&delete this.__data__[t]}function Vt(t){return"__proto__"==t?D:this.__data__[t]}function Gt(t){return"__proto__"!=t&&to.call(this.__data__,t)}function Jt(t,e){return"__proto__"!=t&&(this.__data__[t]=e),this}function Zt(t){var e=t?t.length:0;for(this.data={hash:yo(null),set:new lo};e--;)this.push(t[e])}function Kt(t,e){var n=t.data;return("string"==typeof e||ji(e)?n.set.has(e):n.hash[e])?0:-1}function Xt(t){var e=this.data;"string"==typeof t||ji(t)?e.set.add(t):e.hash[t]=!0}function ee(t,e){for(var n=-1,r=t.length,i=-1,a=e.length,o=Ia(r+a);++n<r;)o[n]=t[n];for(;++i<a;)o[n++]=e[i];return o}function ne(t,e){var n=-1,r=t.length;for(e||(e=Ia(r));++n<r;)e[n]=t[n];return e}function re(t,e){for(var n=-1,r=t.length;++n<r&&!1!==e(t[n],n,t););return t}function ie(t,e){for(var n=t.length;n--&&!1!==e(t[n],n,t););return t}function ae(t,e){for(var n=-1,r=t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function oe(t,e,n,r){for(var i=-1,a=t.length,o=r,u=o;++i<a;){var s=t[i],c=+e(s);n(c,o)&&(o=c,u=s)}return u}function ue(t,e){for(var n=-1,r=t.length,i=-1,a=[];++n<r;){var o=t[n];e(o,n,t)&&(a[++i]=o)}return a}function se(t,e){for(var n=-1,r=t.length,i=Ia(r);++n<r;)i[n]=e(t[n],n,t);return i}function ce(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function le(t,e,n,r){var i=-1,a=t.length;for(r&&a&&(n=t[++i]);++i<a;)n=e(n,t[i],i,t);return n}function de(t,e,n,r){var i=t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function he(t,e){for(var n=-1,r=t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}function fe(t,e){for(var n=t.length,r=0;n--;)r+=+e(t[n])||0;return r}function _e(t,e){return t===D?e:t}function pe(t,e,n,r){return t!==D&&to.call(r,n)?t:e}function me(t,e,n){for(var r=-1,i=Iu(e),a=i.length;++r<a;){var o=i[r],u=t[o],s=n(u,e[o],o,t,e);(s===s?s===u:u!==u)&&(u!==D||o in t)||(t[o]=s)}return t}function ye(t,e){return null==e?t:ve(e,Iu(e),t)}function ge(t,e){for(var n=-1,r=null==t,i=!r&&Kn(t),a=i?t.length:0,o=e.length,u=Ia(o);++n<o;){var s=e[n];u[n]=i?Xn(s,a)?t[s]:D:r?D:t[s]}return u}function ve(t,e,n){n||(n={});for(var r=-1,i=e.length;++r<i;){var a=e[r];n[a]=t[a]}return n}function Me(t,e,n){var r=typeof t;return"function"==r?e===D?t:on(t,e,n):null==t?Ya:"object"==r?Be(t):e===D?Ca(t):Ie(t,e)}function be(t,e,n,r,i,a,o){var u;if(n&&(u=i?n(t,r,i):n(t)),u!==D)return u;if(!ji(t))return t;var s=Au(t);if(s){if(u=Vn(t),!e)return ne(t,u)}else{var c=no.call(t),l=c==Z;if(c!=X&&c!=U&&(!l||i))return It[c]?Jn(t,c,e):i?t:{};if(u=Gn(l?{}:t),!e)return ye(u,t)}a||(a=[]),o||(o=[]);for(var d=a.length;d--;)if(a[d]==t)return o[d];return a.push(t),o.push(u),(s?re:Se)(t,function(r,i){u[i]=be(r,e,n,i,t,a,o)}),u}function Le(t,e,n){if("function"!=typeof t)throw new Ja(z);return ho(function(){t.apply(D,n)},e)}function ke(t,e){var n=t?t.length:0,r=[];if(!n)return r;var i=-1,o=zn(),u=o==a,s=u&&e.length>=I?pn(e):null,c=e.length;s&&(o=Kt,u=!1,e=s);t:for(;++i<n;){var l=t[i];if(u&&l===l){for(var d=c;d--;)if(e[d]===l)continue t;r.push(l)}else o(e,l,0)<0&&r.push(l)}return r}function we(t,e){var n=!0;return Oo(t,function(t,r,i){return n=!!e(t,r,i)}),n}function De(t,e,n,r){var i=r,a=i;return Oo(t,function(t,o,u){var s=+e(t,o,u);(n(s,i)||s===r&&s===a)&&(i=s,a=t)}),a}function xe(t,e,n,r){var i=t.length;for(n=null==n?0:+n||0,n<0&&(n=-n>i?0:i+n),r=r===D||r>i?i:+r||0,r<0&&(r+=i),i=n>r?0:r>>>0,n>>>=0;n<i;)t[n++]=e;return t}function Ye(t,e){var n=[];return Oo(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function Te(t,e,n,r){var i;return n(t,function(t,n,a){if(e(t,n,a))return i=r?n:t,!1}),i}function Ae(t,e,n,r){r||(r=[]);for(var i=-1,a=t.length;++i<a;){var o=t[i];y(o)&&Kn(o)&&(n||Au(o)||Di(o))?e?Ae(o,e,n,r):ce(r,o):n||(r[r.length]=o)}return r}function Ee(t,e){return No(t,e,ta)}function Se(t,e){return No(t,e,Iu)}function Fe(t,e){return Bo(t,e,Iu)}function Ce(t,e){for(var n=-1,r=e.length,i=-1,a=[];++n<r;){var o=e[n];Ci(t[o])&&(a[++i]=o)}return a}function je(t,e,n){if(null!=t){n!==D&&n in dr(t)&&(e=[n]);for(var r=0,i=e.length;null!=t&&r<i;)t=t[e[r++]];return r&&r==i?t:D}}function He(t,e,n,r,i,a){return t===e||(null==t||null==e||!ji(t)&&!y(e)?t!==t&&e!==e:Oe(t,e,He,n,r,i,a))}function Oe(t,e,n,r,i,a,o){var u=Au(t),s=Au(e),c=$,l=$;u||(c=no.call(t),c==U?c=X:c!=X&&(u=zi(t))),s||(l=no.call(e),l==U?l=X:l!=X&&(s=zi(e)));var d=c==X,h=l==X,f=c==l;if(f&&!u&&!d)return Bn(t,e,c);if(!i){var _=d&&to.call(t,"__wrapped__"),p=h&&to.call(e,"__wrapped__");if(_||p)return n(_?t.value():t,p?e.value():e,r,i,a,o)}if(!f)return!1;a||(a=[]),o||(o=[]);for(var m=a.length;m--;)if(a[m]==t)return o[m]==e;a.push(t),o.push(e);var y=(u?Nn:In)(t,e,n,r,i,a,o);return a.pop(),o.pop(),y}function Pe(t,e,n){var r=e.length,i=r,a=!n;if(null==t)return!i;for(t=dr(t);r--;){var o=e[r];if(a&&o[2]?o[1]!==t[o[0]]:!(o[0]in t))return!1}for(;++r<i;){o=e[r];var u=o[0],s=t[u],c=o[1];if(a&&o[2]){if(s===D&&!(u in t))return!1}else{var l=n?n(s,c,u):D;if(!(l===D?He(c,s,n,!0):l))return!1}}return!0}function Ne(t,e){var n=-1,r=Kn(t)?Ia(t.length):[];return Oo(t,function(t,i,a){r[++n]=e(t,i,a)}),r}function Be(t){var e=qn(t);if(1==e.length&&e[0][2]){var n=e[0][0],r=e[0][1];return function(t){return null!=t&&(t[n]===r&&(r!==D||n in dr(t)))}}return function(t){return Pe(t,e)}}function Ie(t,e){var n=Au(t),r=tr(t)&&rr(e),i=t+"";return t=hr(t),function(a){if(null==a)return!1;var o=i;if(a=dr(a),(n||!r)&&!(o in a)){if(null==(a=1==t.length?a:je(a,Ge(t,0,-1))))return!1;o=xr(t),a=dr(a)}return a[o]===e?e!==D||o in a:He(e,a[o],D,!0)}}function Re(t,e,n,r,i){if(!ji(t))return t;var a=Kn(e)&&(Au(e)||zi(e)),o=a?D:Iu(e);return re(o||e,function(u,s){if(o&&(s=u,u=e[s]),y(u))r||(r=[]),i||(i=[]),We(t,e,s,Re,n,r,i);else{var c=t[s],l=n?n(c,u,s,t,e):D,d=l===D;d&&(l=u),l===D&&(!a||s in t)||!d&&(l===l?l===c:c!==c)||(t[s]=l)}}),t}function We(t,e,n,r,i,a,o){for(var u=a.length,s=e[n];u--;)if(a[u]==s)return void(t[n]=o[u]);var c=t[n],l=i?i(c,s,n,t,e):D,d=l===D;d&&(l=s,Kn(s)&&(Au(s)||zi(s))?l=Au(c)?c:Kn(c)?ne(c):[]:Ii(s)||Di(s)?l=Di(c)?Gi(c):Ii(c)?c:{}:d=!1),a.push(s),o.push(l),d?t[n]=r(l,s,i,a,o):(l===l?l!==c:c===c)&&(t[n]=l)}function ze(t){return function(e){return null==e?D:e[t]}}function qe(t){var e=t+"";return t=hr(t),function(n){return je(n,t,e)}}function Ue(t,e){for(var n=t?e.length:0;n--;){var r=e[n];if(r!=i&&Xn(r)){var i=r;fo.call(t,r,1)}}return t}function $e(t,e){return t+go(xo()*(e-t+1))}function Ve(t,e,n,r,i){return i(t,function(t,i,a){n=r?(r=!1,t):e(n,t,i,a)}),n}function Ge(t,e,n){var r=-1,i=t.length;e=null==e?0:+e||0,e<0&&(e=-e>i?0:i+e),n=n===D||n>i?i:+n||0,n<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var a=Ia(i);++r<i;)a[r]=t[r+e];return a}function Je(t,e){var n;return Oo(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function Ze(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}function Ke(t,e,n){var r=Rn(),i=-1;return e=se(e,function(t){return r(t)}),Ze(Ne(t,function(t){return{criteria:se(e,function(e){return e(t)}),index:++i,value:t}}),function(t,e){return d(t,e,n)})}function Xe(t,e){var n=0;return Oo(t,function(t,r,i){n+=+e(t,r,i)||0}),n}function Qe(t,e){var n=-1,r=zn(),i=t.length,o=r==a,u=o&&i>=I,s=u?pn():null,c=[];s?(r=Kt,o=!1):(u=!1,s=e?[]:c);t:for(;++n<i;){var l=t[n],d=e?e(l,n,t):l;if(o&&l===l){for(var h=s.length;h--;)if(s[h]===d)continue t;e&&s.push(d),c.push(l)}else r(s,d,0)<0&&((e||u)&&s.push(d),c.push(l))}return c}function tn(t,e){for(var n=-1,r=e.length,i=Ia(r);++n<r;)i[n]=t[e[n]];return i}function en(t,e,n,r){for(var i=t.length,a=r?i:-1;(r?a--:++a<i)&&e(t[a],a,t););return n?Ge(t,r?0:a,r?a+1:i):Ge(t,r?a+1:0,r?i:a)}function nn(t,e){var n=t;n instanceof Rt&&(n=n.value());for(var r=-1,i=e.length;++r<i;){var a=e[r];n=a.func.apply(a.thisArg,ce([n],a.args))}return n}function rn(t,e,n){var r=0,i=t?t.length:r;if("number"==typeof e&&e===e&&i<=So){for(;r<i;){var a=r+i>>>1,o=t[a];(n?o<=e:o<e)&&null!==o?r=a+1:i=a}return i}return an(t,e,Ya,n)}function an(t,e,n,r){e=n(e);for(var i=0,a=t?t.length:0,o=e!==e,u=null===e,s=e===D;i<a;){var c=go((i+a)/2),l=n(t[c]),d=l!==D,h=l===l;if(o)var f=h||r;else f=u?h&&d&&(r||null!=l):s?h&&(r||d):null!=l&&(r?l<=e:l<e);f?i=c+1:a=c}return ko(a,Eo)}function on(t,e,n){if("function"!=typeof t)return Ya;if(e===D)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 3:return function(n,r,i){return t.call(e,n,r,i)};case 4:return function(n,r,i,a){return t.call(e,n,r,i,a)};case 5:return function(n,r,i,a,o){return t.call(e,n,r,i,a,o)}}return function(){return t.apply(e,arguments)}}function un(t){var e=new ao(t.byteLength);return new _o(e).set(new _o(t)),e}function sn(t,e,n){for(var r=n.length,i=-1,a=Lo(t.length-r,0),o=-1,u=e.length,s=Ia(u+a);++o<u;)s[o]=e[o];for(;++i<r;)s[n[i]]=t[i];for(;a--;)s[o++]=t[i++];return s}function cn(t,e,n){for(var r=-1,i=n.length,a=-1,o=Lo(t.length-i,0),u=-1,s=e.length,c=Ia(o+s);++a<o;)c[a]=t[a];for(var l=a;++u<s;)c[l+u]=e[u];for(;++r<i;)c[l+n[r]]=t[a++];return c}function ln(t,e){return function(n,r,i){var a=e?e():{};if(r=Rn(r,i,3),Au(n))for(var o=-1,u=n.length;++o<u;){var s=n[o];t(a,s,r(s,o,n),n)}else Oo(n,function(e,n,i){t(a,e,r(e,n,i),i)});return a}}function dn(t){return yi(function(e,n){var r=-1,i=null==e?0:n.length,a=i>2?n[i-2]:D,o=i>2?n[2]:D,u=i>1?n[i-1]:D;for("function"==typeof a?(a=on(a,u,5),i-=2):(a="function"==typeof u?u:D,i-=a?1:0),o&&Qn(n[0],n[1],o)&&(a=i<3?D:a,i=1);++r<i;){var s=n[r];s&&t(e,s,a)}return e})}function hn(t,e){return function(n,r){var i=n?Wo(n):0;if(!nr(i))return t(n,r);for(var a=e?i:-1,o=dr(n);(e?a--:++a<i)&&!1!==r(o[a],a,o););return n}}function fn(t){return function(e,n,r){for(var i=dr(e),a=r(e),o=a.length,u=t?o:-1;t?u--:++u<o;){var s=a[u];if(!1===n(i[s],s,i))break}return e}}function _n(t,e){function n(){return(this&&this!==Qt&&this instanceof n?r:t).apply(e,arguments)}var r=yn(t);return n}function pn(t){return yo&&lo?new Zt(t):null}function mn(t){return function(e){for(var n=-1,r=wa(la(e)),i=r.length,a="";++n<i;)a=t(a,r[n],n);return a}}function yn(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=Ho(t.prototype),r=t.apply(n,e);return ji(r)?r:n}}function gn(t){function e(n,r,i){i&&Qn(n,r,i)&&(r=D);var a=Pn(n,t,D,D,D,D,D,r);return a.placeholder=e.placeholder,a}return e}function vn(t,e){return yi(function(n){var r=n[0];return null==r?r:(n.push(e),t.apply(D,n))})}function Mn(t,e){return function(n,r,i){if(i&&Qn(n,r,i)&&(r=D),r=Rn(r,i,3),1==r.length){n=Au(n)?n:lr(n);var a=oe(n,r,t,e);if(!n.length||a!==e)return a}return De(n,r,t,e)}}function bn(t,e){return function(n,r,a){if(r=Rn(r,a,3),Au(n)){var o=i(n,r,e);return o>-1?n[o]:D}return Te(n,r,t)}}function Ln(t){return function(e,n,r){return e&&e.length?(n=Rn(n,r,3),i(e,n,t)):-1}}function kn(t){return function(e,n,r){return n=Rn(n,r,3),Te(e,n,t,!0)}}function wn(t){return function(){for(var e,n=arguments.length,r=t?n:-1,i=0,a=Ia(n);t?r--:++r<n;){var o=a[i++]=arguments[r];if("function"!=typeof o)throw new Ja(z);!e&&g.prototype.thru&&"wrapper"==Wn(o)&&(e=new g([],!0))}for(r=e?-1:n;++r<n;){o=a[r];var u=Wn(o),s="wrapper"==u?Ro(o):D;e=s&&er(s[0])&&s[1]==(j|E|F|H)&&!s[4].length&&1==s[9]?e[Wn(s[0])].apply(e,s[3]):1==o.length&&er(o)?e[u]():e.thru(o)}return function(){var t=arguments,r=t[0];if(e&&1==t.length&&Au(r)&&r.length>=I)return e.plant(r).value();for(var i=0,o=n?a[i].apply(this,t):r;++i<n;)o=a[i].call(this,o);return o}}}function Dn(t,e){return function(n,r,i){return"function"==typeof r&&i===D&&Au(n)?t(n,r):e(n,on(r,i,3))}}function xn(t){return function(e,n,r){return"function"==typeof n&&r===D||(n=on(n,r,3)),t(e,n,ta)}}function Yn(t){return function(e,n,r){return"function"==typeof n&&r===D||(n=on(n,r,3)),t(e,n)}}function Tn(t){return function(e,n,r){var i={};return n=Rn(n,r,3),Se(e,function(e,r,a){var o=n(e,r,a);r=t?o:r,e=t?e:o,i[r]=e}),i}}function An(t){return function(e,n,r){return e=u(e),(t?e:"")+Cn(e,n,r)+(t?"":e)}}function En(t){var e=yi(function(n,r){var i=v(r,e.placeholder);return Pn(n,t,D,r,i)});return e}function Sn(t,e){return function(n,r,i,a){var o=arguments.length<3;return"function"==typeof r&&a===D&&Au(n)?t(n,r,i,o):Ve(n,Rn(r,a,4),i,o,e)}}function Fn(t,e,n,r,i,a,o,u,s,c){function l(){for(var g=arguments.length,M=g,b=Ia(g);M--;)b[M]=arguments[M];if(r&&(b=sn(b,r,i)),a&&(b=cn(b,a,o)),_||m){var L=l.placeholder,k=v(b,L);if((g-=k.length)<c){var w=u?ne(u):D,x=Lo(c-g,0),A=_?k:D,E=_?D:k,S=_?b:D,j=_?D:b;e|=_?F:C,e&=~(_?C:F),p||(e&=~(Y|T));var H=[t,e,n,S,A,j,E,w,s,x],O=Fn.apply(D,H);return er(t)&&zo(O,H),O.placeholder=L,O}}var P=h?n:this,N=f?P[t]:t;return u&&(b=sr(b,u)),d&&s<b.length&&(b.length=s),this&&this!==Qt&&this instanceof l&&(N=y||yn(t)),N.apply(P,b)}var d=e&j,h=e&Y,f=e&T,_=e&E,p=e&A,m=e&S,y=f?D:yn(t);return l}function Cn(t,e,n){var r=t.length;if(e=+e,r>=e||!Mo(e))return"";var i=e-r;return n=null==n?" ":n+"",ma(n,mo(i/n.length)).slice(0,i)}function jn(t,e,n,r){function i(){for(var e=-1,u=arguments.length,s=-1,c=r.length,l=Ia(c+u);++s<c;)l[s]=r[s];for(;u--;)l[s++]=arguments[++e];return(this&&this!==Qt&&this instanceof i?o:t).apply(a?n:this,l)}var a=e&Y,o=yn(t);return i}function Hn(t){var e=qa[t];return function(t,n){return n=n===D?0:+n||0,n?(n=so(10,n),e(t*n)/n):e(t)}}function On(t){return function(e,n,r,i){var a=Rn(r);return null==r&&a===Me?rn(e,n,t):an(e,n,a(r,i,1),t)}}function Pn(t,e,n,r,i,a,o,u){var s=e&T;if(!s&&"function"!=typeof t)throw new Ja(z);var c=r?r.length:0;if(c||(e&=~(F|C),r=i=D),c-=i?i.length:0,e&C){var l=r,d=i;r=i=D}var h=s?D:Ro(t),f=[t,e,n,r,i,l,d,a,o,u];if(h&&(ir(f,h),e=f[1],u=f[9]),f[9]=null==u?s?0:t.length:Lo(u-c,0)||0,e==Y)var _=_n(f[0],f[2]);else _=e!=F&&e!=(Y|F)||f[4].length?Fn.apply(D,f):jn.apply(D,f);return(h?Io:zo)(_,f)}function Nn(t,e,n,r,i,a,o){var u=-1,s=t.length,c=e.length;if(s!=c&&!(i&&c>s))return!1;for(;++u<s;){var l=t[u],d=e[u],h=r?r(i?d:l,i?l:d,u):D;if(h!==D){if(h)continue;return!1}if(i){if(!he(e,function(t){return l===t||n(l,t,r,i,a,o)}))return!1}else if(l!==d&&!n(l,d,r,i,a,o))return!1}return!0}function Bn(t,e,n){switch(n){case V:case G:return+t==+e;case J:return t.name==e.name&&t.message==e.message;case K:return t!=+t?e!=+e:t==+e;case Q:case tt:return t==e+""}return!1}function In(t,e,n,r,i,a,o){var u=Iu(t),s=u.length;if(s!=Iu(e).length&&!i)return!1;for(var c=s;c--;){var l=u[c];if(!(i?l in e:to.call(e,l)))return!1}for(var d=i;++c<s;){l=u[c];var h=t[l],f=e[l],_=r?r(i?f:h,i?h:f,l):D;if(!(_===D?n(h,f,r,i,a,o):_))return!1;d||(d="constructor"==l)}if(!d){var p=t.constructor,m=e.constructor;if(p!=m&&"constructor"in t&&"constructor"in e&&!("function"==typeof p&&p instanceof p&&"function"==typeof m&&m instanceof m))return!1}return!0}function Rn(t,n,r){var i=e.callback||Da;return i=i===Da?Me:i,r?i(t,n,r):i}function Wn(t){for(var e=t.name,n=jo[e],r=n?n.length:0;r--;){var i=n[r],a=i.func;if(null==a||a==t)return i.name}return e}function zn(t,n,r){var i=e.indexOf||wr;return i=i===wr?a:i,t?i(t,n,r):i}function qn(t){for(var e=ea(t),n=e.length;n--;)e[n][2]=rr(e[n][1]);return e}function Un(t,e){var n=null==t?D:t[e];return Pi(n)?n:D}function $n(t,e,n){for(var r=-1,i=n.length;++r<i;){var a=n[r],o=a.size;switch(a.type){case"drop":t+=o;break;case"dropRight":e-=o;break;case"take":e=ko(e,t+o);break;case"takeRight":t=Lo(t,e-o)}}return{start:t,end:e}}function Vn(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&to.call(t,"index")&&(n.index=t.index,n.input=t.input),n}function Gn(t){var e=t.constructor;return"function"==typeof e&&e instanceof e||(e=$a),new e}function Jn(t,e,n){var r=t.constructor;switch(e){case et:return un(t);case V:case G:return new r(+t);case nt:case rt:case it:case at:case ot:case ut:case st:case ct:case lt:var i=t.buffer;return new r(n?un(i):i,t.byteOffset,t.length);case K:case tt:return new r(t);case Q:var a=new r(t.source,At.exec(t));a.lastIndex=t.lastIndex}return a}function Zn(t,e,n){null==t||tr(e,t)||(e=hr(e),t=1==e.length?t:je(t,Ge(e,0,-1)),e=xr(e));var r=null==t?t:t[e];return null==r?D:r.apply(t,n)}function Kn(t){return null!=t&&nr(Wo(t))}function Xn(t,e){return t="number"==typeof t||Ft.test(t)?+t:-1,e=null==e?Fo:e,t>-1&&t%1==0&&t<e}function Qn(t,e,n){if(!ji(n))return!1;var r=typeof e;if("number"==r?Kn(n)&&Xn(e,n.length):"string"==r&&e in n){var i=n[e];return t===t?t===i:i!==i}return!1}function tr(t,e){var n=typeof t;return!!("string"==n&&Lt.test(t)||"number"==n)||!Au(t)&&(!bt.test(t)||null!=e&&t in dr(e))}function er(t){var n=Wn(t);if(!(n in Rt.prototype))return!1;var r=e[n];if(t===r)return!0;var i=Ro(r);return!!i&&t===i[0]}function nr(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=Fo}function rr(t){return t===t&&!ji(t)}function ir(t,e){var n=t[1],r=e[1],i=n|r,a=i<j,o=r==j&&n==E||r==j&&n==H&&t[7].length<=e[8]||r==(j|H)&&n==E;if(!a&&!o)return t;r&Y&&(t[2]=e[2],i|=n&Y?0:A);var u=e[3];if(u){var s=t[3];t[3]=s?sn(s,u,e[4]):ne(u),t[4]=s?v(t[3],q):ne(e[4])}return u=e[5],u&&(s=t[5],t[5]=s?cn(s,u,e[6]):ne(u),t[6]=s?v(t[5],q):ne(e[6])),u=e[7],u&&(t[7]=ne(u)),r&j&&(t[8]=null==t[8]?e[8]:ko(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i,t}function ar(t,e){return t===D?e:Eu(t,e,ar)}function or(t,e){t=dr(t);for(var n=-1,r=e.length,i={};++n<r;){var a=e[n];a in t&&(i[a]=t[a])}return i}function ur(t,e){var n={};return Ee(t,function(t,r,i){e(t,r,i)&&(n[r]=t)}),n}function sr(t,e){for(var n=t.length,r=ko(e.length,n),i=ne(t);r--;){var a=e[r];t[r]=Xn(a,n)?i[a]:D}return t}function cr(t){for(var e=ta(t),n=e.length,r=n&&t.length,i=!!r&&nr(r)&&(Au(t)||Di(t)),a=-1,o=[];++a<n;){var u=e[a];(i&&Xn(u,r)||to.call(t,u))&&o.push(u)}return o}function lr(t){return null==t?[]:Kn(t)?ji(t)?t:$a(t):aa(t)}function dr(t){return ji(t)?t:$a(t)}function hr(t){if(Au(t))return t;var e=[];return u(t).replace(kt,function(t,n,r,i){e.push(r?i.replace(Yt,"$1"):n||t)}),e}function fr(t){return t instanceof Rt?t.clone():new g(t.__wrapped__,t.__chain__,ne(t.__actions__))}function _r(t,e,n){e=(n?Qn(t,e,n):null==e)?1:Lo(go(e)||1,1);for(var r=0,i=t?t.length:0,a=-1,o=Ia(mo(i/e));r<i;)o[++a]=Ge(t,r,r+=e);return o}function pr(t){for(var e=-1,n=t?t.length:0,r=-1,i=[];++e<n;){var a=t[e];a&&(i[++r]=a)}return i}function mr(t,e,n){return(t?t.length:0)?((n?Qn(t,e,n):null==e)&&(e=1),Ge(t,e<0?0:e)):[]}function yr(t,e,n){var r=t?t.length:0;return r?((n?Qn(t,e,n):null==e)&&(e=1),e=r-(+e||0),Ge(t,0,e<0?0:e)):[]}function gr(t,e,n){return t&&t.length?en(t,Rn(e,n,3),!0,!0):[]}function vr(t,e,n){return t&&t.length?en(t,Rn(e,n,3),!0):[]}function Mr(t,e,n,r){var i=t?t.length:0;return i?(n&&"number"!=typeof n&&Qn(t,e,n)&&(n=0,r=i),xe(t,e,n,r)):[]}function br(t){return t?t[0]:D}function Lr(t,e,n){var r=t?t.length:0;return n&&Qn(t,e,n)&&(e=!1),r?Ae(t,e):[]}function kr(t){return(t?t.length:0)?Ae(t,!0):[]}function wr(t,e,n){var r=t?t.length:0;if(!r)return-1;if("number"==typeof n)n=n<0?Lo(r+n,0):n;else if(n){var i=rn(t,e);return i<r&&(e===e?e===t[i]:t[i]!==t[i])?i:-1}return a(t,e,n||0)}function Dr(t){return yr(t,1)}function xr(t){var e=t?t.length:0;return e?t[e-1]:D}function Yr(t,e,n){var r=t?t.length:0;if(!r)return-1;var i=r;if("number"==typeof n)i=(n<0?Lo(r+n,0):ko(n||0,r-1))+1;else if(n){i=rn(t,e,!0)-1;var a=t[i];return(e===e?e===a:a!==a)?i:-1}if(e!==e)return m(t,i,!0);for(;i--;)if(t[i]===e)return i;return-1}function Tr(){var t=arguments,e=t[0];if(!e||!e.length)return e;for(var n=0,r=zn(),i=t.length;++n<i;)for(var a=0,o=t[n];(a=r(e,o,a))>-1;)fo.call(e,a,1);return e}function Ar(t,e,n){var r=[];if(!t||!t.length)return r;var i=-1,a=[],o=t.length;for(e=Rn(e,n,3);++i<o;){var u=t[i];e(u,i,t)&&(r.push(u),a.push(i))}return Ue(t,a),r}function Er(t){return mr(t,1)}function Sr(t,e,n){var r=t?t.length:0;return r?(n&&"number"!=typeof n&&Qn(t,e,n)&&(e=0,n=r),Ge(t,e,n)):[]}function Fr(t,e,n){return(t?t.length:0)?((n?Qn(t,e,n):null==e)&&(e=1),Ge(t,0,e<0?0:e)):[]}function Cr(t,e,n){var r=t?t.length:0;return r?((n?Qn(t,e,n):null==e)&&(e=1),e=r-(+e||0),Ge(t,e<0?0:e)):[]}function jr(t,e,n){return t&&t.length?en(t,Rn(e,n,3),!1,!0):[]}function Hr(t,e,n){return t&&t.length?en(t,Rn(e,n,3)):[]}function Or(t,e,n,r){if(!(t?t.length:0))return[];null!=e&&"boolean"!=typeof e&&(r=n,n=Qn(t,e,r)?D:e,e=!1);var i=Rn();return null==n&&i===Me||(n=i(n,r,3)),e&&zn()==a?M(t,n):Qe(t,n)}function Pr(t){if(!t||!t.length)return[];var e=-1,n=0;t=ue(t,function(t){if(Kn(t))return n=Lo(t.length,n),!0});for(var r=Ia(n);++e<n;)r[e]=se(t,ze(e));return r}function Nr(t,e,n){if(!(t?t.length:0))return[];var r=Pr(t);return null==e?r:(e=on(e,n,4),se(r,function(t){return le(t,e,D,!0)}))}function Br(){for(var t=-1,e=arguments.length;++t<e;){var n=arguments[t];if(Kn(n))var r=r?ce(ke(r,n),ke(n,r)):n}return r?Qe(r):[]}function Ir(t,e){var n=-1,r=t?t.length:0,i={};for(!r||e||Au(t[0])||(e=[]);++n<r;){var a=t[n];e?i[a]=e[n]:a&&(i[a[0]]=a[1])}return i}function Rr(t){var n=e(t);return n.__chain__=!0,n}function Wr(t,e,n){return e.call(n,t),t}function zr(t,e,n){return e.call(n,t)}function qr(){return Rr(this)}function Ur(){return new g(this.value(),this.__chain__)}function $r(t){for(var e,r=this;r instanceof n;){var i=fr(r);e?a.__wrapped__=i:e=i;var a=i;r=r.__wrapped__}return a.__wrapped__=t,e}function Vr(){var t=this.__wrapped__,e=function(t){return n&&n.__dir__<0?t:t.reverse()};if(t instanceof Rt){var n=t;return this.__actions__.length&&(n=new Rt(this)),n=n.reverse(),n.__actions__.push({func:zr,args:[e],thisArg:D}),new g(n,this.__chain__)}return this.thru(e)}function Gr(){return this.value()+""}function Jr(){return nn(this.__wrapped__,this.__actions__)}function Zr(t,e,n){var r=Au(t)?ae:we;return n&&Qn(t,e,n)&&(e=D),"function"==typeof e&&n===D||(e=Rn(e,n,3)),r(t,e)}function Kr(t,e,n){var r=Au(t)?ue:Ye;return e=Rn(e,n,3),r(t,e)}function Xr(t,e){return iu(t,Be(e))}function Qr(t,e,n,r){var i=t?Wo(t):0;return nr(i)||(t=aa(t),i=t.length),n="number"!=typeof n||r&&Qn(e,n,r)?0:n<0?Lo(i+n,0):n||0,"string"==typeof t||!Au(t)&&Wi(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&zn(t,e,n)>-1}function ti(t,e,n){var r=Au(t)?se:Ne;return e=Rn(e,n,3),r(t,e)}function ei(t,e){return ti(t,Ca(e))}function ni(t,e,n){var r=Au(t)?ue:Ye;return e=Rn(e,n,3),r(t,function(t,n,r){return!e(t,n,r)})}function ri(t,e,n){if(n?Qn(t,e,n):null==e){t=lr(t);var r=t.length;return r>0?t[$e(0,r-1)]:D}var i=-1,a=Vi(t),r=a.length,o=r-1;for(e=ko(e<0?0:+e||0,r);++i<e;){var u=$e(i,o),s=a[u];a[u]=a[i],a[i]=s}return a.length=e,a}function ii(t){return ri(t,To)}function ai(t){var e=t?Wo(t):0;return nr(e)?e:Iu(t).length}function oi(t,e,n){var r=Au(t)?he:Je;return n&&Qn(t,e,n)&&(e=D),"function"==typeof e&&n===D||(e=Rn(e,n,3)),r(t,e)}function ui(t,e,n){if(null==t)return[];n&&Qn(t,e,n)&&(e=D);var r=-1;return e=Rn(e,n,3),Ze(Ne(t,function(t,n,i){return{criteria:e(t,n,i),index:++r,value:t}}),l)}function si(t,e,n,r){return null==t?[]:(r&&Qn(e,n,r)&&(n=D),Au(e)||(e=null==e?[]:[e]),Au(n)||(n=null==n?[]:[n]),Ke(t,e,n))}function ci(t,e){return Kr(t,Be(e))}function li(t,e){if("function"!=typeof e){if("function"!=typeof t)throw new Ja(z);var n=t;t=e,e=n}return t=Mo(t=+t)?t:0,function(){if(--t<1)return e.apply(this,arguments)}}function di(t,e,n){return n&&Qn(t,e,n)&&(e=D),e=t&&null==e?t.length:Lo(+e||0,0),Pn(t,j,D,D,D,D,e)}function hi(t,e){var n;if("function"!=typeof e){if("function"!=typeof t)throw new Ja(z);var r=t;t=e,e=r}return function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=D),n}}function fi(t,e,n){function r(){f&&oo(f),c&&oo(c),p=0,c=f=_=D}function i(e,n){n&&oo(n),c=f=_=D,e&&(p=pu(),l=t.apply(h,s),f||c||(s=h=D))}function a(){var t=e-(pu()-d);t<=0||t>e?i(_,c):f=ho(a,t)}function o(){i(y,f)}function u(){if(s=arguments,d=pu(),h=this,_=y&&(f||!g),!1===m)var n=g&&!f;else{c||g||(p=d);var r=m-(d-p),i=r<=0||r>m;i?(c&&(c=oo(c)),p=d,l=t.apply(h,s)):c||(c=ho(o,r))}return i&&f?f=oo(f):f||e===m||(f=ho(a,e)),n&&(i=!0,l=t.apply(h,s)),!i||f||c||(s=h=D),l}var s,c,l,d,h,f,_,p=0,m=!1,y=!0;if("function"!=typeof t)throw new Ja(z);if(e=e<0?0:+e||0,!0===n){var g=!0;y=!1}else ji(n)&&(g=!!n.leading,m="maxWait"in n&&Lo(+n.maxWait||0,e),y="trailing"in n?!!n.trailing:y);return u.cancel=r,u}function _i(t,e){if("function"!=typeof t||e&&"function"!=typeof e)throw new Ja(z);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=t.apply(this,r);return n.cache=a.set(i,o),o};return n.cache=new _i.Cache,n}function pi(t){if("function"!=typeof t)throw new Ja(z);return function(){return!t.apply(this,arguments)}}function mi(t){return hi(2,t)}function yi(t,e){if("function"!=typeof t)throw new Ja(z);return e=Lo(e===D?t.length-1:+e||0,0),function(){for(var n=arguments,r=-1,i=Lo(n.length-e,0),a=Ia(i);++r<i;)a[r]=n[e+r];switch(e){case 0:return t.call(this,a);case 1:return t.call(this,n[0],a);case 2:return t.call(this,n[0],n[1],a)}var o=Ia(e+1);for(r=-1;++r<e;)o[r]=n[r];return o[e]=a,t.apply(this,o)}}function gi(t){if("function"!=typeof t)throw new Ja(z);return function(e){return t.apply(this,e)}}function vi(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new Ja(z);return!1===n?r=!1:ji(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),fi(t,e,{leading:r,maxWait:+e,trailing:i})}function Mi(t,e){return e=null==e?Ya:e,Pn(e,F,D,[t],[])}function bi(t,e,n,r){return e&&"boolean"!=typeof e&&Qn(t,e,n)?e=!1:"function"==typeof e&&(r=n,n=e,e=!1),"function"==typeof n?be(t,e,on(n,r,1)):be(t,e)}function Li(t,e,n){return"function"==typeof e?be(t,!0,on(e,n,1)):be(t,!0)}function ki(t,e){return t>e}function wi(t,e){return t>=e}function Di(t){return y(t)&&Kn(t)&&to.call(t,"callee")&&!co.call(t,"callee")}function xi(t){return!0===t||!1===t||y(t)&&no.call(t)==V}function Yi(t){return y(t)&&no.call(t)==G}function Ti(t){return!!t&&1===t.nodeType&&y(t)&&!Ii(t)}function Ai(t){return null==t||(Kn(t)&&(Au(t)||Wi(t)||Di(t)||y(t)&&Ci(t.splice))?!t.length:!Iu(t).length)}function Ei(t,e,n,r){n="function"==typeof n?on(n,r,3):D;var i=n?n(t,e):D;return i===D?He(t,e,n):!!i}function Si(t){return y(t)&&"string"==typeof t.message&&no.call(t)==J}function Fi(t){return"number"==typeof t&&Mo(t)}function Ci(t){return ji(t)&&no.call(t)==Z}function ji(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Hi(t,e,n,r){return n="function"==typeof n?on(n,r,3):D,Pe(t,qn(e),n)}function Oi(t){return Bi(t)&&t!=+t}function Pi(t){return null!=t&&(Ci(t)?io.test(Qa.call(t)):y(t)&&St.test(t))}function Ni(t){return null===t}function Bi(t){return"number"==typeof t||y(t)&&no.call(t)==K}function Ii(t){var e;if(!y(t)||no.call(t)!=X||Di(t)||!to.call(t,"constructor")&&"function"==typeof(e=t.constructor)&&!(e instanceof e))return!1;var n;return Ee(t,function(t,e){n=e}),n===D||to.call(t,n)}function Ri(t){return ji(t)&&no.call(t)==Q}function Wi(t){return"string"==typeof t||y(t)&&no.call(t)==tt}function zi(t){return y(t)&&nr(t.length)&&!!Bt[no.call(t)]}function qi(t){return t===D}function Ui(t,e){return t<e}function $i(t,e){return t<=e}function Vi(t){var e=t?Wo(t):0;return nr(e)?e?ne(t):[]:aa(t)}function Gi(t){return ve(t,ta(t))}function Ji(t,e,n){var r=Ho(t);return n&&Qn(t,e,n)&&(e=D),e?ye(r,e):r}function Zi(t){return Ce(t,ta(t))}function Ki(t,e,n){var r=null==t?D:je(t,hr(e),e+"");return r===D?n:r}function Xi(t,e){if(null==t)return!1;var n=to.call(t,e);if(!n&&!tr(e)){if(e=hr(e),null==(t=1==e.length?t:je(t,Ge(e,0,-1))))return!1;e=xr(e),n=to.call(t,e)}return n||nr(t.length)&&Xn(e,t.length)&&(Au(t)||Di(t))}function Qi(t,e,n){n&&Qn(t,e,n)&&(e=D);for(var r=-1,i=Iu(t),a=i.length,o={};++r<a;){var u=i[r],s=t[u];e?to.call(o,s)?o[s].push(u):o[s]=[u]:o[s]=u}return o}function ta(t){if(null==t)return[];ji(t)||(t=$a(t));var e=t.length;e=e&&nr(e)&&(Au(t)||Di(t))&&e||0;for(var n=t.constructor,r=-1,i="function"==typeof n&&n.prototype===t,a=Ia(e),o=e>0;++r<e;)a[r]=r+"";for(var u in t)o&&Xn(u,e)||"constructor"==u&&(i||!to.call(t,u))||a.push(u);return a}function ea(t){t=dr(t);for(var e=-1,n=Iu(t),r=n.length,i=Ia(r);++e<r;){var a=n[e];i[e]=[a,t[a]]}return i}function na(t,e,n){var r=null==t?D:t[e];return r===D&&(null==t||tr(e,t)||(e=hr(e),t=1==e.length?t:je(t,Ge(e,0,-1)),r=null==t?D:t[xr(e)]),r=r===D?n:r),Ci(r)?r.call(t):r}function ra(t,e,n){if(null==t)return t;var r=e+"";e=null!=t[r]||tr(e,t)?[r]:hr(e);for(var i=-1,a=e.length,o=a-1,u=t;null!=u&&++i<a;){var s=e[i];ji(u)&&(i==o?u[s]=n:null==u[s]&&(u[s]=Xn(e[i+1])?[]:{})),u=u[s]}return t}function ia(t,e,n,r){var i=Au(t)||zi(t);if(e=Rn(e,r,4),null==n)if(i||ji(t)){var a=t.constructor;n=i?Au(t)?new a:[]:Ho(Ci(a)?a.prototype:D)}else n={};return(i?re:Se)(t,function(t,r,i){return e(n,t,r,i)}),n}function aa(t){return tn(t,Iu(t))}function oa(t){return tn(t,ta(t))}function ua(t,e,n){return e=+e||0,n===D?(n=e,e=0):n=+n||0,t>=ko(e,n)&&t<Lo(e,n)}function sa(t,e,n){n&&Qn(t,e,n)&&(e=n=D);var r=null==t,i=null==e;if(null==n&&(i&&"boolean"==typeof t?(n=t,t=1):"boolean"==typeof e&&(n=e,i=!0)),r&&i&&(e=1,i=!1),t=+t||0,i?(e=t,t=0):e=+e||0,n||t%1||e%1){var a=xo();return ko(t+a*(e-t+uo("1e-"+((a+"").length-1))),e)}return $e(t,e)}function ca(t){return(t=u(t))&&t.charAt(0).toUpperCase()+t.slice(1)}function la(t){return(t=u(t))&&t.replace(Ct,h).replace(xt,"")}function da(t,e,n){t=u(t),e+="";var r=t.length;return n=n===D?r:ko(n<0?0:+n||0,r),(n-=e.length)>=0&&t.indexOf(e,n)==n}function ha(t){return t=u(t),t&&yt.test(t)?t.replace(pt,f):t}function fa(t){return t=u(t),t&&Dt.test(t)?t.replace(wt,_):t||"(?:)"}function _a(t,e,n){t=u(t),e=+e;var r=t.length;if(r>=e||!Mo(e))return t;var i=(e-r)/2,a=go(i);return n=Cn("",mo(i),n),n.slice(0,a)+t+n}function pa(t,e,n){return(n?Qn(t,e,n):null==e)?e=0:e&&(e=+e),t=va(t),Do(t,e||(Et.test(t)?16:10))}function ma(t,e){var n="";if(t=u(t),(e=+e)<1||!t||!Mo(e))return n;do{e%2&&(n+=t),e=go(e/2),t+=t}while(e);return n}function ya(t,e,n){return t=u(t),n=null==n?0:ko(n<0?0:+n||0,t.length),t.lastIndexOf(e,n)==n}function ga(t,n,r){var i=e.templateSettings;r&&Qn(t,n,r)&&(n=r=D),t=u(t),n=me(ye({},r||n),i,pe);var a,o,s=me(ye({},n.imports),i.imports,pe),c=Iu(s),l=tn(s,c),d=0,h=n.interpolate||jt,f="__p += '",_=Va((n.escape||jt).source+"|"+h.source+"|"+(h===Mt?Tt:jt).source+"|"+(n.evaluate||jt).source+"|$","g"),m="//# sourceURL="+("sourceURL"in n?n.sourceURL:"lodash.templateSources["+ ++Nt+"]")+"\n";t.replace(_,function(e,n,r,i,u,s){return r||(r=i),f+=t.slice(d,s).replace(Ht,p),n&&(a=!0,f+="' +\n__e("+n+") +\n'"),u&&(o=!0,f+="';\n"+u+";\n__p += '"),r&&(f+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),d=s+e.length,e}),f+="';\n";var y=n.variable;y||(f="with (obj) {\n"+f+"\n}\n"),f=(o?f.replace(dt,""):f).replace(ht,"$1").replace(ft,"$1;"),f="function("+(y||"obj")+") {\n"+(y?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(a?", __e = _.escape":"")+(o?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+f+"return __p\n}";var g=Ku(function(){return za(c,m+"return "+f).apply(D,l)});if(g.source=f,Si(g))throw g;return g}function va(t,e,n){var r=t;return(t=u(t))?(n?Qn(r,e,n):null==e)?t.slice(b(t),L(t)+1):(e+="",t.slice(s(t,e),c(t,e)+1)):t}function Ma(t,e,n){var r=t;return t=u(t),t?(n?Qn(r,e,n):null==e)?t.slice(b(t)):t.slice(s(t,e+"")):t}function ba(t,e,n){var r=t;return t=u(t),t?(n?Qn(r,e,n):null==e)?t.slice(0,L(t)+1):t.slice(0,c(t,e+"")+1):t}function La(t,e,n){n&&Qn(t,e,n)&&(e=D);var r=O,i=P;if(null!=e)if(ji(e)){var a="separator"in e?e.separator:a;r="length"in e?+e.length||0:r,i="omission"in e?u(e.omission):i}else r=+e||0;if(t=u(t),r>=t.length)return t;var o=r-i.length;if(o<1)return i;var s=t.slice(0,o);if(null==a)return s+i;if(Ri(a)){if(t.slice(o).search(a)){var c,l,d=t.slice(0,o);for(a.global||(a=Va(a.source,(At.exec(a)||"")+"g")),a.lastIndex=0;c=a.exec(d);)l=c.index;s=s.slice(0,null==l?o:l)}}else if(t.indexOf(a,o)!=o){var h=s.lastIndexOf(a);h>-1&&(s=s.slice(0,h))}return s+i}function ka(t){return t=u(t),t&&mt.test(t)?t.replace(_t,k):t}function wa(t,e,n){return n&&Qn(t,e,n)&&(e=D),t=u(t),t.match(e||Ot)||[]}function Da(t,e,n){return n&&Qn(t,e,n)&&(e=D),y(t)?Ta(t):Me(t,e)}function xa(t){return function(){return t}}function Ya(t){return t}function Ta(t){return Be(be(t,!0))}function Aa(t,e){return Ie(t,be(e,!0))}function Ea(t,e,n){if(null==n){var r=ji(e),i=r?Iu(e):D,a=i&&i.length?Ce(e,i):D;(a?a.length:r)||(a=!1,n=e,e=t,t=this)}a||(a=Ce(e,Iu(e)));var o=!0,u=-1,s=Ci(t),c=a.length;!1===n?o=!1:ji(n)&&"chain"in n&&(o=n.chain);for(;++u<c;){var l=a[u],d=e[l];t[l]=d,s&&(t.prototype[l]=function(e){return function(){var n=this.__chain__;if(o||n){var r=t(this.__wrapped__);return(r.__actions__=ne(this.__actions__)).push({func:e,args:arguments,thisArg:t}),r.__chain__=n,r}return e.apply(t,ce([this.value()],arguments))}}(d))}return t}function Sa(){return Qt._=ro,this}function Fa(){}function Ca(t){return tr(t)?ze(t):qe(t)}function ja(t){return function(e){return je(t,hr(e),e+"")}}function Ha(t,e,n){n&&Qn(t,e,n)&&(e=n=D),t=+t||0,n=null==n?1:+n||0,null==e?(e=t,t=0):e=+e||0;for(var r=-1,i=Lo(mo((e-t)/(n||1)),0),a=Ia(i);++r<i;)a[r]=t,t+=n;return a}function Oa(t,e,n){if((t=go(t))<1||!Mo(t))return[];var r=-1,i=Ia(ko(t,Ao));for(e=on(e,n,1);++r<t;)r<Ao?i[r]=e(r):e(r);return i}function Pa(t){var e=++eo;return u(t)+e}function Na(t,e){return(+t||0)+(+e||0)}function Ba(t,e,n){return n&&Qn(t,e,n)&&(e=D),e=Rn(e,n,3),1==e.length?fe(Au(t)?t:lr(t),e):Xe(t,e)}t=t?te.defaults(Qt.Object(),t,te.pick(Qt,Pt)):Qt;var Ia=t.Array,Ra=t.Date,Wa=t.Error,za=t.Function,qa=t.Math,Ua=t.Number,$a=t.Object,Va=t.RegExp,Ga=t.String,Ja=t.TypeError,Za=Ia.prototype,Ka=$a.prototype,Xa=Ga.prototype,Qa=za.prototype.toString,to=Ka.hasOwnProperty,eo=0,no=Ka.toString,ro=Qt._,io=Va("^"+Qa.call(to).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ao=t.ArrayBuffer,oo=t.clearTimeout,uo=t.parseFloat,so=qa.pow,co=Ka.propertyIsEnumerable,lo=Un(t,"Set"),ho=t.setTimeout,fo=Za.splice,_o=t.Uint8Array,po=Un(t,"WeakMap"),mo=qa.ceil,yo=Un($a,"create"),go=qa.floor,vo=Un(Ia,"isArray"),Mo=t.isFinite,bo=Un($a,"keys"),Lo=qa.max,ko=qa.min,wo=Un(Ra,"now"),Do=t.parseInt,xo=qa.random,Yo=Ua.NEGATIVE_INFINITY,To=Ua.POSITIVE_INFINITY,Ao=4294967295,Eo=Ao-1,So=Ao>>>1,Fo=9007199254740991,Co=po&&new po,jo={};e.support={};e.templateSettings={escape:gt,evaluate:vt,interpolate:Mt,variable:"",imports:{_:e}};var Ho=function(){function t(){}return function(e){if(ji(e)){t.prototype=e;var n=new t;t.prototype=D}return n||{}}}(),Oo=hn(Se),Po=hn(Fe,!0),No=fn(),Bo=fn(!0),Io=Co?function(t,e){return Co.set(t,e),t}:Ya,Ro=Co?function(t){return Co.get(t)}:Fa,Wo=ze("length"),zo=function(){var t=0,e=0;return function(n,r){var i=pu(),a=B-(i-e);if(e=i,a>0){if(++t>=N)return n}else t=0;return Io(n,r)}}(),qo=yi(function(t,e){return y(t)&&Kn(t)?ke(t,Ae(e,!1,!0)):[]}),Uo=Ln(),$o=Ln(!0),Vo=yi(function(t){for(var e=t.length,n=e,r=Ia(d),i=zn(),o=i==a,u=[];n--;){var s=t[n]=Kn(s=t[n])?s:[];r[n]=o&&s.length>=120?pn(n&&s):null}var c=t[0],l=-1,d=c?c.length:0,h=r[0];t:for(;++l<d;)if(s=c[l],(h?Kt(h,s):i(u,s,0))<0){for(var n=e;--n;){var f=r[n];if((f?Kt(f,s):i(t[n],s,0))<0)continue t}h&&h.push(s),u.push(s)}return u}),Go=yi(function(t,e){e=Ae(e);var n=ge(t,e);return Ue(t,e.sort(r)),n}),Jo=On(),Zo=On(!0),Ko=yi(function(t){return Qe(Ae(t,!1,!0))}),Xo=yi(function(t,e){return Kn(t)?ke(t,e):[]}),Qo=yi(Pr),tu=yi(function(t){var e=t.length,n=e>2?t[e-2]:D,r=e>1?t[e-1]:D;return e>2&&"function"==typeof n?e-=2:(n=e>1&&"function"==typeof r?(--e,r):D,r=D),t.length=e,Nr(t,n,r)}),eu=yi(function(t){return t=Ae(t),this.thru(function(e){return ee(Au(e)?e:[dr(e)],t)})}),nu=yi(function(t,e){return ge(t,Ae(e))}),ru=ln(function(t,e,n){to.call(t,n)?++t[n]:t[n]=1}),iu=bn(Oo),au=bn(Po,!0),ou=Dn(re,Oo),uu=Dn(ie,Po),su=ln(function(t,e,n){to.call(t,n)?t[n].push(e):t[n]=[e]}),cu=ln(function(t,e,n){t[n]=e}),lu=yi(function(t,e,n){var r=-1,i="function"==typeof e,a=tr(e),o=Kn(t)?Ia(t.length):[];return Oo(t,function(t){var u=i?e:a&&null!=t?t[e]:D;o[++r]=u?u.apply(t,n):Zn(t,e,n)}),o}),du=ln(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),hu=Sn(le,Oo),fu=Sn(de,Po),_u=yi(function(t,e){if(null==t)return[];var n=e[2];return n&&Qn(e[0],e[1],n)&&(e.length=1),Ke(t,Ae(e),[])}),pu=wo||function(){return(new Ra).getTime()},mu=yi(function(t,e,n){var r=Y;if(n.length){var i=v(n,mu.placeholder);r|=F}return Pn(t,r,e,n,i)}),yu=yi(function(t,e){e=e.length?Ae(e):Zi(t);for(var n=-1,r=e.length;++n<r;){var i=e[n];t[i]=Pn(t[i],Y,t)}return t}),gu=yi(function(t,e,n){var r=Y|T;if(n.length){var i=v(n,gu.placeholder);r|=F}return Pn(e,r,t,n,i)}),vu=gn(E),Mu=gn(S),bu=yi(function(t,e){return Le(t,1,e)}),Lu=yi(function(t,e,n){return Le(t,e,n)}),ku=wn(),wu=wn(!0),Du=yi(function(t,e){if(e=Ae(e),"function"!=typeof t||!ae(e,o))throw new Ja(z);var n=e.length;return yi(function(r){for(var i=ko(r.length,n);i--;)r[i]=e[i](r[i]);return t.apply(this,r)})}),xu=En(F),Yu=En(C),Tu=yi(function(t,e){return Pn(t,H,D,D,D,Ae(e))}),Au=vo||function(t){return y(t)&&nr(t.length)&&no.call(t)==$},Eu=dn(Re),Su=dn(function(t,e,n){return n?me(t,e,n):ye(t,e)}),Fu=vn(Su,_e),Cu=vn(Eu,ar),ju=kn(Se),Hu=kn(Fe),Ou=xn(No),Pu=xn(Bo),Nu=Yn(Se),Bu=Yn(Fe),Iu=bo?function(t){var e=null==t?D:t.constructor;return"function"==typeof e&&e.prototype===t||"function"!=typeof t&&Kn(t)?cr(t):ji(t)?bo(t):[]}:cr,Ru=Tn(!0),Wu=Tn(),zu=yi(function(t,e){if(null==t)return{};if("function"!=typeof e[0]){var e=se(Ae(e),Ga);return or(t,ke(ta(t),e))}var n=on(e[0],e[1],3);return ur(t,function(t,e,r){return!n(t,e,r)})}),qu=yi(function(t,e){return null==t?{}:"function"==typeof e[0]?ur(t,on(e[0],e[1],3)):or(t,Ae(e))}),Uu=mn(function(t,e,n){return e=e.toLowerCase(),t+(n?e.charAt(0).toUpperCase()+e.slice(1):e)}),$u=mn(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),Vu=An(),Gu=An(!0),Ju=mn(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()}),Zu=mn(function(t,e,n){return t+(n?" ":"")+(e.charAt(0).toUpperCase()+e.slice(1))}),Ku=yi(function(t,e){try{return t.apply(D,e)}catch(t){return Si(t)?t:new Wa(t)}}),Xu=yi(function(t,e){return function(n){return Zn(n,t,e)}}),Qu=yi(function(t,e){return function(n){return Zn(t,n,e)}}),ts=Hn("ceil"),es=Hn("floor"),ns=Mn(ki,Yo),rs=Mn(Ui,To),is=Hn("round");return e.prototype=n.prototype,g.prototype=Ho(n.prototype),g.prototype.constructor=g,Rt.prototype=Ho(n.prototype),Rt.prototype.constructor=Rt,Ut.prototype.delete=$t,Ut.prototype.get=Vt,Ut.prototype.has=Gt,Ut.prototype.set=Jt,Zt.prototype.push=Xt,_i.Cache=Ut,e.after=li,e.ary=di,e.assign=Su,e.at=nu,e.before=hi,e.bind=mu,e.bindAll=yu,e.bindKey=gu,e.callback=Da,e.chain=Rr,e.chunk=_r,e.compact=pr,e.constant=xa,e.countBy=ru,e.create=Ji,e.curry=vu,e.curryRight=Mu,e.debounce=fi,e.defaults=Fu,e.defaultsDeep=Cu,e.defer=bu,e.delay=Lu,e.difference=qo,e.drop=mr,e.dropRight=yr,e.dropRightWhile=gr,e.dropWhile=vr,e.fill=Mr,e.filter=Kr,e.flatten=Lr,e.flattenDeep=kr,e.flow=ku,e.flowRight=wu,e.forEach=ou,e.forEachRight=uu,e.forIn=Ou,e.forInRight=Pu,e.forOwn=Nu,e.forOwnRight=Bu,e.functions=Zi,e.groupBy=su,e.indexBy=cu,e.initial=Dr,e.intersection=Vo,e.invert=Qi,e.invoke=lu,e.keys=Iu,e.keysIn=ta,e.map=ti,e.mapKeys=Ru,e.mapValues=Wu,e.matches=Ta,e.matchesProperty=Aa,e.memoize=_i,e.merge=Eu,e.method=Xu,e.methodOf=Qu,e.mixin=Ea,e.modArgs=Du,e.negate=pi,e.omit=zu,e.once=mi,e.pairs=ea,e.partial=xu,e.partialRight=Yu,e.partition=du,e.pick=qu,e.pluck=ei,e.property=Ca,e.propertyOf=ja,e.pull=Tr,e.pullAt=Go,e.range=Ha,e.rearg=Tu,e.reject=ni,e.remove=Ar,e.rest=Er,e.restParam=yi,e.set=ra,e.shuffle=ii,e.slice=Sr,e.sortBy=ui,e.sortByAll=_u,e.sortByOrder=si,e.spread=gi,e.take=Fr,e.takeRight=Cr,e.takeRightWhile=jr,e.takeWhile=Hr,e.tap=Wr,e.throttle=vi,e.thru=zr,e.times=Oa,e.toArray=Vi,e.toPlainObject=Gi,e.transform=ia,e.union=Ko,e.uniq=Or,e.unzip=Pr,e.unzipWith=Nr,e.values=aa,e.valuesIn=oa,e.where=ci,e.without=Xo,e.wrap=Mi,e.xor=Br,e.zip=Qo,e.zipObject=Ir,e.zipWith=tu,e.backflow=wu,e.collect=ti,e.compose=wu,e.each=ou,e.eachRight=uu,e.extend=Su,e.iteratee=Da,e.methods=Zi,e.object=Ir,e.select=Kr,e.tail=Er,e.unique=Or,Ea(e,e),e.add=Na,e.attempt=Ku,e.camelCase=Uu,e.capitalize=ca,e.ceil=ts,e.clone=bi,e.cloneDeep=Li,e.deburr=la,e.endsWith=da,e.escape=ha,e.escapeRegExp=fa,e.every=Zr,e.find=iu,e.findIndex=Uo,e.findKey=ju,e.findLast=au,e.findLastIndex=$o,e.findLastKey=Hu,e.findWhere=Xr,e.first=br,e.floor=es,e.get=Ki,e.gt=ki,e.gte=wi,e.has=Xi,e.identity=Ya,e.includes=Qr,e.indexOf=wr,e.inRange=ua,e.isArguments=Di,e.isArray=Au,e.isBoolean=xi,e.isDate=Yi,e.isElement=Ti,e.isEmpty=Ai,e.isEqual=Ei,e.isError=Si,e.isFinite=Fi,e.isFunction=Ci,e.isMatch=Hi,e.isNaN=Oi,e.isNative=Pi,e.isNull=Ni,e.isNumber=Bi,e.isObject=ji,e.isPlainObject=Ii,e.isRegExp=Ri,e.isString=Wi,e.isTypedArray=zi,e.isUndefined=qi,e.kebabCase=$u,e.last=xr,e.lastIndexOf=Yr,e.lt=Ui,e.lte=$i,e.max=ns,e.min=rs,e.noConflict=Sa,e.noop=Fa,e.now=pu,e.pad=_a,e.padLeft=Vu,e.padRight=Gu,e.parseInt=pa,e.random=sa,e.reduce=hu,e.reduceRight=fu,e.repeat=ma,e.result=na,e.round=is,e.runInContext=w,e.size=ai,e.snakeCase=Ju,e.some=oi,e.sortedIndex=Jo,e.sortedLastIndex=Zo,e.startCase=Zu,e.startsWith=ya,e.sum=Ba,e.template=ga,e.trim=va,e.trimLeft=Ma,e.trimRight=ba,e.trunc=La,e.unescape=ka,e.uniqueId=Pa,e.words=wa,e.all=Zr,e.any=oi,e.contains=Qr,e.eq=Ei,e.detect=iu,e.foldl=hu,e.foldr=fu,e.head=br,e.include=Qr,e.inject=hu,Ea(e,function(){var t={};return Se(e,function(n,r){e.prototype[r]||(t[r]=n)}),t}(),!1),e.sample=ri,e.prototype.sample=function(t){return this.__chain__||null!=t?this.thru(function(e){return ri(e,t)}):ri(this.value())},e.VERSION=x,re(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){e[t].placeholder=e}),re(["drop","take"],function(t,e){Rt.prototype[t]=function(n){var r=this.__filtered__;if(r&&!e)return new Rt(this);n=null==n?1:Lo(go(n)||0,0);var i=this.clone();return r?i.__takeCount__=ko(i.__takeCount__,n):i.__views__.push({size:n,type:t+(i.__dir__<0?"Right":"")}),i},Rt.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),re(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n!=W;Rt.prototype[t]=function(t,e){var i=this.clone();return i.__iteratees__.push({iteratee:Rn(t,e,1),type:n}),i.__filtered__=i.__filtered__||r,i}}),re(["first","last"],function(t,e){var n="take"+(e?"Right":"");Rt.prototype[t]=function(){return this[n](1).value()[0]}}),re(["initial","rest"],function(t,e){var n="drop"+(e?"":"Right");Rt.prototype[t]=function(){return this.__filtered__?new Rt(this):this[n](1)}}),re(["pluck","where"],function(t,e){var n=e?"filter":"map",r=e?Be:Ca;Rt.prototype[t]=function(t){return this[n](r(t))}}),Rt.prototype.compact=function(){return this.filter(Ya)},Rt.prototype.reject=function(t,e){return t=Rn(t,e,1),this.filter(function(e){return!t(e)})},Rt.prototype.slice=function(t,e){t=null==t?0:+t||0;var n=this;return n.__filtered__&&(t>0||e<0)?new Rt(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==D&&(e=+e||0,n=e<0?n.dropRight(-e):n.take(e-t)),n)},Rt.prototype.takeRightWhile=function(t,e){return this.reverse().takeWhile(t,e).reverse()},Rt.prototype.toArray=function(){return this.take(To)},Se(Rt.prototype,function(t,n){var r=/^(?:filter|map|reject)|While$/.test(n),i=/^(?:first|last)$/.test(n),a=e[i?"take"+("last"==n?"Right":""):n];a&&(e.prototype[n]=function(){var e=i?[1]:arguments,n=this.__chain__,o=this.__wrapped__,u=!!this.__actions__.length,s=o instanceof Rt,c=e[0],l=s||Au(o);l&&r&&"function"==typeof c&&1!=c.length&&(s=l=!1);var d=function(t){return i&&n?a(t,1)[0]:a.apply(D,ce([t],e))},h={func:zr,args:[d],thisArg:D},f=s&&!u;if(i&&!n)return f?(o=o.clone(),o.__actions__.push(h),t.call(o)):a.call(D,this.value())[0];if(!i&&l){o=f?o:new Rt(this);var _=t.apply(o,e);return _.__actions__.push(h),new g(_,n)}return this.thru(d)})}),re(["join","pop","push","replace","shift","sort","splice","split","unshift"],function(t){var n=(/^(?:replace|split)$/.test(t)?Xa:Za)[t],r=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",i=/^(?:join|pop|replace|shift)$/.test(t);e.prototype[t]=function(){var t=arguments;return i&&!this.__chain__?n.apply(this.value(),t):this[r](function(e){return n.apply(e,t)})}}),Se(Rt.prototype,function(t,n){var r=e[n];if(r){var i=r.name;(jo[i]||(jo[i]=[])).push({name:n,func:r})}}),jo[Fn(D,T).name]=[{name:"wrapper",func:D}],Rt.prototype.clone=Wt,Rt.prototype.reverse=zt,Rt.prototype.value=qt,e.prototype.chain=qr,e.prototype.commit=Ur,e.prototype.concat=eu,e.prototype.plant=$r,e.prototype.reverse=Vr,e.prototype.toString=Gr,e.prototype.run=e.prototype.toJSON=e.prototype.valueOf=e.prototype.value=Jr,e.prototype.collect=e.prototype.map,e.prototype.head=e.prototype.first,e.prototype.select=e.prototype.filter,e.prototype.tail=e.prototype.rest,e}var D,x="3.10.1",Y=1,T=2,A=4,E=8,S=16,F=32,C=64,j=128,H=256,O=30,P="...",N=150,B=16,I=200,R=1,W=2,z="Expected a function",q="__lodash_placeholder__",U="[object Arguments]",$="[object Array]",V="[object Boolean]",G="[object Date]",J="[object Error]",Z="[object Function]",K="[object Number]",X="[object Object]",Q="[object RegExp]",tt="[object String]",et="[object ArrayBuffer]",nt="[object Float32Array]",rt="[object Float64Array]",it="[object Int8Array]",at="[object Int16Array]",ot="[object Int32Array]",ut="[object Uint8Array]",st="[object Uint8ClampedArray]",ct="[object Uint16Array]",lt="[object Uint32Array]",dt=/\b__p \+= '';/g,ht=/\b(__p \+=) '' \+/g,ft=/(__e\(.*?\)|\b__t\)) \+\n'';/g,_t=/&(?:amp|lt|gt|quot|#39|#96);/g,pt=/[&<>"'`]/g,mt=RegExp(_t.source),yt=RegExp(pt.source),gt=/<%-([\s\S]+?)%>/g,vt=/<%([\s\S]+?)%>/g,Mt=/<%=([\s\S]+?)%>/g,bt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,Lt=/^\w*$/,kt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,wt=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,Dt=RegExp(wt.source),xt=/[\u0300-\u036f\ufe20-\ufe23]/g,Yt=/\\(\\)?/g,Tt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,At=/\w*$/,Et=/^0[xX]/,St=/^\[object .+?Constructor\]$/,Ft=/^\d+$/,Ct=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,jt=/($^)/,Ht=/['\n\r\u2028\u2029\\]/g,Ot=function(){var t="[A-Z\\xc0-\\xd6\\xd8-\\xde]",e="[a-z\\xdf-\\xf6\\xf8-\\xff]+";return RegExp(t+"+(?="+t+e+")|"+t+"?"+e+"|"+t+"+|[0-9]+","g")}(),Pt=["Array","ArrayBuffer","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Math","Number","Object","RegExp","Set","String","_","clearTimeout","isFinite","parseFloat","parseInt","setTimeout","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap"],Nt=-1,Bt={};Bt[nt]=Bt[rt]=Bt[it]=Bt[at]=Bt[ot]=Bt[ut]=Bt[st]=Bt[ct]=Bt[lt]=!0,Bt[U]=Bt[$]=Bt[et]=Bt[V]=Bt[G]=Bt[J]=Bt[Z]=Bt["[object Map]"]=Bt[K]=Bt[X]=Bt[Q]=Bt["[object Set]"]=Bt[tt]=Bt["[object WeakMap]"]=!1;var It={};It[U]=It[$]=It[et]=It[V]=It[G]=It[nt]=It[rt]=It[it]=It[at]=It[ot]=It[K]=It[X]=It[Q]=It[tt]=It[ut]=It[st]=It[ct]=It[lt]=!0,It[J]=It[Z]=It["[object Map]"]=It["[object Set]"]=It["[object WeakMap]"]=!1;var Rt={"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss"},Wt={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},zt={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},qt={function:!0,object:!0},Ut={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},$t={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Vt=qt[typeof e]&&e&&!e.nodeType&&e,Gt=qt[typeof t]&&t&&!t.nodeType&&t,Jt=Vt&&Gt&&"object"==typeof n&&n&&n.Object&&n,Zt=qt[typeof self]&&self&&self.Object&&self,Kt=qt[typeof window]&&window&&window.Object&&window,Xt=Gt&&Gt.exports===Vt&&Vt,Qt=Jt||Kt!==(this&&this.window)&&Kt||Zt||this,te=w();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Qt._=te,define(function(){return te})):Vt&&Gt?Xt?(Gt.exports=te)._=te:Vt._=te:Qt._=te}).call(this)}).call(e,n(4)(t),n(9))},function(t,e,n){"use strict";function r(t){var e="greedy"===t.graph().acyclicer?u(t,function(t){return function(e){return t.edge(e).weight}}(t)):i(t);o.each(e,function(e){var n=t.edge(e);t.removeEdge(e),n.forwardName=e.name,n.reversed=!0,t.setEdge(e.w,e.v,n,o.uniqueId("rev"))})}function i(t){function e(a){o.has(i,a)||(i[a]=!0,r[a]=!0,o.each(t.outEdges(a),function(t){o.has(r,t.w)?n.push(t):e(t.w)}),delete r[a])}var n=[],r={},i={};return o.each(t.nodes(),e),n}function a(t){o.each(t.edges(),function(e){var n=t.edge(e);if(n.reversed){t.removeEdge(e);var r=n.forwardName;delete n.reversed,delete n.forwardName,t.setEdge(e.w,e.v,n,r)}})}var o=n(1),u=n(205);t.exports={run:r,undo:a}},function(t,e,n){function r(t,e){if(t.nodeCount()<=1)return[];var n=o(t,e||d),r=i(n.graph,n.buckets,n.zeroIdx);return s.flatten(s.map(r,function(e){return t.outEdges(e.v,e.w)}),!0)}function i(t,e,n){for(var r,i=[],o=e[e.length-1],u=e[0];t.nodeCount();){for(;r=u.dequeue();)a(t,e,n,r);for(;r=o.dequeue();)a(t,e,n,r);if(t.nodeCount())for(var s=e.length-2;s>0;--s)if(r=e[s].dequeue()){i=i.concat(a(t,e,n,r,!0));break}}return i}function a(t,e,n,r,i){var a=i?[]:void 0;return s.each(t.inEdges(r.v),function(r){var o=t.edge(r),s=t.node(r.v);i&&a.push({v:r.v,w:r.w}),s.out-=o,u(e,n,s)}),s.each(t.outEdges(r.v),function(r){var i=t.edge(r),a=r.w,o=t.node(a);o.in-=i,u(e,n,o)}),t.removeNode(r.v),a}function o(t,e){var n=new c,r=0,i=0;s.each(t.nodes(),function(t){n.setNode(t,{v:t,in:0,out:0})}),s.each(t.edges(),function(t){var a=n.edge(t.v,t.w)||0,o=e(t),u=a+o;n.setEdge(t.v,t.w,u),i=Math.max(i,n.node(t.v).out+=o),r=Math.max(r,n.node(t.w).in+=o)});var a=s.range(i+r+3).map(function(){return new l}),o=r+1;return s.each(n.nodes(),function(t){u(a,o,n.node(t))}),{graph:n,buckets:a,zeroIdx:o}}function u(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)}var s=n(1),c=n(8).Graph,l=n(206);t.exports=r;var d=s.constant(1)},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";function r(t){t.graph().dummyChains=[],o.each(t.edges(),function(e){i(t,e)})}function i(t,e){var n=e.v,r=t.node(n).rank,i=e.w,a=t.node(i).rank,o=e.name,s=t.edge(e),c=s.labelRank;if(a!==r+1){t.removeEdge(e);var l,d,h;for(h=0,++r;r<a;++h,++r)s.points=[],d={width:0,height:0,edgeLabel:s,edgeObj:e,rank:r},l=u.addDummyNode(t,"edge",d,"_d"),r===c&&(d.width=s.width,d.height=s.height,d.dummy="edge-label",d.labelpos=s.labelpos),t.setEdge(n,l,{weight:s.weight},o),0===h&&t.graph().dummyChains.push(l),n=l;t.setEdge(n,i,{weight:s.weight},o)}}function a(t){o.each(t.graph().dummyChains,function(e){var n,r=t.node(e),i=r.edgeLabel;for(t.setEdge(r.edgeObj,i);r.dummy;)n=t.successors(e)[0],t.removeNode(e),i.points.push({x:r.x,y:r.y}),"edge-label"===r.dummy&&(i.x=r.x,i.y=r.y,i.width=r.width,i.height=r.height),e=n,r=t.node(e)})}var o=n(1),u=n(3);t.exports={run:r,undo:a}},function(t,e,n){"use strict";function r(t){switch(t.graph().ranker){case"network-simplex":a(t);break;case"tight-tree":i(t);break;case"longest-path":l(t);break;default:a(t)}}function i(t){u(t),s(t)}function a(t){c(t)}var o=n(17),u=o.longestPath,s=n(39),c=n(209);t.exports=r;var l=u},function(t,e,n){"use strict";function r(t){t=b(t),g(t);var e=m(t);u(e),i(e,t);for(var n,r;n=c(e);)r=l(e,t,n),d(e,t,n,r)}function i(t,e){var n=M(t,t.nodes());n=n.slice(0,n.length-1),p.each(n,function(n){a(t,e,n)})}function a(t,e,n){var r=t.node(n),i=r.parent;t.edge(n,i).cutvalue=o(t,e,n)}function o(t,e,n){var r=t.node(n),i=r.parent,a=!0,o=e.edge(n,i),u=0;return o||(a=!1,o=e.edge(i,n)),u=o.weight,p.each(e.nodeEdges(n),function(r){var o=r.v===n,s=o?r.w:r.v;if(s!==i){var c=o===a,l=e.edge(r).weight;if(u+=c?l:-l,f(t,n,s)){var d=t.edge(n,s).cutvalue;u+=c?-d:d}}}),u}function u(t,e){arguments.length<2&&(e=t.nodes()[0]),s(t,{},1,e)}function s(t,e,n,r,i){var a=n,o=t.node(r);return e[r]=!0,p.each(t.neighbors(r),function(i){p.has(e,i)||(n=s(t,e,n,i,r))}),o.low=a,o.lim=n++,i?o.parent=i:delete o.parent,n}function c(t){return p.find(t.edges(),function(e){return t.edge(e).cutvalue<0})}function l(t,e,n){var r=n.v,i=n.w;e.hasEdge(r,i)||(r=n.w,i=n.v);var a=t.node(r),o=t.node(i),u=a,s=!1;a.lim>o.lim&&(u=o,s=!0);var c=p.filter(e.edges(),function(e){return s===_(t,t.node(e.v),u)&&s!==_(t,t.node(e.w),u)});return p.min(c,function(t){return y(e,t)})}function d(t,e,n,r){var a=n.v,o=n.w;t.removeEdge(a,o),t.setEdge(r.v,r.w,{}),u(t),i(t,e),h(t,e)}function h(t,e){var n=p.find(t.nodes(),function(t){return!e.node(t).parent}),r=v(t,n);r=r.slice(1),p.each(r,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)})}function f(t,e,n){return t.hasEdge(e,n)}function _(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}var p=n(1),m=n(39),y=n(17).slack,g=n(17).longestPath,v=n(8).alg.preorder,M=n(8).alg.postorder,b=n(3).simplify;t.exports=r,r.initLowLimValues=u,r.initCutValues=i,r.calcCutValue=o,r.leaveEdge=c,r.enterEdge=l,r.exchangeEdges=d},function(t,e,n){function r(t){var e=a(t);o.each(t.graph().dummyChains,function(n){for(var r=t.node(n),a=r.edgeObj,o=i(t,e,a.v,a.w),u=o.path,s=o.lca,c=0,l=u[c],d=!0;n!==a.w;){if(r=t.node(n),d){for(;(l=u[c])!==s&&t.node(l).maxRank<r.rank;)c++;l===s&&(d=!1)}if(!d){for(;c<u.length-1&&t.node(l=u[c+1]).minRank<=r.rank;)c++;l=u[c]}t.setParent(n,l),n=t.successors(n)[0]}})}function i(t,e,n,r){var i,a,o=[],u=[],s=Math.min(e[n].low,e[r].low),c=Math.max(e[n].lim,e[r].lim);i=n;do{i=t.parent(i),o.push(i)}while(i&&(e[i].low>s||c>e[i].lim));for(a=i,i=r;(i=t.parent(i))!==a;)u.push(i);return{path:o.concat(u.reverse()),lca:a}}function a(t){function e(i){var a=r;o.each(t.children(i),e),n[i]={low:a,lim:r++}}var n={},r=0;return o.each(t.children(),e),n}var o=n(1);t.exports=r},function(t,e,n){function r(t){var e=c.addDummyNode(t,"root",{},"_root"),n=a(t),r=s.max(n)-1,u=2*r+1;t.graph().nestingRoot=e,s.each(t.edges(),function(e){t.edge(e).minlen*=u});var l=o(t)+1;s.each(t.children(),function(a){i(t,e,u,l,r,n,a)}),t.graph().nodeRankFactor=u}function i(t,e,n,r,a,o,u){var l=t.children(u);if(!l.length)return void(u!==e&&t.setEdge(e,u,{weight:0,minlen:n}));var d=c.addBorderNode(t,"_bt"),h=c.addBorderNode(t,"_bb"),f=t.node(u);t.setParent(d,u),f.borderTop=d,t.setParent(h,u),f.borderBottom=h,s.each(l,function(s){i(t,e,n,r,a,o,s);var c=t.node(s),l=c.borderTop?c.borderTop:s,f=c.borderBottom?c.borderBottom:s,_=c.borderTop?r:2*r,p=l!==f?1:a-o[u]+1;t.setEdge(d,l,{weight:_,minlen:p,nestingEdge:!0}),t.setEdge(f,h,{weight:_,minlen:p,nestingEdge:!0})}),t.parent(u)||t.setEdge(e,d,{weight:0,minlen:a+o[u]})}function a(t){function e(r,i){var a=t.children(r);a&&a.length&&s.each(a,function(t){e(t,i+1)}),n[r]=i}var n={};return s.each(t.children(),function(t){e(t,1)}),n}function o(t){return s.reduce(t.edges(),function(e,n){return e+t.edge(n).weight},0)}function u(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,s.each(t.edges(),function(e){t.edge(e).nestingEdge&&t.removeEdge(e)})}var s=n(1),c=n(3);t.exports={run:r,cleanup:u}},function(t,e,n){function r(t){function e(n){var r=t.children(n),o=t.node(n);if(r.length&&a.each(r,e),a.has(o,"minRank")){o.borderLeft=[],o.borderRight=[];for(var u=o.minRank,s=o.maxRank+1;u<s;++u)i(t,"borderLeft","_bl",n,o,u),i(t,"borderRight","_br",n,o,u)}}a.each(t.children(),e)}function i(t,e,n,r,i,a){var u={width:0,height:0,rank:a,borderType:e},s=i[e][a-1],c=o.addDummyNode(t,"border",u,n);i[e][a]=c,t.setParent(c,r),s&&t.setEdge(s,c,{weight:1})}var a=n(1),o=n(3);t.exports=r},function(t,e,n){"use strict";function r(t){var e=t.graph().rankdir.toLowerCase();"lr"!==e&&"rl"!==e||a(t)}function i(t){var e=t.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||u(t),"lr"!==e&&"rl"!==e||(c(t),a(t))}function a(t){d.each(t.nodes(),function(e){o(t.node(e))}),d.each(t.edges(),function(e){o(t.edge(e))})}function o(t){var e=t.width;t.width=t.height,t.height=e}function u(t){d.each(t.nodes(),function(e){s(t.node(e))}),d.each(t.edges(),function(e){var n=t.edge(e);d.each(n.points,s),d.has(n,"y")&&s(n)})}function s(t){t.y=-t.y}function c(t){d.each(t.nodes(),function(e){l(t.node(e))}),d.each(t.edges(),function(e){var n=t.edge(e);d.each(n.points,l),d.has(n,"x")&&l(n)})}function l(t){var e=t.x;t.x=t.y,t.y=e}var d=n(1);t.exports={adjust:r,undo:i}},function(t,e,n){"use strict";function r(t){var e=_.maxRank(t),n=i(t,u.range(1,e+1),"inEdges"),r=i(t,u.range(e-1,-1,-1),"outEdges"),l=s(t);o(t,l);for(var d,h=Number.POSITIVE_INFINITY,f=0,p=0;p<4;++f,++p){a(f%2?n:r,f%4>=2),l=_.buildLayerMatrix(t);var m=c(t,l);m<h&&(p=0,d=u.cloneDeep(l),h=m)}o(t,d)}function i(t,e,n){return u.map(e,function(e){return d(t,e,n)})}function a(t,e){var n=new f;u.each(t,function(t){var r=t.graph().root,i=l(t,r,n,e);u.each(i.vs,function(e,n){t.node(e).order=n}),h(t,n,i.vs)})}function o(t,e){u.each(e,function(e){u.each(e,function(e,n){t.node(e).order=n})})}var u=n(1),s=n(215),c=n(216),l=n(217),d=n(221),h=n(222),f=n(8).Graph,_=n(3);t.exports=r},function(t,e,n){"use strict";function r(t){function e(r){if(!i.has(n,r)){n[r]=!0;var a=t.node(r);o[a.rank].push(r),i.each(t.successors(r),e)}}var n={},r=i.filter(t.nodes(),function(e){return!t.children(e).length}),a=i.max(i.map(r,function(e){return t.node(e).rank})),o=i.map(i.range(a+1),function(){return[]}),u=i.sortBy(r,function(e){return t.node(e).rank});return i.each(u,e),o}var i=n(1);t.exports=r},function(t,e,n){"use strict";function r(t,e){for(var n=0,r=1;r<e.length;++r)n+=i(t,e[r-1],e[r]);return n}function i(t,e,n){for(var r=a.zipObject(n,a.map(n,function(t,e){return e})),i=a.flatten(a.map(e,function(e){return a.chain(t.outEdges(e)).map(function(e){return{pos:r[e.w],weight:t.edge(e).weight}}).sortBy("pos").value()}),!0),o=1;o<n.length;)o<<=1;var u=2*o-1;o-=1;var s=a.map(new Array(u),function(){return 0}),c=0;return a.each(i.forEach(function(t){var e=t.pos+o;s[e]+=t.weight;for(var n=0;e>0;)e%2&&(n+=s[e+1]),e=e-1>>1,s[e]+=t.weight;c+=t.weight*n})),c}var a=n(1);t.exports=r},function(t,e,n){function r(t,e,n,l){var d=t.children(e),h=t.node(e),f=h?h.borderLeft:void 0,_=h?h.borderRight:void 0,p={};f&&(d=o.filter(d,function(t){return t!==f&&t!==_}));var m=u(t,d);o.each(m,function(e){if(t.children(e.v).length){var i=r(t,e.v,n,l);p[e.v]=i,o.has(i,"barycenter")&&a(e,i)}});var y=s(m,n);i(y,p);var g=c(y,l);if(f&&(g.vs=o.flatten([f,g.vs,_],!0),t.predecessors(f).length)){var v=t.node(t.predecessors(f)[0]),M=t.node(t.predecessors(_)[0]);o.has(g,"barycenter")||(g.barycenter=0,g.weight=0),g.barycenter=(g.barycenter*g.weight+v.order+M.order)/(g.weight+2),g.weight+=2}return g}function i(t,e){o.each(t,function(t){t.vs=o.flatten(t.vs.map(function(t){return e[t]?e[t].vs:t}),!0)})}function a(t,e){o.isUndefined(t.barycenter)?(t.barycenter=e.barycenter,t.weight=e.weight):(t.barycenter=(t.barycenter*t.weight+e.barycenter*e.weight)/(t.weight+e.weight),t.weight+=e.weight)}var o=n(1),u=n(218),s=n(219),c=n(220);t.exports=r},function(t,e,n){function r(t,e){return i.map(e,function(e){var n=t.inEdges(e);if(n.length){var r=i.reduce(n,function(e,n){var r=t.edge(n),i=t.node(n.v);return{sum:e.sum+r.weight*i.order,weight:e.weight+r.weight}},{sum:0,weight:0});return{v:e,barycenter:r.sum/r.weight,weight:r.weight}}return{v:e}})}var i=n(1);t.exports=r},function(t,e,n){"use strict";function r(t,e){var n={};return o.each(t,function(t,e){var r=n[t.v]={indegree:0,in:[],out:[],vs:[t.v],i:e};o.isUndefined(t.barycenter)||(r.barycenter=t.barycenter,r.weight=t.weight)}),o.each(e.edges(),function(t){var e=n[t.v],r=n[t.w];o.isUndefined(e)||o.isUndefined(r)||(r.indegree++,e.out.push(n[t.w]))}),i(o.filter(n,function(t){return!t.indegree}))}function i(t){for(var e=[];t.length;){var n=t.pop();e.push(n),o.each(n.in.reverse(),function(t){return function(e){e.merged||(o.isUndefined(e.barycenter)||o.isUndefined(t.barycenter)||e.barycenter>=t.barycenter)&&a(t,e)}}(n)),o.each(n.out,function(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}(n))}return o.chain(e).filter(function(t){return!t.merged}).map(function(t){return o.pick(t,["vs","i","barycenter","weight"])}).value()}function a(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}var o=n(1);t.exports=r},function(t,e,n){function r(t,e){var n=u.partition(t,function(t){return o.has(t,"barycenter")}),r=n.lhs,s=o.sortBy(n.rhs,function(t){return-t.i}),c=[],l=0,d=0,h=0;r.sort(a(!!e)),h=i(c,s,h),o.each(r,function(t){h+=t.vs.length,c.push(t.vs),l+=t.barycenter*t.weight,d+=t.weight,h=i(c,s,h)});var f={vs:o.flatten(c,!0)};return d&&(f.barycenter=l/d,f.weight=d),f}function i(t,e,n){for(var r;e.length&&(r=o.last(e)).i<=n;)e.pop(),t.push(r.vs),n++;return n}function a(t){return function(e,n){return e.barycenter<n.barycenter?-1:e.barycenter>n.barycenter?1:t?n.i-e.i:e.i-n.i}}var o=n(1),u=n(3);t.exports=r},function(t,e,n){function r(t,e,n){var r=i(t),u=new o({compound:!0}).setGraph({root:r}).setDefaultNodeLabel(function(e){return t.node(e)});return a.each(t.nodes(),function(i){var o=t.node(i),s=t.parent(i);(o.rank===e||o.minRank<=e&&e<=o.maxRank)&&(u.setNode(i),u.setParent(i,s||r),a.each(t[n](i),function(e){var n=e.v===i?e.w:e.v,r=u.edge(n,i),o=a.isUndefined(r)?0:r.weight;u.setEdge(n,i,{weight:t.edge(e).weight+o})}),a.has(o,"minRank")&&u.setNode(i,{borderLeft:o.borderLeft[e],borderRight:o.borderRight[e]}))}),u}function i(t){for(var e;t.hasNode(e=a.uniqueId("_root")););return e}var a=n(1),o=n(8).Graph;t.exports=r},function(t,e,n){function r(t,e,n){var r,a={};i.each(n,function(n){for(var i,o,u=t.parent(n);u;){if(i=t.parent(u),i?(o=a[i],a[i]=u):(o=r,r=u),o&&o!==u)return void e.setEdge(o,u);u=i}})}var i=n(1);t.exports=r},function(t,e,n){"use strict";function r(t){t=o.asNonCompoundGraph(t),i(t),a.each(u(t),function(e,n){t.node(n).x=e})}function i(t){var e=o.buildLayerMatrix(t),n=t.graph().ranksep,r=0;a.each(e,function(e){var i=a.max(a.map(e,function(e){return t.node(e).height}));a.each(e,function(e){t.node(e).y=r+i/2}),r+=i+n})}var a=n(1),o=n(3),u=n(224).positionX;t.exports=r},function(t,e,n){"use strict";function r(t,e){function n(e,n){var i=0,u=0,s=e.length,c=y.last(n);return y.each(n,function(e,l){var d=a(t,e),h=d?t.node(d).order:s;(d||e===c)&&(y.each(n.slice(u,l+1),function(e){y.each(t.predecessors(e),function(n){var a=t.node(n),u=a.order;!(u<i||h<u)||a.dummy&&t.node(e).dummy||o(r,n,e)})}),u=l+1,i=h)}),n}var r={};return y.reduce(e,n),r}function i(t,e){function n(e,n,r,a,u){var s;y.each(y.range(n,r),function(n){s=e[n],t.node(s).dummy&&y.each(t.predecessors(s),function(e){var n=t.node(e);n.dummy&&(n.order<a||n.order>u)&&o(i,e,s)})})}function r(e,r){var i,a=-1,o=0;return y.each(r,function(u,s){if("border"===t.node(u).dummy){var c=t.predecessors(u);c.length&&(i=t.node(c[0]).order,n(r,o,s,a,i),o=s,a=i)}n(r,o,r.length,i,e.length)}),r}var i={};return y.reduce(e,r),i}function a(t,e){if(t.node(e).dummy)return y.find(t.predecessors(e),function(e){return t.node(e).dummy})}function o(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 r=e;e=n,n=r}return y.has(t[e],n)}function s(t,e,n,r){var i={},a={},o={};return y.each(e,function(t){y.each(t,function(t,e){i[t]=t,a[t]=t,o[t]=e})}),y.each(e,function(t){var e=-1;y.each(t,function(t){var s=r(t);if(s.length){s=y.sortBy(s,function(t){return o[t]});for(var c=(s.length-1)/2,l=Math.floor(c),d=Math.ceil(c);l<=d;++l){var h=s[l];a[t]===t&&e<o[h]&&!u(n,t,h)&&(a[h]=t,a[t]=i[t]=i[h],e=o[h])}}})}),{root:i,align:a}}function c(t,e,n,r,i){function a(t){y.has(c,t)||(c[t]=!0,u[t]=y.reduce(s.inEdges(t),function(t,e){return a(e.v),Math.max(t,u[e.v]+s.edge(e))},0))}function o(e){if(2!==c[e]){c[e]++;var n=t.node(e),r=y.reduce(s.outEdges(e),function(t,e){return o(e.w),Math.min(t,u[e.w]-s.edge(e))},Number.POSITIVE_INFINITY);r!==Number.POSITIVE_INFINITY&&n.borderType!==d&&(u[e]=Math.max(u[e],r))}}var u={},s=l(t,e,n,i),c={};y.each(s.nodes(),a);var d=i?"borderLeft":"borderRight";return y.each(s.nodes(),o),y.each(r,function(t){u[t]=u[n[t]]}),u}function l(t,e,n,r){var i=new g,a=t.graph(),o=p(a.nodesep,a.edgesep,r);return y.each(e,function(e){var r;y.each(e,function(e){var a=n[e];if(i.setNode(a),r){var u=n[r],s=i.edge(u,a);i.setEdge(u,a,Math.max(o(t,e,r),s||0))}r=e})}),i}function d(t,e){return y.min(e,function(e){var n=y.min(e,function(e,n){return e-m(t,n)/2});return y.max(e,function(e,n){return e+m(t,n)/2})-n})}function h(t,e){var n=y.min(e),r=y.max(e);y.each(["u","d"],function(i){y.each(["l","r"],function(a){var o,u=i+a,s=t[u];s!==e&&(o="l"===a?n-y.min(s):r-y.max(s))&&(t[u]=y.mapValues(s,function(t){return t+o}))})})}function f(t,e){return y.mapValues(t.ul,function(n,r){if(e)return t[e.toLowerCase()][r];var i=y.sortBy(y.pluck(t,r));return(i[1]+i[2])/2})}function _(t){var e,n=v.buildLayerMatrix(t),a=y.merge(r(t,n),i(t,n)),o={};y.each(["u","d"],function(r){e="u"===r?n:y.values(n).reverse(),y.each(["l","r"],function(n){"r"===n&&(e=y.map(e,function(t){return y.values(t).reverse()}));var i=y.bind("u"===r?t.predecessors:t.successors,t),u=s(t,e,a,i),l=c(t,e,u.root,u.align,"r"===n);"r"===n&&(l=y.mapValues(l,function(t){return-t})),o[r+n]=l})});var u=d(t,o);return h(o,u),f(o,t.graph().align)}function p(t,e,n){return function(r,i,a){var o,u=r.node(i),s=r.node(a),c=0;if(c+=u.width/2,y.has(u,"labelpos"))switch(u.labelpos.toLowerCase()){case"l":o=-u.width/2;break;case"r":o=u.width/2}if(o&&(c+=n?o:-o),o=0,c+=(u.dummy?e:t)/2,c+=(s.dummy?e:t)/2,c+=s.width/2,y.has(s,"labelpos"))switch(s.labelpos.toLowerCase()){case"l":o=s.width/2;break;case"r":o=-s.width/2}return o&&(c+=n?o:-o),o=0,c}}function m(t,e){return t.node(e).width}var y=n(1),g=n(8).Graph,v=n(3);t.exports={positionX:_,findType1Conflicts:r,findType2Conflicts:i,addConflict:o,hasConflict:u,verticalAlignment:s,horizontalCompaction:c,alignCoordinates:h,findSmallestWidthAlignment:d,balance:f}},function(t,e,n){function r(t){var e=a.buildLayerMatrix(t),n=new o({compound:!0,multigraph:!0}).setGraph({});return i.each(t.nodes(),function(e){n.setNode(e,{label:e}),n.setParent(e,"layer"+t.node(e).rank)}),i.each(t.edges(),function(t){n.setEdge(t.v,t.w,{},t.name)}),i.each(e,function(t,e){var r="layer"+e;n.setNode(r,{rank:"same"}),i.reduce(t,function(t,e){return n.setEdge(t,e,{style:"invis"}),e})}),n}var i=n(1),a=n(3),o=n(8).Graph;t.exports={debugOrdering:r}},function(t,e){t.exports="0.7.4"},function(t,e,n){t.exports={node:n(40),circle:n(41),ellipse:n(20),polygon:n(42),rect:n(43)}},function(t,e){function n(t,e,n,i){var a,o,u,s,c,l,d,h,f,_,p,m,y,g,v;if(a=e.y-t.y,u=t.x-e.x,c=e.x*t.y-t.x*e.y,f=a*n.x+u*n.y+c,_=a*i.x+u*i.y+c,!(0!==f&&0!==_&&r(f,_)||(o=i.y-n.y,s=n.x-i.x,l=i.x*n.y-n.x*i.y,d=o*t.x+s*t.y+l,h=o*e.x+s*e.y+l,0!==d&&0!==h&&r(d,h)||0==(p=a*s-o*u))))return m=Math.abs(p/2),y=u*l-s*c,g=y<0?(y-m)/p:(y+m)/p,y=o*c-a*l,v=y<0?(y-m)/p:(y+m)/p,{x:g,y:v}}function r(t,e){return t*e>0}t.exports=n},function(t,e,n){function r(){var t=n(230),e=n(234),r=n(235),u=n(236),c=n(237),l=n(238),d=n(239),h=n(240),f=n(241),_=function(n,_){i(_);var p=o(n,"output"),m=o(p,"clusters"),y=o(p,"edgePaths"),g=r(o(p,"edgeLabels"),_),v=t(o(p,"nodes"),_,h);s(_),c(v,_),l(g,_),u(y,_,f);var M=e(m,_);d(M,_),a(_)};return _.createNodes=function(e){return arguments.length?(t=e,_):t},_.createClusters=function(t){return arguments.length?(e=t,_):e},_.createEdgeLabels=function(t){return arguments.length?(r=t,_):r},_.createEdgePaths=function(t){return arguments.length?(u=t,_):u},_.shapes=function(t){return arguments.length?(h=t,_):h},_.arrows=function(t){return arguments.length?(f=t,_):f},_}function i(t){t.nodes().forEach(function(e){var n=t.node(e);u.has(n,"label")||t.children(e).length||(n.label=e),u.has(n,"paddingX")&&u.defaults(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),u.has(n,"paddingY")&&u.defaults(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),u.has(n,"padding")&&u.defaults(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),u.defaults(n,c),u.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(t){n[t]=Number(n[t])}),u.has(n,"width")&&(n._prevWidth=n.width),u.has(n,"height")&&(n._prevHeight=n.height)}),t.edges().forEach(function(e){var n=t.edge(e);u.has(n,"label")||(n.label=""),u.defaults(n,l)})}function a(t){u.each(t.nodes(),function(e){var n=t.node(e);u.has(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,u.has(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight})}function o(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}var u=n(14),s=n(32).layout;t.exports=r;var c={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},l={arrowhead:"normal",lineInterpolate:"linear"}},function(t,e,n){"use strict";function r(t,e,n){var r=e.nodes().filter(function(t){return!o.isSubgraph(e,t)}),s=t.selectAll("g.node").data(r,function(t){return t}).classed("update",!0);return s.selectAll("*").remove(),s.enter().append("g").attr("class","node").style("opacity",0),s.each(function(t){var r=e.node(t),s=u.select(this),c=s.append("g").attr("class","label"),l=a(c,r),d=n[r.shape],h=i.pick(l.node().getBBox(),"width","height");r.elem=this,r.id&&s.attr("id",r.id),r.labelId&&c.attr("id",r.labelId),o.applyClass(s,r.class,(s.classed("update")?"update ":"")+"node"),i.has(r,"width")&&(h.width=r.width),i.has(r,"height")&&(h.height=r.height),h.width+=r.paddingLeft+r.paddingRight,h.height+=r.paddingTop+r.paddingBottom,c.attr("transform","translate("+(r.paddingLeft-r.paddingRight)/2+","+(r.paddingTop-r.paddingBottom)/2+")");var f=d(u.select(this),h,r);o.applyStyle(f,r.style);var _=f.node().getBBox();r.width=_.width,r.height=_.height}),o.applyTransition(s.exit(),e).style("opacity",0).remove(),s}var i=n(14),a=n(21),o=n(7),u=n(15);t.exports=r},function(t,e,n){function r(t,e){for(var n=t.append("text"),r=i(e.label).split("\n"),o=0;o<r.length;o++)n.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(r[o]);return a.applyStyle(n,e.labelStyle),n}function i(t){for(var e,n="",r=!1,i=0;i<t.length;++i)if(e=t[i],r){switch(e){case"n":n+="\n";break;default:n+=e}r=!1}else"\\"===e?r=!0:n+=e;return n}var a=n(7);t.exports=r},function(t,e,n){function r(t,e){var n=t.append("foreignObject").attr("width","100000"),r=n.append("xhtml:div");r.attr("xmlns","http://www.w3.org/1999/xhtml");var a=e.label;switch(typeof a){case"function":r.insert(a);break;case"object":r.insert(function(){return a});break;default:r.html(a)}i.applyStyle(r,e.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap");var o=r[0][0].getBoundingClientRect();return n.attr("width",o.width).attr("height",o.height),n}var i=n(7);t.exports=r},function(t,e,n){function r(t,e){var n=t;return n.node().appendChild(e.label),i.applyStyle(n,e.labelStyle),n}var i=n(7);t.exports=r},function(t,e,n){function r(t,e){var n=e.nodes().filter(function(t){return i.isSubgraph(e,t)}),r=t.selectAll("g.cluster").data(n,function(t){return t});return r.selectAll("*").remove(),r.enter().append("g").attr("class","cluster").attr("id",function(t){return e.node(t).id}).style("opacity",0),i.applyTransition(r,e).style("opacity",1),r.each(function(t){var n=e.node(t),r=d3.select(this);d3.select(this).append("rect");var i=r.append("g").attr("class","label");a(i,n,n.clusterLabelPos)}),r.selectAll("rect").each(function(t){var n=e.node(t),r=d3.select(this);i.applyStyle(r,n.style)}),i.applyTransition(r.exit(),e).style("opacity",0).remove(),r}var i=n(7),a=n(21);t.exports=r},function(t,e,n){"use strict";function r(t,e){var n=t.selectAll("g.edgeLabel").data(e.edges(),function(t){return o.edgeToId(t)}).classed("update",!0);return n.selectAll("*").remove(),n.enter().append("g").classed("edgeLabel",!0).style("opacity",0),n.each(function(t){var n=e.edge(t),r=a(u.select(this),e.edge(t),0,0).classed("label",!0),o=r.node().getBBox();n.labelId&&r.attr("id",n.labelId),i.has(n,"width")||(n.width=o.width),i.has(n,"height")||(n.height=o.height)}),o.applyTransition(n.exit(),e).style("opacity",0).remove(),n}var i=n(14),a=n(21),o=n(7),u=n(15);t.exports=r},function(t,e,n){"use strict";function r(t,e,n){var r=t.selectAll("g.edgePath").data(e.edges(),function(t){return h.edgeToId(t)}).classed("update",!0);return s(r,e),c(r,e),h.applyTransition(r,e).style("opacity",1),r.each(function(t){var n=f.select(this),r=e.edge(t);r.elem=this,r.id&&n.attr("id",r.id),h.applyClass(n,r.class,(n.classed("update")?"update ":"")+"edgePath")}),r.selectAll("path.path").each(function(t){var n=e.edge(t);n.arrowheadId=l.uniqueId("arrowhead");var r=f.select(this).attr("marker-end",function(){return"url("+i(location.href,n.arrowheadId)+")"}).style("fill","none");h.applyTransition(r,e).attr("d",function(t){return a(e,t)}),h.applyStyle(r,n.style)}),r.selectAll("defs *").remove(),r.selectAll("defs").each(function(t){var r=e.edge(t);(0,n[r.arrowhead])(f.select(this),r.arrowheadId,r,"arrowhead")}),r}function i(t,e){return t.split("#")[0]+"#"+e}function a(t,e){var n=t.edge(e),r=t.node(e.v),i=t.node(e.w),a=n.points.slice(1,n.points.length-1);return a.unshift(d(r,a[0])),a.push(d(i,a[a.length-1])),o(n,a)}function o(t,e){var n=f.svg.line().x(function(t){return t.x}).y(function(t){return t.y});return l.has(t,"lineInterpolate")&&n.interpolate(t.lineInterpolate),l.has(t,"lineTension")&&n.tension(Number(t.lineTension)),n(e)}function u(t){var e=t.getBBox(),n=t.ownerSVGElement.getScreenCTM().inverse().multiply(t.getScreenCTM()).translate(e.width/2,e.height/2);return{x:n.e,y:n.f}}function s(t,e){var n=t.enter().append("g").attr("class","edgePath").style("opacity",0);n.append("path").attr("class","path").attr("d",function(t){var n=e.edge(t),r=e.node(t.v).elem;return o(n,l.range(n.points.length).map(function(){return u(r)}))}),n.append("defs")}function c(t,e){var n=t.exit();h.applyTransition(n,e).style("opacity",0).remove(),h.applyTransition(n.select("path.path"),e).attr("d",function(t){var n=e.node(t.v);if(n){return o({},l.range(this.getTotalLength()).map(function(){return n}))}return f.select(this).attr("d")})}var l=n(14),d=n(40),h=n(7),f=n(15);t.exports=r},function(t,e,n){"use strict";function r(t,e){function n(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}t.filter(function(){return!a.select(this).classed("update")}).attr("transform",n),i.applyTransition(t,e).style("opacity",1).attr("transform",n)}var i=n(7),a=n(15);t.exports=r},function(t,e,n){"use strict";function r(t,e){function n(t){var n=e.edge(t);return o.has(n,"x")?"translate("+n.x+","+n.y+")":""}t.filter(function(){return!a.select(this).classed("update")}).attr("transform",n),i.applyTransition(t,e).style("opacity",1).attr("transform",n)}var i=n(7),a=n(15),o=n(14);t.exports=r},function(t,e,n){"use strict";function r(t,e){function n(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}var r=t.filter(function(){return!a.select(this).classed("update")});r.attr("transform",n),i.applyTransition(t,e).style("opacity",1).attr("transform",n),i.applyTransition(r.selectAll("rect"),e).attr("width",function(t){return e.node(t).width}).attr("height",function(t){return e.node(t).height}).attr("x",function(t){return-e.node(t).width/2}).attr("y",function(t){return-e.node(t).height/2})}var i=n(7),a=n(15);t.exports=r},function(t,e,n){"use strict";function r(t,e,n){var r=t.insert("rect",":first-child").attr("rx",n.rx).attr("ry",n.ry).attr("x",-e.width/2).attr("y",-e.height/2).attr("width",e.width).attr("height",e.height);return n.intersect=function(t){return u(n,t)},r}function i(t,e,n){var r=e.width/2,i=e.height/2,a=t.insert("ellipse",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("rx",r).attr("ry",i);return n.intersect=function(t){return s(n,r,i,t)},a}function a(t,e,n){var r=Math.max(e.width,e.height)/2,i=t.insert("circle",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("r",r);return n.intersect=function(t){return c(n,r,t)},i}function o(t,e,n){var r=e.width*Math.SQRT2/2,i=e.height*Math.SQRT2/2,a=[{x:0,y:-i},{x:-r,y:0},{x:0,y:i},{x:r,y:0}],o=t.insert("polygon",":first-child").attr("points",a.map(function(t){return t.x+","+t.y}).join(" "));return n.intersect=function(t){return l(n,a,t)},o}var u=n(43),s=n(20),c=n(41),l=n(42);t.exports={rect:r,ellipse:i,circle:a,diamond:o}},function(t,e,n){function r(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),a=i.append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");o.applyStyle(a,n[r+"Style"]),n[r+"Class"]&&a.attr("class",n[r+"Class"])}function i(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),a=i.append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");o.applyStyle(a,n[r+"Style"]),n[r+"Class"]&&a.attr("class",n[r+"Class"])}function a(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),a=i.append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");o.applyStyle(a,n[r+"Style"]),n[r+"Class"]&&a.attr("class",n[r+"Class"])}var o=n(7);t.exports={default:r,normal:r,vee:i,undirected:a}},function(t,e){t.exports="0.1.6"},function(t,e,n){var r=n(44).parser;r.yy=n(45);var i=n(244),a=n(10),o=n(2),u=o.Log,s={diagramMarginX:50,diagramMarginY:30,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!1,bottomMarginAdj:1,activationWidth:10,textPlacement:"tspan"};e.bounds={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],init:function(){this.sequenceItems=[],this.activations=[],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,n,r,i){function a(a){return function(c){u++;var l=o.sequenceItems.length-u+1;o.updateVal(c,"starty",n-l*s.boxMargin,Math.min),o.updateVal(c,"stopy",i+l*s.boxMargin,Math.max),o.updateVal(e.bounds.data,"startx",t-l*s.boxMargin,Math.min),o.updateVal(e.bounds.data,"stopx",r+l*s.boxMargin,Math.max),"activation"!==a&&(o.updateVal(c,"startx",t-l*s.boxMargin,Math.min),o.updateVal(c,"stopx",r+l*s.boxMargin,Math.max),o.updateVal(e.bounds.data,"starty",n-l*s.boxMargin,Math.min),o.updateVal(e.bounds.data,"stopy",i+l*s.boxMargin,Math.max))}}var o=this,u=0;this.sequenceItems.forEach(a()),this.activations.forEach(a("activation"))},insert:function(t,n,r,i){var a,o,u,s;a=Math.min(t,r),u=Math.max(t,r),o=Math.min(n,i),s=Math.max(n,i),this.updateVal(e.bounds.data,"startx",a,Math.min),this.updateVal(e.bounds.data,"starty",o,Math.min),this.updateVal(e.bounds.data,"stopx",u,Math.max),this.updateVal(e.bounds.data,"stopy",s,Math.max),this.updateBounds(a,o,u,s)},newActivation:function(t,e){var n=r.yy.getActors()[t.from.actor],a=d(t.from.actor).length,o=n.x+s.width/2+(a-1)*s.activationWidth/2;this.activations.push({startx:o,starty:this.verticalPos+2,stopx:o+s.activationWidth,stopy:void 0,actor:t.from.actor,anchored:i.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]},newLoop:function(t){this.sequenceItems.push({startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t})},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){var n=this.sequenceItems.pop();n.sections=n.sections||[],n.sectionTitles=n.sectionTitles||[],n.sections.push(e.bounds.getVerticalPos()),n.sectionTitles.push(t),this.sequenceItems.push(n)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}};var c=function(t,n,r,a,o){var u=i.getNoteRect();u.x=n,u.y=r,u.width=o||s.width,u.class="note";var c=t.append("g"),l=i.drawRect(c,u),d=i.getTextObj();d.x=n-4,d.y=r-13,d.textMargin=s.noteMargin,d.dy="1em",d.text=a.message,d.class="noteText";var h=i.drawText(c,d,u.width-s.noteMargin),f=h[0][0].getBBox().height;!o&&f>s.width?(h.remove(),c=t.append("g"),h=i.drawText(c,d,2*u.width-s.noteMargin),f=h[0][0].getBBox().height,l.attr("width",2*u.width),e.bounds.insert(n,r,n+2*u.width,r+2*s.noteMargin+f)):e.bounds.insert(n,r,n+u.width,r+2*s.noteMargin+f),l.attr("height",f+2*s.noteMargin),e.bounds.bumpVerticalPos(f+2*s.noteMargin)},l=function(t,n,i,a,o){var u,c=t.append("g"),l=n+(i-n)/2,d=c.append("text").attr("x",l).attr("y",a-7).style("text-anchor","middle").attr("class","messageText").text(o.message);u=void 0!==d[0][0].getBBox?d[0][0].getBBox().width:d[0][0].getBoundingClientRect();var h;if(n===i){h=c.append("path").attr("d","M "+n+","+a+" C "+(n+60)+","+(a-10)+" "+(n+60)+","+(a+30)+" "+n+","+(a+20)),e.bounds.bumpVerticalPos(30);var f=Math.max(u/2,100);e.bounds.insert(n-f,e.bounds.getVerticalPos()-10,i+f,e.bounds.getVerticalPos())}else h=c.append("line"),h.attr("x1",n),h.attr("y1",a),h.attr("x2",i),h.attr("y2",a),e.bounds.insert(n,e.bounds.getVerticalPos()-10,i,e.bounds.getVerticalPos());o.type===r.yy.LINETYPE.DOTTED||o.type===r.yy.LINETYPE.DOTTED_CROSS||o.type===r.yy.LINETYPE.DOTTED_OPEN?(h.style("stroke-dasharray","3, 3"),h.attr("class","messageLine1")):h.attr("class","messageLine0");var _="";s.arrowMarkerAbsolute&&(_=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,_=_.replace(/\(/g,"\\("),_=_.replace(/\)/g,"\\)")),h.attr("stroke-width",2),h.attr("stroke","black"),h.style("fill","none"),o.type!==r.yy.LINETYPE.SOLID&&o.type!==r.yy.LINETYPE.DOTTED||h.attr("marker-end","url("+_+"#arrowhead)"),o.type!==r.yy.LINETYPE.SOLID_CROSS&&o.type!==r.yy.LINETYPE.DOTTED_CROSS||h.attr("marker-end","url("+_+"#crosshead)")};t.exports.drawActors=function(t,n,r,a){var o;for(o=0;o<r.length;o++){var u=r[o];n[u].x=o*s.actorMargin+o*s.width,n[u].y=a,n[u].width=s.diagramMarginX,n[u].height=s.diagramMarginY,i.drawActor(t,n[u].x,a,n[u].description,s),e.bounds.insert(n[u].x,a,n[u].x+s.width,s.height)}e.bounds.bumpVerticalPos(s.height)},t.exports.setConf=function(t){Object.keys(t).forEach(function(e){s[e]=t[e]})};var d=function(e){return t.exports.bounds.activations.filter(function(t){return t.actor===e})},h=function(t){var e=r.yy.getActors(),n=d(t);return[n.reduce(function(t,e){return Math.min(t,e.startx)},e[t].x+s.width/2),n.reduce(function(t,e){return Math.max(t,e.stopx)},e[t].x+s.width/2)]};t.exports.draw=function(n,o){function d(t,n){var r=e.bounds.endActivation(t);r.starty+18>n&&(r.starty=n-6,n+=12),i.drawActivation(m,r,n,s),e.bounds.insert(r.startx,n-10,r.stopx,n)}r.yy.clear(),r.parse(n+"\n"),e.bounds.init();var f,_,p,m=a.select("#"+o),y=r.yy.getActors(),g=r.yy.getActorKeys(),v=r.yy.getMessages(),M=r.yy.getTitle();t.exports.drawActors(m,y,g,0),i.insertArrowHead(m),i.insertArrowCrossHead(m),v.forEach(function(t){var n;switch(t.type){case r.yy.LINETYPE.NOTE:e.bounds.bumpVerticalPos(s.boxMargin),f=y[t.from].x,_=y[t.to].x,t.placement===r.yy.PLACEMENT.RIGHTOF?c(m,f+(s.width+s.actorMargin)/2,e.bounds.getVerticalPos(),t):t.placement===r.yy.PLACEMENT.LEFTOF?c(m,f-(s.width+s.actorMargin)/2,e.bounds.getVerticalPos(),t):t.to===t.from?c(m,f,e.bounds.getVerticalPos(),t):(p=Math.abs(f-_)+s.actorMargin,c(m,(f+_+s.width-p)/2,e.bounds.getVerticalPos(),t,p));break;case r.yy.LINETYPE.ACTIVE_START:e.bounds.newActivation(t,m);break;case r.yy.LINETYPE.ACTIVE_END:d(t,e.bounds.getVerticalPos());break;case r.yy.LINETYPE.LOOP_START:e.bounds.bumpVerticalPos(s.boxMargin),e.bounds.newLoop(t.message),e.bounds.bumpVerticalPos(s.boxMargin+s.boxTextMargin);break;case r.yy.LINETYPE.LOOP_END:n=e.bounds.endLoop(),i.drawLoop(m,n,"loop",s),e.bounds.bumpVerticalPos(s.boxMargin);break;case r.yy.LINETYPE.OPT_START:e.bounds.bumpVerticalPos(s.boxMargin),e.bounds.newLoop(t.message),e.bounds.bumpVerticalPos(s.boxMargin+s.boxTextMargin);break;case r.yy.LINETYPE.OPT_END:n=e.bounds.endLoop(),i.drawLoop(m,n,"opt",s),e.bounds.bumpVerticalPos(s.boxMargin);break;case r.yy.LINETYPE.ALT_START:e.bounds.bumpVerticalPos(s.boxMargin),e.bounds.newLoop(t.message),e.bounds.bumpVerticalPos(s.boxMargin+s.boxTextMargin);break;case r.yy.LINETYPE.ALT_ELSE:e.bounds.bumpVerticalPos(s.boxMargin),n=e.bounds.addSectionToLoop(t.message),e.bounds.bumpVerticalPos(s.boxMargin);break;case r.yy.LINETYPE.ALT_END:n=e.bounds.endLoop(),i.drawLoop(m,n,"alt",s),e.bounds.bumpVerticalPos(s.boxMargin);break;case r.yy.LINETYPE.PAR_START:e.bounds.bumpVerticalPos(s.boxMargin),e.bounds.newLoop(t.message),e.bounds.bumpVerticalPos(s.boxMargin+s.boxTextMargin);break;case r.yy.LINETYPE.PAR_AND:e.bounds.bumpVerticalPos(s.boxMargin),n=e.bounds.addSectionToLoop(t.message),e.bounds.bumpVerticalPos(s.boxMargin);break;case r.yy.LINETYPE.PAR_END:n=e.bounds.endLoop(),i.drawLoop(m,n,"par",s),e.bounds.bumpVerticalPos(s.boxMargin);break;default:try{e.bounds.bumpVerticalPos(s.messageMargin);var a=h(t.from),o=h(t.to),u=a[0]<=o[0]?1:0,g=a[0]<o[0]?0:1;f=a[u],_=o[g];var v=e.bounds.getVerticalPos();l(m,f,_,v,t);var M=a.concat(o);e.bounds.insert(Math.min.apply(null,M),v,Math.max.apply(null,M),v)}catch(t){console.error("error while drawing message",t)}}}),s.mirrorActors&&(e.bounds.bumpVerticalPos(2*s.boxMargin),t.exports.drawActors(m,y,g,e.bounds.getVerticalPos()));var b=e.bounds.getBounds();u.debug("For line height fix Querying: #"+o+" .actor-line"),a.selectAll("#"+o+" .actor-line").attr("y2",b.stopy);var L=b.stopy-b.starty+2*s.diagramMarginY;s.mirrorActors&&(L=L-s.boxMargin+s.bottomMarginAdj);var k=b.stopx-b.startx+2*s.diagramMarginX;M&&m.append("text").text(M).attr("x",(b.stopx-b.startx)/2-2*s.diagramMarginX).attr("y",-25),s.useMaxWidth?(m.attr("height","100%"),m.attr("width","100%"),m.attr("style","max-width:"+k+"px;")):(m.attr("height",L),m.attr("width",k));var w=M?40:0;m.attr("viewBox",b.startx-s.diagramMarginX+" -"+(s.diagramMarginY+w)+" "+k+" "+(L+w))}},function(t,e){e.drawRect=function(t,e){var n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},e.drawText=function(t,e,n){var r=e.text.replace(/<br\/?>/gi," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.attr("fill",e.fill),void 0!==e.class&&i.attr("class",e.class);var a=i.append("tspan");return a.attr("x",e.x+2*e.textMargin),a.attr("fill",e.fill),a.text(r),void 0!==i.textwrap&&i.textwrap({x:e.x,y:e.y,width:n,height:1800},e.textMargin),i},e.drawLabel=function(t,n){var r=t.append("polygon");r.attr("points",function(t,e,n,r,i){return t+","+e+" "+(t+n)+","+e+" "+(t+n)+","+(e+r-i)+" "+(t+n-1.2*i)+","+(e+r)+" "+t+","+(e+r)}(n.x,n.y,50,20,7)),r.attr("class","labelBox"),n.y=n.y+n.labelMargin,n.x=n.x+.5*n.labelMargin,e.drawText(t,n)};var n=-1;e.drawActor=function(t,i,a,o,u){var s=i+u.width/2,c=t.append("g");0===a&&(n++,c.append("line").attr("id","actor"+n).attr("x1",s).attr("y1",5).attr("x2",s).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));var l=e.getNoteRect();l.x=i,l.y=a,l.fill="#eaeaea",l.width=u.width,l.height=u.height,l.class="actor",l.rx=3,l.ry=3,e.drawRect(c,l),r(u)(o,c,l.x,l.y,l.width,l.height,{class:"actor"})},e.anchorElement=function(t){return t.append("g")},e.drawActivation=function(t,n,r){var i=e.getNoteRect(),a=n.anchored;i.x=n.startx,i.y=n.starty,i.fill="#f4f4f4",i.width=n.stopx-n.startx,i.height=r-n.starty,e.drawRect(a,i)},e.drawLoop=function(t,n,r,i){var a=t.append("g"),o=function(t,e,n,r){return a.append("line").attr("x1",t).attr("y1",e).attr("x2",n).attr("y2",r).attr("class","loopLine")};o(n.startx,n.starty,n.stopx,n.starty),o(n.stopx,n.starty,n.stopx,n.stopy),o(n.startx,n.stopy,n.stopx,n.stopy),o(n.startx,n.starty,n.startx,n.stopy),void 0!==n.sections&&n.sections.forEach(function(t){o(n.startx,t,n.stopx,t).style("stroke-dasharray","3, 3")});var u=e.getTextObj();u.text=r,u.x=n.startx,u.y=n.starty,u.labelMargin=15,u.class="labelText",e.drawLabel(a,u),u=e.getTextObj(),u.text="[ "+n.title+" ]",u.x=n.startx+(n.stopx-n.startx)/2,u.y=n.starty+1.5*i.boxMargin,u.anchor="middle",u.class="loopText",e.drawText(a,u),void 0!==n.sectionTitles&&n.sectionTitles.forEach(function(t,r){""!==t&&(u.text="[ "+t+" ]",u.y=n.sections[r]+1.5*i.boxMargin,e.drawText(a,u))})},e.insertArrowHead=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")},e.insertArrowCrossHead=function(t){var e=t.append("defs"),n=e.append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);n.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),n.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},e.getTextObj=function(){return{x:0,y:0,fill:"black","text-anchor":"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0}},e.getNoteRect=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}};var r=function(){function t(t,e,n,i,a,o,u){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("text-anchor","middle").text(t),u)}function e(t,e,n,i,a,o,u){var s=e.append("text").attr("x",n+a/2).attr("y",i).style("text-anchor","middle");if(s.append("tspan").attr("x",n+a/2).attr("dy","0").text(t),void 0!==s.textwrap){s.textwrap({x:n+a/2,y:i,width:a,height:o},0);var c=s.selectAll("tspan");c.length>0&&c[0].length>0&&(c=c[0],s.attr("y",i+(o/2-s[0][0].getBBox().height*(1-1/c.length)/2)).attr("dominant-baseline","central").attr("alignment-baseline","central"))}r(s,u)}function n(t,n,i,a,o,u,s){var c=n.append("switch"),l=c.append("foreignObject").attr("x",i).attr("y",a).attr("width",o).attr("height",u),d=l.append("div").style("display","table").style("height","100%").style("width","100%");d.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,c,i,a,o,u,s),r(d,s)}function r(t,e){for(var n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}()},function(t,e,n){var r=n(46),i=n(47),a=n(10),o=n(2),u=o.Log;e.draw=function(t,e,n){var o;o=i.parser,o.yy=r,u.debug("Renering example diagram"),o.parse(t);var s=a.select("#"+e);s.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("mermaid "+n),s.attr("height",100),s.attr("width",400)}},function(t,e,n){var r=n(48).parser;r.yy=n(49);var i,a=n(10),o=n(0),u={titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"'};t.exports.setConf=function(t){Object.keys(t).forEach(function(e){u[e]=t[e]})};var s;t.exports.draw=function(t,e){function n(t,e,n,r,i,a,o,s){y.append("g").selectAll("rect").data(t).enter().append("rect").attr("x",0).attr("y",function(t,r){return r*e+n-2}).attr("width",function(){return o-u.rightPadding/2}).attr("height",e).attr("class",function(t){for(var e=0;e<b.length;e++)if(t.type===b[e])return"section section"+e%u.numberSectionStyles;return"section section0"});var c=y.append("g").selectAll("rect").data(t).enter();c.append("rect").attr("rx",3).attr("ry",3).attr("x",function(t){return M(t.startTime)+r}).attr("y",function(t,r){return r*e+n}).attr("width",function(t){return M(t.endTime)-M(t.startTime)}).attr("height",i).attr("class",function(t){for(var e="task ",n=0,r=0;r<b.length;r++)t.type===b[r]&&(n=r%u.numberSectionStyles);return t.active?t.crit?e+" activeCrit"+n:e+" active"+n:t.done?t.crit?e+" doneCrit"+n:e+" done"+n:t.crit?e+" crit"+n:e+" task"+n}),c.append("text").text(function(t){return t.task}).attr("font-size",u.fontSize).attr("x",function(t){var e=M(t.startTime),n=M(t.endTime),i=this.getBBox().width;return i>n-e?n+i+1.5*u.leftPadding>o?e+r-5:n+r+5:(n-e)/2+e+r}).attr("y",function(t,r){return r*e+u.barHeight/2+(u.fontSize/2-2)+n}).attr("text-height",i).attr("class",function(t){for(var e=M(t.startTime),n=M(t.endTime),r=this.getBBox().width,i=0,a=0;a<b.length;a++)t.type===b[a]&&(i=a%u.numberSectionStyles);var s="";return t.active&&(s=t.crit?"activeCritText"+i:"activeText"+i),t.done?s=t.crit?s+" doneCritText"+i:s+" doneText"+i:t.crit&&(s=s+" critText"+i),r>n-e?n+r+1.5*u.leftPadding>o?"taskTextOutsideLeft taskTextOutside"+i+" "+s:"taskTextOutsideRight taskTextOutside"+i+" "+s:"taskText taskText"+i+" "+s})}function c(t,e,n,r){var o,s=[[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["h1 %I:%M",function(t){return t.getMinutes()}]],c=[["%Y",function(){return!0}]],l=[["%I:%M",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!==t.getDate()}],["%b %d",function(t){return 1!==t.getDate()}],["%B",function(t){return t.getMonth()}]];void 0!==u.axisFormatter&&(l=[],u.axisFormatter.forEach(function(t){var e=[];e[0]=t[0],e[1]=t[1],l.push(e)})),o=s.concat(l).concat(c);var d=a.svg.axis().scale(M).orient("bottom").tickSize(-r+e+u.gridLineStartPadding,0,0).tickFormat(a.time.format.multi(o));i>7&&i<230&&(d=d.ticks(a.time.monday.range)),y.append("g").attr("class","grid").attr("transform","translate("+t+", "+(r-50)+")").call(d).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em")}function l(t,e){for(var n=[],r=0,i=0;i<b.length;i++)n[i]=[b[i],f(b[i],k)];y.append("g").selectAll("text").data(n).enter().append("text").text(function(t){return t[0]}).attr("x",10).attr("y",function(i,a){if(!(a>0))return i[1]*t/2+e;for(var o=0;o<a;o++)return r+=n[a-1][1],i[1]*t/2+r*t+e}).attr("class",function(t){for(var e=0;e<b.length;e++)if(t[0]===b[e])return"sectionTitle sectionTitle"+e%u.numberSectionStyles;return"sectionTitle"})}function d(t,e,n,r){var i=y.append("g").attr("class","today"),a=new Date;i.append("line").attr("x1",M(a)+t).attr("x2",M(a)+t).attr("y1",u.titleTopMargin).attr("y2",r-u.titleTopMargin).attr("class","today")}function h(t){for(var e=t.length,n={};e;)n[t[--e]]=(n[t[e]]||0)+1;return n}function f(t,e){return h(e)[t]||0}r.yy.clear(),r.parse(t);var _=document.getElementById(e);s=_.parentElement.offsetWidth,void 0===s&&(s=1200),void 0!==u.useWidth&&(s=u.useWidth);var p=r.yy.getTasks(),m=p.length*(u.barHeight+u.barGap)+2*u.topPadding;_.setAttribute("height","100%"),_.setAttribute("viewBox","0 0 "+s+" "+m);var y=a.select("#"+e),g=a.min(p,function(t){return t.startTime}),v=a.max(p,function(t){return t.endTime}),M=a.time.scale().domain([a.min(p,function(t){return t.startTime}),a.max(p,function(t){return t.endTime})]).rangeRound([0,s-u.leftPadding-u.rightPadding]),b=[];i=o.duration(v-g).asDays();for(var L=0;L<p.length;L++)b.push(p[L].type);var k=b;b=function(t){for(var e={},n=[],r=0,i=t.length;r<i;++r)e.hasOwnProperty(t[r])||(e[t[r]]=!0,n.push(t[r]));return n}(b),function(t,e,r){var i=u.barHeight,o=i+u.barGap,s=u.topPadding,h=u.leftPadding,f=a.scale.linear().domain([0,b.length]).range(["#00B9FA","#F95002"]).interpolate(a.interpolateHcl);c(h,s,e,r),n(t,o,s,h,i,f,e,r),l(o,s),d(h,s,e,r)}(p,s,m),void 0!==u.useWidth&&_.setAttribute("width",s),y.append("text").text(r.yy.getTitle()).attr("x",s/2).attr("y",u.titleTopMargin).attr("class","titleText")}},function(t,e,n){function r(t){return n(i(t))}function i(t){var e=a[t];if(!(e+1))throw new Error("Cannot find module '"+t+"'.");return e}var a={"./af":50,"./af.js":50,"./ar":51,"./ar-dz":52,"./ar-dz.js":52,"./ar-kw":53,"./ar-kw.js":53,"./ar-ly":54,"./ar-ly.js":54,"./ar-ma":55,"./ar-ma.js":55,"./ar-sa":56,"./ar-sa.js":56,"./ar-tn":57,"./ar-tn.js":57,"./ar.js":51,"./az":58,"./az.js":58,"./be":59,"./be.js":59,"./bg":60,"./bg.js":60,"./bn":61,"./bn.js":61,"./bo":62,"./bo.js":62,"./br":63,"./br.js":63,"./bs":64,"./bs.js":64,"./ca":65,"./ca.js":65,"./cs":66,"./cs.js":66,"./cv":67,"./cv.js":67,"./cy":68,"./cy.js":68,"./da":69,"./da.js":69,"./de":70,"./de-at":71,"./de-at.js":71,"./de-ch":72,"./de-ch.js":72,"./de.js":70,"./dv":73,"./dv.js":73,"./el":74,"./el.js":74,"./en-au":75,"./en-au.js":75,"./en-ca":76,"./en-ca.js":76,"./en-gb":77,"./en-gb.js":77,"./en-ie":78,"./en-ie.js":78,"./en-nz":79,"./en-nz.js":79,"./eo":80,"./eo.js":80,"./es":81,"./es-do":82,"./es-do.js":82,"./es.js":81,"./et":83,"./et.js":83,"./eu":84,"./eu.js":84,"./fa":85,"./fa.js":85,"./fi":86,"./fi.js":86,"./fo":87,"./fo.js":87,"./fr":88,"./fr-ca":89,"./fr-ca.js":89,"./fr-ch":90,"./fr-ch.js":90,"./fr.js":88,"./fy":91,"./fy.js":91,"./gd":92,"./gd.js":92,"./gl":93,"./gl.js":93,"./gom-latn":94,"./gom-latn.js":94,"./he":95,"./he.js":95,"./hi":96,"./hi.js":96,"./hr":97,"./hr.js":97,"./hu":98,"./hu.js":98,"./hy-am":99,"./hy-am.js":99,"./id":100,"./id.js":100,"./is":101,"./is.js":101,"./it":102,"./it.js":102,"./ja":103,"./ja.js":103,"./jv":104,"./jv.js":104,"./ka":105,"./ka.js":105,"./kk":106,"./kk.js":106,"./km":107,"./km.js":107,"./kn":108,"./kn.js":108,"./ko":109,"./ko.js":109,"./ky":110,"./ky.js":110,"./lb":111,"./lb.js":111,"./lo":112,"./lo.js":112,"./lt":113,"./lt.js":113,"./lv":114,"./lv.js":114,"./me":115,"./me.js":115,"./mi":116,"./mi.js":116,"./mk":117,"./mk.js":117,"./ml":118,"./ml.js":118,"./mr":119,"./mr.js":119,"./ms":120,"./ms-my":121,"./ms-my.js":121,"./ms.js":120,"./my":122,"./my.js":122,"./nb":123,"./nb.js":123,"./ne":124,"./ne.js":124,"./nl":125,"./nl-be":126,"./nl-be.js":126,"./nl.js":125,"./nn":127,"./nn.js":127,"./pa-in":128,"./pa-in.js":128,"./pl":129,"./pl.js":129,"./pt":130,"./pt-br":131,"./pt-br.js":131,"./pt.js":130,"./ro":132,"./ro.js":132,"./ru":133,"./ru.js":133,"./sd":134,"./sd.js":134,"./se":135,"./se.js":135,"./si":136,"./si.js":136,"./sk":137,"./sk.js":137,"./sl":138,"./sl.js":138,"./sq":139,"./sq.js":139,"./sr":140,"./sr-cyrl":141,"./sr-cyrl.js":141,"./sr.js":140,"./ss":142,"./ss.js":142,"./sv":143,"./sv.js":143,"./sw":144,"./sw.js":144,"./ta":145,"./ta.js":145,"./te":146,"./te.js":146,"./tet":147,"./tet.js":147,"./th":148,"./th.js":148,"./tl-ph":149,"./tl-ph.js":149,"./tlh":150,"./tlh.js":150,"./tr":151,"./tr.js":151,"./tzl":152,"./tzl.js":152,"./tzm":153,"./tzm-latn":154,"./tzm-latn.js":154,"./tzm.js":153,"./uk":155,"./uk.js":155,"./ur":156,"./ur.js":156,"./uz":157,"./uz-latn":158,"./uz-latn.js":158,"./uz.js":157,"./vi":159,"./vi.js":159,"./x-pseudo":160,"./x-pseudo.js":160,"./yo":161,"./yo.js":161,"./zh-cn":162,"./zh-cn.js":162,"./zh-hk":163,"./zh-hk.js":163,"./zh-tw":164,"./zh-tw.js":164};r.keys=function(){return Object.keys(a)},r.resolve=i,t.exports=r,r.id=247},function(t,e,n){var r=n(165).parser,i=n(166);r.yy=i;var a,o=n(10),u=n(2),s=u.Log,c=n(33);a={};var l=0,d={dividerMargin:10,padding:5,textHeight:10},h=function(t){var e,n=Object.keys(a);for(e=0;e<n.length;e++)if(a[n[e]].label===t)return n[e]},f=function(t){t.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),t.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.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 18,7 L9,13 L14,7 L9,1 Z")},_=0,p=function(t,e,n){var r=function(t){switch(t){case i.relationType.AGGREGATION:return"aggregation";case i.relationType.EXTENSION:return"extension";case i.relationType.COMPOSITION:return"composition";case i.relationType.DEPENDENCY:return"dependency"}},a=e.points,u=o.svg.line().x(function(t){return t.x}).y(function(t){return t.y}).interpolate("basis"),s=t.append("path").attr("d",u(a)).attr("id","edge"+_).attr("class","relation"),c="";d.arrowMarkerAbsolute&&(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,c=c.replace(/\(/g,"\\("),c=c.replace(/\)/g,"\\)")),"none"!==n.relation.type1&&s.attr("marker-start","url("+c+"#"+r(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&s.attr("marker-end","url("+c+"#"+r(n.relation.type2)+"End)");var l,h,f=e.points.length;if(f%2!=0){var p=e.points[Math.floor(f/2)],m=e.points[Math.ceil(f/2)];l=(p.x+m.x)/2,h=(p.y+m.y)/2}else{var y=e.points[Math.floor(f/2)];l=y.x,h=y.y}if(void 0!==n.title){var g=t.append("g").attr("class","classLabel"),v=g.append("text").attr("class","label").attr("x",l).attr("y",h).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=v;var M=v.node().getBBox();g.insert("rect",":first-child").attr("class","box").attr("x",M.x-d.padding/2).attr("y",M.y-d.padding/2).attr("width",M.width+d.padding).attr("height",M.height+d.padding)}_++},m=function(t,e){s.info("Rendering class "+e);var n=function(t,e,n){var r=t.append("tspan").attr("x",d.padding).text(e);n||r.attr("dy",d.textHeight)},r="classId"+l,i={id:r,label:e.id,width:0,height:0},o=t.append("g").attr("id",r).attr("class","classGroup"),u=o.append("text").attr("x",d.padding).attr("y",d.textHeight+d.padding).text(e.id),c=u.node().getBBox().height,h=o.append("line").attr("x1",0).attr("y1",d.padding+c+d.dividerMargin/2).attr("y2",d.padding+c+d.dividerMargin/2),f=o.append("text").attr("x",d.padding).attr("y",c+d.dividerMargin+d.textHeight).attr("fill","white").attr("class","classText"),_=!0;e.members.forEach(function(t){n(f,t,_),_=!1});var p=f.node().getBBox(),m=o.append("line").attr("x1",0).attr("y1",d.padding+c+d.dividerMargin+p.height).attr("y2",d.padding+c+d.dividerMargin+p.height),y=o.append("text").attr("x",d.padding).attr("y",c+2*d.dividerMargin+p.height+d.textHeight).attr("fill","white").attr("class","classText");_=!0,e.methods.forEach(function(t){n(y,t,_),_=!1});var g=o.node().getBBox();return o.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",g.width+2*d.padding).attr("height",g.height+d.padding+.5*d.dividerMargin),h.attr("x2",g.width+2*d.padding),m.attr("x2",g.width+2*d.padding),i.width=g.width+2*d.padding,i.height=g.height+d.padding+.5*d.dividerMargin,a[r]=i,l++,i};t.exports.setConf=function(t){Object.keys(t).forEach(function(e){d[e]=t[e]})},t.exports.draw=function(t,e){r.yy.clear(),r.parse(t),s.info("Rendering diagram "+t);var n=o.select("#"+e);f(n);var a=new c.graphlib.Graph({multigraph:!0});a.setGraph({isMultiGraph:!0}),a.setDefaultEdgeLabel(function(){return{}});var u,l=i.getClasses(),d=Object.keys(l);for(u=0;u<d.length;u++){var _=l[d[u]],y=m(n,_);a.setNode(y.id,y),s.info("Org height: "+y.height)}i.getRelations().forEach(function(t){s.info("tjoho"+h(t.id1)+h(t.id2)+JSON.stringify(t)),a.setEdge(h(t.id1),h(t.id2),{relation:t})}),c.layout(a),a.nodes().forEach(function(t){void 0!==t&&(s.debug("Node "+t+": "+JSON.stringify(a.node(t))),o.select("#"+t).attr("transform","translate("+(a.node(t).x-a.node(t).width/2)+","+(a.node(t).y-a.node(t).height/2)+" )"))}),a.edges().forEach(function(t){s.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(a.edge(t))),p(n,a.edge(t),a.edge(t).relation)}),n.attr("height","100%"),n.attr("width","100%"),n.attr("viewBox","0 0 "+(a.graph().width+20)+" "+(a.graph().height+20))}},function(t,e,n){function r(t){t.append("defs").append("g").attr("id","def-commit").append("circle").attr("r",g.nodeRadius).attr("cx",0).attr("cy",0),t.select("#def-commit").append("foreignObject").attr("width",g.nodeLabel.width).attr("height",g.nodeLabel.height).attr("x",g.nodeLabel.x).attr("y",g.nodeLabel.y).attr("class","node-label").attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").append("xhtml:p").html("")}function i(t,e,n,r){r=r||"basis";var i=g.branchColors[n%g.branchColors.length],a=_.svg.line().x(function(t){return Math.round(t.x)}).y(function(t){return Math.round(t.y)}).interpolate(r);t.append("svg:path").attr("d",a(e)).style("stroke",i).style("stroke-width",g.lineStrokeWidth).style("fill","none")}function a(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 o(t,e,n,r,o){m.debug("svgDrawLineForCommits: ",e,n);var u=a(t.select("#node-"+e+" circle")),s=a(t.select("#node-"+n+" circle"));switch(r){case"LR":if(u.left-s.left>g.nodeSpacing){var c={x:u.left-g.nodeSpacing,y:s.top+s.height/2},l={x:s.left+s.width,y:s.top+s.height/2};i(t,[c,l],o,"linear"),i(t,[{x:u.left,y:u.top+u.height/2},{x:u.left-g.nodeSpacing/2,y:u.top+u.height/2},{x:u.left-g.nodeSpacing/2,y:c.y},c],o)}else i(t,[{x:u.left,y:u.top+u.height/2},{x:u.left-g.nodeSpacing/2,y:u.top+u.height/2},{x:u.left-g.nodeSpacing/2,y:s.top+s.height/2},{x:s.left+s.width,y:s.top+s.height/2}],o);break;case"BT":s.top-u.top>g.nodeSpacing?(c={x:s.left+s.width/2,y:u.top+u.height+g.nodeSpacing},l={x:s.left+s.width/2,y:s.top},i(t,[c,l],o,"linear"),i(t,[{x:u.left+u.width/2,y:u.top+u.height},{x:u.left+u.width/2,y:u.top+u.height+g.nodeSpacing/2},{x:s.left+s.width/2,y:c.y-g.nodeSpacing/2},c],o)):i(t,[{x:u.left+u.width/2,y:u.top+u.height},{x:u.left+u.width/2,y:u.top+g.nodeSpacing/2},{x:s.left+s.width/2,y:s.top-g.nodeSpacing/2},{x:s.left+s.width/2,y:s.top}],o)}}function u(t,e){return t.select(e).node().cloneNode(!0)}function s(t,e,n,r){var i,a=Object.keys(y).length;if(h.isString(e))do{if(i=y[e],m.debug("in renderCommitHistory",i.id,i.seq),t.select("#node-"+e).size()>0)return;t.append(function(){return u(t,"#def-commit")}).attr("class","commit").attr("id",function(){return"node-"+i.id}).attr("transform",function(){switch(r){case"LR":return"translate("+(i.seq*g.nodeSpacing+g.leftMargin)+", "+l*g.branchOffset+")";case"BT":return"translate("+(l*g.branchOffset+g.leftMargin)+", "+(a-i.seq)*g.nodeSpacing+")"}}).attr("fill",g.nodeFillColor).attr("stroke",g.nodeStrokeColor).attr("stroke-width",g.nodeStrokeWidth);var o=h.find(n,["commit",i]);o&&(m.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&&y[e]);h.isArray(e)&&(m.debug("found merge commmit",e),s(t,e[0],n,r),l++,s(t,e[1],n,r),l--)}function c(t,e,n,r){for(r=r||0;e.seq>0&&!e.lineDrawn;)h.isString(e.parent)?(o(t,e.id,e.parent,n,r),e.lineDrawn=!0,e=y[e.parent]):h.isArray(e.parent)&&(o(t,e.id,e.parent[0],n,r),o(t,e.id,e.parent[1],n,r+1),c(t,y[e.parent[1]],n,r+1),e.lineDrawn=!0,e=y[e.parent[0]])}var l,d=n(168),h=n(16),f=n(167),_=n(10),p=n(2),m=p.Log,y={},g={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}},v={};e.setConf=function(t){v=t},e.draw=function(t,e,n){try{var i;i=f.parser,i.yy=d,m.debug("in gitgraph renderer",t,e,n),i.parse(t+"\n"),g=h.extend(g,v,d.getOptions()),m.debug("effective options",g);var a=d.getDirection();y=d.getCommits();var o=d.getBranchesAsObjArray();"BT"===a&&(g.nodeLabel.x=o.length*g.branchOffset,g.nodeLabel.width="100%",g.nodeLabel.y=-2*g.nodeRadius);var u=_.select("#"+e);r(u),l=1,h.each(o,function(t){s(u,t.commit.id,o,a),c(u,t.commit,a),l++}),u.attr("height",function(){return"BT"===a?Object.keys(y).length*g.nodeSpacing:(o.length+1)*g.branchOffset})}catch(t){m.error("Error while rendering gitgraph"),m.error(t.message)}}},function(t,e,n){(function(t,r){var i;!function(a){var o="object"==typeof e&&e,u=("object"==typeof t&&t&&t.exports,"object"==typeof r&&r);var s=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=/[\x01-\x7F]/g,l=/[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,d=/<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g,h={"­":"shy","‌":"zwnj","‍":"zwj","‎":"lrm","⁣":"ic","⁢":"it","⁡":"af","‏":"rlm","​":"ZeroWidthSpace","⁠":"NoBreak","̑":"DownBreve","⃛":"tdot","⃜":"DotDot","\t":"Tab","\n":"NewLine"," ":"puncsp"," ":"MediumSpace"," ":"thinsp"," ":"hairsp"," ":"emsp13"," ":"ensp"," ":"emsp14"," ":"emsp"," ":"numsp"," ":"nbsp","  ":"ThickSpace","‾":"oline",_:"lowbar","‐":"dash","–":"ndash","—":"mdash","―":"horbar",",":"comma",";":"semi","⁏":"bsemi",":":"colon","⩴":"Colone","!":"excl","¡":"iexcl","?":"quest","¿":"iquest",".":"period","‥":"nldr","…":"mldr","·":"middot","'":"apos","‘":"lsquo","’":"rsquo","‚":"sbquo","‹":"lsaquo","›":"rsaquo",'"':"quot","“":"ldquo","”":"rdquo","„":"bdquo","«":"laquo","»":"raquo","(":"lpar",")":"rpar","[":"lsqb","]":"rsqb","{":"lcub","}":"rcub","⌈":"lceil","⌉":"rceil","⌊":"lfloor","⌋":"rfloor","⦅":"lopar","⦆":"ropar","⦋":"lbrke","⦌":"rbrke","⦍":"lbrkslu","⦎":"rbrksld","⦏":"lbrksld","⦐":"rbrkslu","⦑":"langd","⦒":"rangd","⦓":"lparlt","⦔":"rpargt","⦕":"gtlPar","⦖":"ltrPar","⟦":"lobrk","⟧":"robrk","⟨":"lang","⟩":"rang","⟪":"Lang","⟫":"Rang","⟬":"loang","⟭":"roang","❲":"lbbrk","❳":"rbbrk","‖":"Vert","§":"sect","¶":"para","@":"commat","*":"ast","/":"sol",undefined:null,"&":"amp","#":"num","%":"percnt","‰":"permil","‱":"pertenk","†":"dagger","‡":"Dagger","•":"bull","⁃":"hybull","′":"prime","″":"Prime","‴":"tprime","⁗":"qprime","‵":"bprime","⁁":"caret","`":"grave","´":"acute","˜":"tilde","^":"Hat","¯":"macr","˘":"breve","˙":"dot","¨":"die","˚":"ring","˝":"dblac","¸":"cedil","˛":"ogon","ˆ":"circ","ˇ":"caron","°":"deg","©":"copy","®":"reg","℗":"copysr","℘":"wp","℞":"rx","℧":"mho","℩":"iiota","←":"larr","↚":"nlarr","→":"rarr","↛":"nrarr","↑":"uarr","↓":"darr","↔":"harr","↮":"nharr","↕":"varr","↖":"nwarr","↗":"nearr","↘":"searr","↙":"swarr","↝":"rarrw","↝̸":"nrarrw","↞":"Larr","↟":"Uarr","↠":"Rarr","↡":"Darr","↢":"larrtl","↣":"rarrtl","↤":"mapstoleft","↥":"mapstoup","↦":"map","↧":"mapstodown","↩":"larrhk","↪":"rarrhk","↫":"larrlp","↬":"rarrlp","↭":"harrw","↰":"lsh","↱":"rsh","↲":"ldsh","↳":"rdsh","↵":"crarr","↶":"cularr","↷":"curarr","↺":"olarr","↻":"orarr","↼":"lharu","↽":"lhard","↾":"uharr","↿":"uharl","⇀":"rharu","⇁":"rhard","⇂":"dharr","⇃":"dharl","⇄":"rlarr","⇅":"udarr","⇆":"lrarr","⇇":"llarr","⇈":"uuarr","⇉":"rrarr","⇊":"ddarr","⇋":"lrhar","⇌":"rlhar","⇐":"lArr","⇍":"nlArr","⇑":"uArr","⇒":"rArr","⇏":"nrArr","⇓":"dArr","⇔":"iff","⇎":"nhArr","⇕":"vArr","⇖":"nwArr","⇗":"neArr","⇘":"seArr","⇙":"swArr","⇚":"lAarr","⇛":"rAarr","⇝":"zigrarr","⇤":"larrb","⇥":"rarrb","⇵":"duarr","⇽":"loarr","⇾":"roarr","⇿":"hoarr","∀":"forall","∁":"comp","∂":"part","∂̸":"npart","∃":"exist","∄":"nexist","∅":"empty","∇":"Del","∈":"in","∉":"notin","∋":"ni","∌":"notni","϶":"bepsi","∏":"prod","∐":"coprod","∑":"sum","+":"plus","±":"pm","÷":"div","×":"times","<":"lt","≮":"nlt","<⃒":"nvlt","=":"equals","≠":"ne","=⃥":"bne","⩵":"Equal",">":"gt","≯":"ngt",">⃒":"nvgt","¬":"not","|":"vert","¦":"brvbar","−":"minus","∓":"mp","∔":"plusdo","⁄":"frasl","∖":"setmn","∗":"lowast","∘":"compfn","√":"Sqrt","∝":"prop","∞":"infin","∟":"angrt","∠":"ang","∠⃒":"nang","∡":"angmsd","∢":"angsph","∣":"mid","∤":"nmid","∥":"par","∦":"npar","∧":"and","∨":"or","∩":"cap","∩︀":"caps","∪":"cup","∪︀":"cups","∫":"int","∬":"Int","∭":"tint","⨌":"qint","∮":"oint","∯":"Conint","∰":"Cconint","∱":"cwint","∲":"cwconint","∳":"awconint","∴":"there4","∵":"becaus","∶":"ratio","∷":"Colon","∸":"minusd","∺":"mDDot","∻":"homtht","∼":"sim","≁":"nsim","∼⃒":"nvsim","∽":"bsim","∽̱":"race","∾":"ac","∾̳":"acE","∿":"acd","≀":"wr","≂":"esim","≂̸":"nesim","≃":"sime","≄":"nsime","≅":"cong","≇":"ncong","≆":"simne","≈":"ap","≉":"nap","≊":"ape","≋":"apid","≋̸":"napid","≌":"bcong","≍":"CupCap","≭":"NotCupCap","≍⃒":"nvap","≎":"bump","≎̸":"nbump","≏":"bumpe","≏̸":"nbumpe","≐":"doteq","≐̸":"nedot","≑":"eDot","≒":"efDot","≓":"erDot","≔":"colone","≕":"ecolon","≖":"ecir","≗":"cire","≙":"wedgeq","≚":"veeeq","≜":"trie","≟":"equest","≡":"equiv","≢":"nequiv","≡⃥":"bnequiv","≤":"le","≰":"nle","≤⃒":"nvle","≥":"ge","≱":"nge","≥⃒":"nvge","≦":"lE","≦̸":"nlE","≧":"gE","≧̸":"ngE","≨︀":"lvnE","≨":"lnE","≩":"gnE","≩︀":"gvnE","≪":"ll","≪̸":"nLtv","≪⃒":"nLt","≫":"gg","≫̸":"nGtv","≫⃒":"nGt","≬":"twixt","≲":"lsim","≴":"nlsim","≳":"gsim","≵":"ngsim","≶":"lg","≸":"ntlg","≷":"gl","≹":"ntgl","≺":"pr","⊀":"npr","≻":"sc","⊁":"nsc","≼":"prcue","⋠":"nprcue","≽":"sccue","⋡":"nsccue","≾":"prsim","≿":"scsim","≿̸":"NotSucceedsTilde","⊂":"sub","⊄":"nsub","⊂⃒":"vnsub","⊃":"sup","⊅":"nsup","⊃⃒":"vnsup","⊆":"sube","⊈":"nsube","⊇":"supe","⊉":"nsupe","⊊︀":"vsubne","⊊":"subne","⊋︀":"vsupne","⊋":"supne","⊍":"cupdot","⊎":"uplus","⊏":"sqsub","⊏̸":"NotSquareSubset","⊐":"sqsup","⊐̸":"NotSquareSuperset","⊑":"sqsube","⋢":"nsqsube","⊒":"sqsupe","⋣":"nsqsupe","⊓":"sqcap","⊓︀":"sqcaps","⊔":"sqcup","⊔︀":"sqcups","⊕":"oplus","⊖":"ominus","⊗":"otimes","⊘":"osol","⊙":"odot","⊚":"ocir","⊛":"oast","⊝":"odash","⊞":"plusb","⊟":"minusb","⊠":"timesb","⊡":"sdotb","⊢":"vdash","⊬":"nvdash","⊣":"dashv","⊤":"top","⊥":"bot","⊧":"models","⊨":"vDash","⊭":"nvDash","⊩":"Vdash","⊮":"nVdash","⊪":"Vvdash","⊫":"VDash","⊯":"nVDash","⊰":"prurel","⊲":"vltri","⋪":"nltri","⊳":"vrtri","⋫":"nrtri","⊴":"ltrie","⋬":"nltrie","⊴⃒":"nvltrie","⊵":"rtrie","⋭":"nrtrie","⊵⃒":"nvrtrie","⊶":"origof","⊷":"imof","⊸":"mumap","⊹":"hercon","⊺":"intcal","⊻":"veebar","⊽":"barvee","⊾":"angrtvb","⊿":"lrtri","⋀":"Wedge","⋁":"Vee","⋂":"xcap","⋃":"xcup","⋄":"diam","⋅":"sdot","⋆":"Star","⋇":"divonx","⋈":"bowtie","⋉":"ltimes","⋊":"rtimes","⋋":"lthree","⋌":"rthree","⋍":"bsime","⋎":"cuvee","⋏":"cuwed","⋐":"Sub","⋑":"Sup","⋒":"Cap","⋓":"Cup","⋔":"fork","⋕":"epar","⋖":"ltdot","⋗":"gtdot","⋘":"Ll","⋘̸":"nLl","⋙":"Gg","⋙̸":"nGg","⋚︀":"lesg","⋚":"leg","⋛":"gel","⋛︀":"gesl","⋞":"cuepr","⋟":"cuesc","⋦":"lnsim","⋧":"gnsim","⋨":"prnsim","⋩":"scnsim","⋮":"vellip","⋯":"ctdot","⋰":"utdot","⋱":"dtdot","⋲":"disin","⋳":"isinsv","⋴":"isins","⋵":"isindot","⋵̸":"notindot","⋶":"notinvc","⋷":"notinvb","⋹":"isinE","⋹̸":"notinE","⋺":"nisd","⋻":"xnis","⋼":"nis","⋽":"notnivc","⋾":"notnivb","⌅":"barwed","⌆":"Barwed","⌌":"drcrop","⌍":"dlcrop","⌎":"urcrop","⌏":"ulcrop","⌐":"bnot","⌒":"profline","⌓":"profsurf","⌕":"telrec","⌖":"target","⌜":"ulcorn","⌝":"urcorn","⌞":"dlcorn","⌟":"drcorn","⌢":"frown","⌣":"smile","⌭":"cylcty","⌮":"profalar","⌶":"topbot","⌽":"ovbar","⌿":"solbar","⍼":"angzarr","⎰":"lmoust","⎱":"rmoust","⎴":"tbrk","⎵":"bbrk","⎶":"bbrktbrk","⏜":"OverParenthesis","⏝":"UnderParenthesis","⏞":"OverBrace","⏟":"UnderBrace","⏢":"trpezium","⏧":"elinters","␣":"blank","─":"boxh","│":"boxv","┌":"boxdr","┐":"boxdl","└":"boxur","┘":"boxul","├":"boxvr","┤":"boxvl","┬":"boxhd","┴":"boxhu","┼":"boxvh","═":"boxH","║":"boxV","╒":"boxdR","╓":"boxDr","╔":"boxDR","╕":"boxdL","╖":"boxDl","╗":"boxDL","╘":"boxuR","╙":"boxUr","╚":"boxUR","╛":"boxuL","╜":"boxUl","╝":"boxUL","╞":"boxvR","╟":"boxVr","╠":"boxVR","╡":"boxvL","╢":"boxVl","╣":"boxVL","╤":"boxHd","╥":"boxhD","╦":"boxHD","╧":"boxHu","╨":"boxhU","╩":"boxHU","╪":"boxvH","╫":"boxVh","╬":"boxVH","▀":"uhblk","▄":"lhblk","█":"block","░":"blk14","▒":"blk12","▓":"blk34","□":"squ","▪":"squf","▫":"EmptyVerySmallSquare","▭":"rect","▮":"marker","▱":"fltns","△":"xutri","▴":"utrif","▵":"utri","▸":"rtrif","▹":"rtri","▽":"xdtri","▾":"dtrif","▿":"dtri","◂":"ltrif","◃":"ltri","◊":"loz","○":"cir","◬":"tridot","◯":"xcirc","◸":"ultri","◹":"urtri","◺":"lltri","◻":"EmptySmallSquare","◼":"FilledSmallSquare","★":"starf","☆":"star","☎":"phone","♀":"female","♂":"male","♠":"spades","♣":"clubs","♥":"hearts","♦":"diams","♪":"sung","✓":"check","✗":"cross","✠":"malt","✶":"sext","❘":"VerticalSeparator","⟈":"bsolhsub","⟉":"suphsol","⟵":"xlarr","⟶":"xrarr","⟷":"xharr","⟸":"xlArr","⟹":"xrArr","⟺":"xhArr","⟼":"xmap","⟿":"dzigrarr","⤂":"nvlArr","⤃":"nvrArr","⤄":"nvHarr","⤅":"Map","⤌":"lbarr","⤍":"rbarr","⤎":"lBarr","⤏":"rBarr","⤐":"RBarr","⤑":"DDotrahd","⤒":"UpArrowBar","⤓":"DownArrowBar","⤖":"Rarrtl","⤙":"latail","⤚":"ratail","⤛":"lAtail","⤜":"rAtail","⤝":"larrfs","⤞":"rarrfs","⤟":"larrbfs","⤠":"rarrbfs","⤣":"nwarhk","⤤":"nearhk","⤥":"searhk","⤦":"swarhk","⤧":"nwnear","⤨":"toea","⤩":"tosa","⤪":"swnwar","⤳":"rarrc","⤳̸":"nrarrc","⤵":"cudarrr","⤶":"ldca","⤷":"rdca","⤸":"cudarrl","⤹":"larrpl","⤼":"curarrm","⤽":"cularrp","⥅":"rarrpl","⥈":"harrcir","⥉":"Uarrocir","⥊":"lurdshar","⥋":"ldrushar","⥎":"LeftRightVector","⥏":"RightUpDownVector","⥐":"DownLeftRightVector","⥑":"LeftUpDownVector","⥒":"LeftVectorBar","⥓":"RightVectorBar","⥔":"RightUpVectorBar","⥕":"RightDownVectorBar","⥖":"DownLeftVectorBar","⥗":"DownRightVectorBar","⥘":"LeftUpVectorBar","⥙":"LeftDownVectorBar","⥚":"LeftTeeVector","⥛":"RightTeeVector","⥜":"RightUpTeeVector","⥝":"RightDownTeeVector","⥞":"DownLeftTeeVector","⥟":"DownRightTeeVector","⥠":"LeftUpTeeVector","⥡":"LeftDownTeeVector","⥢":"lHar","⥣":"uHar","⥤":"rHar","⥥":"dHar","⥦":"luruhar","⥧":"ldrdhar","⥨":"ruluhar","⥩":"rdldhar","⥪":"lharul","⥫":"llhard","⥬":"rharul","⥭":"lrhard","⥮":"udhar","⥯":"duhar","⥰":"RoundImplies","⥱":"erarr","⥲":"simrarr","⥳":"larrsim","⥴":"rarrsim","⥵":"rarrap","⥶":"ltlarr","⥸":"gtrarr","⥹":"subrarr","⥻":"suplarr","⥼":"lfisht","⥽":"rfisht","⥾":"ufisht","⥿":"dfisht","⦚":"vzigzag","⦜":"vangrt","⦝":"angrtvbd","⦤":"ange","⦥":"range","⦦":"dwangle","⦧":"uwangle","⦨":"angmsdaa","⦩":"angmsdab","⦪":"angmsdac","⦫":"angmsdad","⦬":"angmsdae","⦭":"angmsdaf","⦮":"angmsdag","⦯":"angmsdah","⦰":"bemptyv","⦱":"demptyv","⦲":"cemptyv","⦳":"raemptyv","⦴":"laemptyv","⦵":"ohbar","⦶":"omid","⦷":"opar","⦹":"operp","⦻":"olcross","⦼":"odsold","⦾":"olcir","⦿":"ofcir","⧀":"olt","⧁":"ogt","⧂":"cirscir","⧃":"cirE","⧄":"solb","⧅":"bsolb","⧉":"boxbox","⧍":"trisb","⧎":"rtriltri","⧏":"LeftTriangleBar","⧏̸":"NotLeftTriangleBar","⧐":"RightTriangleBar","⧐̸":"NotRightTriangleBar","⧜":"iinfin","⧝":"infintie","⧞":"nvinfin","⧣":"eparsl","⧤":"smeparsl","⧥":"eqvparsl","⧫":"lozf","⧴":"RuleDelayed","⧶":"dsol","⨀":"xodot","⨁":"xoplus","⨂":"xotime","⨄":"xuplus","⨆":"xsqcup","⨍":"fpartint","⨐":"cirfnint","⨑":"awint","⨒":"rppolint","⨓":"scpolint","⨔":"npolint","⨕":"pointint","⨖":"quatint","⨗":"intlarhk","⨢":"pluscir","⨣":"plusacir","⨤":"simplus","⨥":"plusdu","⨦":"plussim","⨧":"plustwo","⨩":"mcomma","⨪":"minusdu","⨭":"loplus","⨮":"roplus","⨯":"Cross","⨰":"timesd","⨱":"timesbar","⨳":"smashp","⨴":"lotimes","⨵":"rotimes","⨶":"otimesas","⨷":"Otimes","⨸":"odiv","⨹":"triplus","⨺":"triminus","⨻":"tritime","⨼":"iprod","⨿":"amalg","⩀":"capdot","⩂":"ncup","⩃":"ncap","⩄":"capand","⩅":"cupor","⩆":"cupcap","⩇":"capcup","⩈":"cupbrcap","⩉":"capbrcup","⩊":"cupcup","⩋":"capcap","⩌":"ccups","⩍":"ccaps","⩐":"ccupssm","⩓":"And","⩔":"Or","⩕":"andand","⩖":"oror","⩗":"orslope","⩘":"andslope","⩚":"andv","⩛":"orv","⩜":"andd","⩝":"ord","⩟":"wedbar","⩦":"sdote","⩪":"simdot","⩭":"congdot","⩭̸":"ncongdot","⩮":"easter","⩯":"apacir","⩰":"apE","⩰̸":"napE","⩱":"eplus","⩲":"pluse","⩳":"Esim","⩷":"eDDot","⩸":"equivDD","⩹":"ltcir","⩺":"gtcir","⩻":"ltquest","⩼":"gtquest","⩽":"les","⩽̸":"nles","⩾":"ges","⩾̸":"nges","⩿":"lesdot","⪀":"gesdot","⪁":"lesdoto","⪂":"gesdoto","⪃":"lesdotor","⪄":"gesdotol","⪅":"lap","⪆":"gap","⪇":"lne","⪈":"gne","⪉":"lnap","⪊":"gnap","⪋":"lEg","⪌":"gEl","⪍":"lsime","⪎":"gsime","⪏":"lsimg","⪐":"gsiml","⪑":"lgE","⪒":"glE","⪓":"lesges","⪔":"gesles","⪕":"els","⪖":"egs","⪗":"elsdot","⪘":"egsdot","⪙":"el","⪚":"eg","⪝":"siml","⪞":"simg","⪟":"simlE","⪠":"simgE","⪡":"LessLess","⪡̸":"NotNestedLessLess","⪢":"GreaterGreater","⪢̸":"NotNestedGreaterGreater","⪤":"glj","⪥":"gla","⪦":"ltcc","⪧":"gtcc","⪨":"lescc","⪩":"gescc","⪪":"smt","⪫":"lat","⪬":"smte","⪬︀":"smtes","⪭":"late","⪭︀":"lates","⪮":"bumpE","⪯":"pre","⪯̸":"npre","⪰":"sce","⪰̸":"nsce","⪳":"prE","⪴":"scE","⪵":"prnE","⪶":"scnE","⪷":"prap","⪸":"scap","⪹":"prnap","⪺":"scnap","⪻":"Pr","⪼":"Sc","⪽":"subdot","⪾":"supdot","⪿":"subplus","⫀":"supplus","⫁":"submult","⫂":"supmult","⫃":"subedot","⫄":"supedot","⫅":"subE","⫅̸":"nsubE","⫆":"supE","⫆̸":"nsupE","⫇":"subsim","⫈":"supsim","⫋︀":"vsubnE","⫋":"subnE","⫌︀":"vsupnE","⫌":"supnE","⫏":"csub","⫐":"csup","⫑":"csube","⫒":"csupe","⫓":"subsup","⫔":"supsub","⫕":"subsub","⫖":"supsup","⫗":"suphsub","⫘":"supdsub","⫙":"forkv","⫚":"topfork","⫛":"mlcp","⫤":"Dashv","⫦":"Vdashl","⫧":"Barv","⫨":"vBar","⫩":"vBarv","⫫":"Vbar","⫬":"Not","⫭":"bNot","⫮":"rnmid","⫯":"cirmid","⫰":"midcir","⫱":"topcir","⫲":"nhpar","⫳":"parsim","⫽":"parsl","⫽⃥":"nparsl","♭":"flat","♮":"natur","♯":"sharp","¤":"curren","¢":"cent",$:"dollar","£":"pound","¥":"yen","€":"euro","¹":"sup1","½":"half","⅓":"frac13","¼":"frac14","⅕":"frac15","⅙":"frac16","⅛":"frac18","²":"sup2","⅔":"frac23","⅖":"frac25","³":"sup3","¾":"frac34","⅗":"frac35","⅜":"frac38","⅘":"frac45","⅚":"frac56","⅝":"frac58","⅞":"frac78","𝒶":"ascr","𝕒":"aopf","𝔞":"afr","𝔸":"Aopf","𝔄":"Afr","𝒜":"Ascr","ª":"ordf","á":"aacute","Á":"Aacute","à":"agrave","À":"Agrave","ă":"abreve","Ă":"Abreve","â":"acirc","Â":"Acirc","å":"aring","Å":"angst","ä":"auml","Ä":"Auml","ã":"atilde","Ã":"Atilde","ą":"aogon","Ą":"Aogon","ā":"amacr","Ā":"Amacr","æ":"aelig","Æ":"AElig","𝒷":"bscr","𝕓":"bopf","𝔟":"bfr","𝔹":"Bopf","ℬ":"Bscr","𝔅":"Bfr","𝔠":"cfr","𝒸":"cscr","𝕔":"copf","ℭ":"Cfr","𝒞":"Cscr","ℂ":"Copf","ć":"cacute","Ć":"Cacute","ĉ":"ccirc","Ĉ":"Ccirc","č":"ccaron","Č":"Ccaron","ċ":"cdot","Ċ":"Cdot","ç":"ccedil","Ç":"Ccedil","℅":"incare","𝔡":"dfr","ⅆ":"dd","𝕕":"dopf","𝒹":"dscr","𝒟":"Dscr","𝔇":"Dfr","ⅅ":"DD","𝔻":"Dopf","ď":"dcaron","Ď":"Dcaron","đ":"dstrok","Đ":"Dstrok","ð":"eth","Ð":"ETH","ⅇ":"ee","ℯ":"escr","𝔢":"efr","𝕖":"eopf","ℰ":"Escr","𝔈":"Efr","𝔼":"Eopf","é":"eacute","É":"Eacute","è":"egrave","È":"Egrave","ê":"ecirc","Ê":"Ecirc","ě":"ecaron","Ě":"Ecaron","ë":"euml","Ë":"Euml","ė":"edot","Ė":"Edot","ę":"eogon","Ę":"Eogon","ē":"emacr","Ē":"Emacr","𝔣":"ffr","𝕗":"fopf","𝒻":"fscr","𝔉":"Ffr","𝔽":"Fopf","ℱ":"Fscr","ff":"fflig","ffi":"ffilig","ffl":"ffllig","fi":"filig",fj:"fjlig","fl":"fllig","ƒ":"fnof","ℊ":"gscr","𝕘":"gopf","𝔤":"gfr","𝒢":"Gscr","𝔾":"Gopf","𝔊":"Gfr","ǵ":"gacute","ğ":"gbreve","Ğ":"Gbreve","ĝ":"gcirc","Ĝ":"Gcirc","ġ":"gdot","Ġ":"Gdot","Ģ":"Gcedil","𝔥":"hfr","ℎ":"planckh","𝒽":"hscr","𝕙":"hopf","ℋ":"Hscr","ℌ":"Hfr","ℍ":"Hopf","ĥ":"hcirc","Ĥ":"Hcirc","ℏ":"hbar","ħ":"hstrok","Ħ":"Hstrok","𝕚":"iopf","𝔦":"ifr","𝒾":"iscr","ⅈ":"ii","𝕀":"Iopf","ℐ":"Iscr","ℑ":"Im","í":"iacute","Í":"Iacute","ì":"igrave","Ì":"Igrave","î":"icirc","Î":"Icirc","ï":"iuml","Ï":"Iuml","ĩ":"itilde","Ĩ":"Itilde","İ":"Idot","į":"iogon","Į":"Iogon","ī":"imacr","Ī":"Imacr","ij":"ijlig","IJ":"IJlig","ı":"imath","𝒿":"jscr","𝕛":"jopf","𝔧":"jfr","𝒥":"Jscr","𝔍":"Jfr","𝕁":"Jopf","ĵ":"jcirc","Ĵ":"Jcirc","ȷ":"jmath","𝕜":"kopf","𝓀":"kscr","𝔨":"kfr","𝒦":"Kscr","𝕂":"Kopf","𝔎":"Kfr","ķ":"kcedil","Ķ":"Kcedil","𝔩":"lfr","𝓁":"lscr","ℓ":"ell","𝕝":"lopf","ℒ":"Lscr","𝔏":"Lfr","𝕃":"Lopf","ĺ":"lacute","Ĺ":"Lacute","ľ":"lcaron","Ľ":"Lcaron","ļ":"lcedil","Ļ":"Lcedil","ł":"lstrok","Ł":"Lstrok","ŀ":"lmidot","Ŀ":"Lmidot","𝔪":"mfr","𝕞":"mopf","𝓂":"mscr","𝔐":"Mfr","𝕄":"Mopf","ℳ":"Mscr","𝔫":"nfr","𝕟":"nopf","𝓃":"nscr","ℕ":"Nopf","𝒩":"Nscr","𝔑":"Nfr","ń":"nacute","Ń":"Nacute","ň":"ncaron","Ň":"Ncaron","ñ":"ntilde","Ñ":"Ntilde","ņ":"ncedil","Ņ":"Ncedil","№":"numero","ŋ":"eng","Ŋ":"ENG","𝕠":"oopf","𝔬":"ofr","ℴ":"oscr","𝒪":"Oscr","𝔒":"Ofr","𝕆":"Oopf","º":"ordm","ó":"oacute","Ó":"Oacute","ò":"ograve","Ò":"Ograve","ô":"ocirc","Ô":"Ocirc","ö":"ouml","Ö":"Ouml","ő":"odblac","Ő":"Odblac","õ":"otilde","Õ":"Otilde","ø":"oslash","Ø":"Oslash","ō":"omacr","Ō":"Omacr","œ":"oelig","Œ":"OElig","𝔭":"pfr","𝓅":"pscr","𝕡":"popf","ℙ":"Popf","𝔓":"Pfr","𝒫":"Pscr","𝕢":"qopf","𝔮":"qfr","𝓆":"qscr","𝒬":"Qscr","𝔔":"Qfr","ℚ":"Qopf","ĸ":"kgreen","𝔯":"rfr","𝕣":"ropf","𝓇":"rscr","ℛ":"Rscr","ℜ":"Re","ℝ":"Ropf","ŕ":"racute","Ŕ":"Racute","ř":"rcaron","Ř":"Rcaron","ŗ":"rcedil","Ŗ":"Rcedil","𝕤":"sopf","𝓈":"sscr","𝔰":"sfr","𝕊":"Sopf","𝔖":"Sfr","𝒮":"Sscr","Ⓢ":"oS","ś":"sacute","Ś":"Sacute","ŝ":"scirc","Ŝ":"Scirc","š":"scaron","Š":"Scaron","ş":"scedil","Ş":"Scedil","ß":"szlig","𝔱":"tfr","𝓉":"tscr","𝕥":"topf","𝒯":"Tscr","𝔗":"Tfr","𝕋":"Topf","ť":"tcaron","Ť":"Tcaron","ţ":"tcedil","Ţ":"Tcedil","™":"trade","ŧ":"tstrok","Ŧ":"Tstrok","𝓊":"uscr","𝕦":"uopf","𝔲":"ufr","𝕌":"Uopf","𝔘":"Ufr","𝒰":"Uscr","ú":"uacute","Ú":"Uacute","ù":"ugrave","Ù":"Ugrave","ŭ":"ubreve","Ŭ":"Ubreve","û":"ucirc","Û":"Ucirc","ů":"uring","Ů":"Uring","ü":"uuml","Ü":"Uuml","ű":"udblac","Ű":"Udblac","ũ":"utilde","Ũ":"Utilde","ų":"uogon","Ų":"Uogon","ū":"umacr","Ū":"Umacr","𝔳":"vfr","𝕧":"vopf","𝓋":"vscr","𝔙":"Vfr","𝕍":"Vopf","𝒱":"Vscr","𝕨":"wopf","𝓌":"wscr","𝔴":"wfr","𝒲":"Wscr","𝕎":"Wopf","𝔚":"Wfr","ŵ":"wcirc","Ŵ":"Wcirc","𝔵":"xfr","𝓍":"xscr","𝕩":"xopf","𝕏":"Xopf","𝔛":"Xfr","𝒳":"Xscr","𝔶":"yfr","𝓎":"yscr","𝕪":"yopf","𝒴":"Yscr","𝔜":"Yfr","𝕐":"Yopf","ý":"yacute","Ý":"Yacute","ŷ":"ycirc","Ŷ":"Ycirc","ÿ":"yuml","Ÿ":"Yuml","𝓏":"zscr","𝔷":"zfr","𝕫":"zopf","ℨ":"Zfr","ℤ":"Zopf","𝒵":"Zscr","ź":"zacute","Ź":"Zacute","ž":"zcaron","Ž":"Zcaron","ż":"zdot","Ż":"Zdot","Ƶ":"imped","þ":"thorn","Þ":"THORN","ʼn":"napos","α":"alpha","Α":"Alpha","β":"beta","Β":"Beta","γ":"gamma","Γ":"Gamma","δ":"delta","Δ":"Delta","ε":"epsi","ϵ":"epsiv","Ε":"Epsilon","ϝ":"gammad","Ϝ":"Gammad","ζ":"zeta","Ζ":"Zeta","η":"eta","Η":"Eta","θ":"theta","ϑ":"thetav","Θ":"Theta","ι":"iota","Ι":"Iota","κ":"kappa","ϰ":"kappav","Κ":"Kappa","λ":"lambda","Λ":"Lambda","μ":"mu","µ":"micro","Μ":"Mu","ν":"nu","Ν":"Nu","ξ":"xi","Ξ":"Xi","ο":"omicron","Ο":"Omicron","π":"pi","ϖ":"piv","Π":"Pi","ρ":"rho","ϱ":"rhov","Ρ":"Rho","σ":"sigma","Σ":"Sigma","ς":"sigmaf","τ":"tau","Τ":"Tau","υ":"upsi","Υ":"Upsilon","ϒ":"Upsi","φ":"phi","ϕ":"phiv","Φ":"Phi","χ":"chi","Χ":"Chi","ψ":"psi","Ψ":"Psi","ω":"omega","Ω":"ohm","а":"acy","А":"Acy","б":"bcy","Б":"Bcy","в":"vcy","В":"Vcy","г":"gcy","Г":"Gcy","ѓ":"gjcy","Ѓ":"GJcy","д":"dcy","Д":"Dcy","ђ":"djcy","Ђ":"DJcy","е":"iecy","Е":"IEcy","ё":"iocy","Ё":"IOcy","є":"jukcy","Є":"Jukcy","ж":"zhcy","Ж":"ZHcy","з":"zcy","З":"Zcy","ѕ":"dscy","Ѕ":"DScy","и":"icy","И":"Icy","і":"iukcy","І":"Iukcy","ї":"yicy","Ї":"YIcy","й":"jcy","Й":"Jcy","ј":"jsercy","Ј":"Jsercy","к":"kcy","К":"Kcy","ќ":"kjcy","Ќ":"KJcy","л":"lcy","Л":"Lcy","љ":"ljcy","Љ":"LJcy","м":"mcy","М":"Mcy","н":"ncy","Н":"Ncy","њ":"njcy","Њ":"NJcy","о":"ocy","О":"Ocy","п":"pcy","П":"Pcy","р":"rcy","Р":"Rcy","с":"scy","С":"Scy","т":"tcy","Т":"Tcy","ћ":"tshcy","Ћ":"TSHcy","у":"ucy","У":"Ucy","ў":"ubrcy","Ў":"Ubrcy","ф":"fcy","Ф":"Fcy","х":"khcy","Х":"KHcy","ц":"tscy","Ц":"TScy","ч":"chcy","Ч":"CHcy","џ":"dzcy","Џ":"DZcy","ш":"shcy","Ш":"SHcy","щ":"shchcy","Щ":"SHCHcy","ъ":"hardcy","Ъ":"HARDcy","ы":"ycy","Ы":"Ycy","ь":"softcy","Ь":"SOFTcy","э":"ecy","Э":"Ecy","ю":"yucy","Ю":"YUcy","я":"yacy","Я":"YAcy","ℵ":"aleph","ℶ":"beth","ℷ":"gimel","ℸ":"daleth"},f=/["&'<>`]/g,_={'"':"&quot;","&":"&amp;","'":"&#x27;","<":"&lt;",">":"&gt;","`":"&#x60;"},p=/&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/,m=/[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,y=/&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)([=a-zA-Z0-9])?/g,g={aacute:"á",Aacute:"Á",abreve:"ă",Abreve:"Ă",ac:"∾",acd:"∿",acE:"∾̳",acirc:"â",Acirc:"Â",acute:"´",acy:"а",Acy:"А",aelig:"æ",AElig:"Æ",af:"⁡",afr:"𝔞",Afr:"𝔄",agrave:"à",Agrave:"À",alefsym:"ℵ",aleph:"ℵ",alpha:"α",Alpha:"Α",amacr:"ā",Amacr:"Ā",amalg:"⨿",amp:"&",AMP:"&",and:"∧",And:"⩓",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",aogon:"ą",Aogon:"Ą",aopf:"𝕒",Aopf:"𝔸",ap:"≈",apacir:"⩯",ape:"≊",apE:"⩰",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",aring:"å",Aring:"Å",ascr:"𝒶",Ascr:"𝒜",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",atilde:"ã",Atilde:"Ã",auml:"ä",Auml:"Ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",bcy:"б",Bcy:"Б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",beta:"β",Beta:"Β",beth:"ℶ",between:"≬",bfr:"𝔟",Bfr:"𝔅",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bnot:"⌐",bNot:"⫭",bopf:"𝕓",Bopf:"𝔹",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxhD:"╥",boxHd:"╤",boxHD:"╦",boxhu:"┴",boxhU:"╨",boxHu:"╧",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpe:"≏",bumpE:"⪮",bumpeq:"≏",Bumpeq:"≎",cacute:"ć",Cacute:"Ć",cap:"∩",Cap:"⋒",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",ccaron:"č",Ccaron:"Č",ccedil:"ç",Ccedil:"Ç",ccirc:"ĉ",Ccirc:"Ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",cdot:"ċ",Cdot:"Ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",chcy:"ч",CHcy:"Ч",check:"✓",checkmark:"✓",chi:"χ",Chi:"Χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cire:"≗",cirE:"⧃",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",colone:"≔",Colone:"⩴",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",cscr:"𝒸",Cscr:"𝒞",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cup:"∪",Cup:"⋓",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",dArr:"⇓",Darr:"↡",dash:"‐",dashv:"⊣",Dashv:"⫤",dbkarow:"⤏",dblac:"˝",dcaron:"ď",Dcaron:"Ď",dcy:"д",Dcy:"Д",dd:"ⅆ",DD:"ⅅ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",delta:"δ",Delta:"Δ",demptyv:"⦱",dfisht:"⥿",dfr:"𝔡",Dfr:"𝔇",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",djcy:"ђ",DJcy:"Ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",dopf:"𝕕",Dopf:"𝔻",dot:"˙",Dot:"¨",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",downarrow:"↓",Downarrow:"⇓",DownArrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",dscr:"𝒹",Dscr:"𝒟",dscy:"ѕ",DScy:"Ѕ",dsol:"⧶",dstrok:"đ",Dstrok:"Đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",dzcy:"џ",DZcy:"Џ",dzigrarr:"⟿",eacute:"é",Eacute:"É",easter:"⩮",ecaron:"ě",Ecaron:"Ě",ecir:"≖",ecirc:"ê",Ecirc:"Ê",ecolon:"≕",ecy:"э",Ecy:"Э",eDDot:"⩷",edot:"ė",eDot:"≑",Edot:"Ė",ee:"ⅇ",efDot:"≒",efr:"𝔢",Efr:"𝔈",eg:"⪚",egrave:"è",Egrave:"È",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",emacr:"ē",Emacr:"Ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",eng:"ŋ",ENG:"Ŋ",ensp:" ",eogon:"ę",Eogon:"Ę",eopf:"𝕖",Eopf:"𝔼",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",epsilon:"ε",Epsilon:"Ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",esim:"≂",Esim:"⩳",eta:"η",Eta:"Η",eth:"ð",ETH:"Ð",euml:"ë",Euml:"Ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",fcy:"ф",Fcy:"Ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",ffr:"𝔣",Ffr:"𝔉",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",fopf:"𝕗",Fopf:"𝔽",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",gamma:"γ",Gamma:"Γ",gammad:"ϝ",Gammad:"Ϝ",gap:"⪆",gbreve:"ğ",Gbreve:"Ğ",Gcedil:"Ģ",gcirc:"ĝ",Gcirc:"Ĝ",gcy:"г",Gcy:"Г",gdot:"ġ",Gdot:"Ġ",ge:"≥",gE:"≧",gel:"⋛",gEl:"⪌",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",gfr:"𝔤",Gfr:"𝔊",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",gjcy:"ѓ",GJcy:"Ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",gopf:"𝕘",Gopf:"𝔾",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",gscr:"ℊ",Gscr:"𝒢",gsim:"≳",gsime:"⪎",gsiml:"⪐",gt:">",Gt:"≫",GT:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",hardcy:"ъ",HARDcy:"Ъ",harr:"↔",hArr:"⇔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",hcirc:"ĥ",Hcirc:"Ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",hstrok:"ħ",Hstrok:"Ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",iacute:"í",Iacute:"Í",ic:"⁣",icirc:"î",Icirc:"Î",icy:"и",Icy:"И",Idot:"İ",iecy:"е",IEcy:"Е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",igrave:"ì",Igrave:"Ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",ijlig:"ij",IJlig:"IJ",Im:"ℑ",imacr:"ī",Imacr:"Ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",int:"∫",Int:"∬",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",iocy:"ё",IOcy:"Ё",iogon:"į",Iogon:"Į",iopf:"𝕚",Iopf:"𝕀",iota:"ι",Iota:"Ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",itilde:"ĩ",Itilde:"Ĩ",iukcy:"і",Iukcy:"І",iuml:"ï",Iuml:"Ï",jcirc:"ĵ",Jcirc:"Ĵ",jcy:"й",Jcy:"Й",jfr:"𝔧",Jfr:"𝔍",jmath:"ȷ",jopf:"𝕛",Jopf:"𝕁",jscr:"𝒿",Jscr:"𝒥",jsercy:"ј",Jsercy:"Ј",jukcy:"є",Jukcy:"Є",kappa:"κ",Kappa:"Κ",kappav:"ϰ",kcedil:"ķ",Kcedil:"Ķ",kcy:"к",Kcy:"К",kfr:"𝔨",Kfr:"𝔎",kgreen:"ĸ",khcy:"х",KHcy:"Х",kjcy:"ќ",KJcy:"Ќ",kopf:"𝕜",Kopf:"𝕂",kscr:"𝓀",Kscr:"𝒦",lAarr:"⇚",lacute:"ĺ",Lacute:"Ĺ",laemptyv:"⦴",lagran:"ℒ",lambda:"λ",Lambda:"Λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larr:"←",lArr:"⇐",Larr:"↞",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",latail:"⤙",lAtail:"⤛",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",lcaron:"ľ",Lcaron:"Ľ",lcedil:"ļ",Lcedil:"Ļ",lceil:"⌈",lcub:"{",lcy:"л",Lcy:"Л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",leftarrow:"←",Leftarrow:"⇐",LeftArrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",Leftrightarrow:"⇔",LeftRightArrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",leg:"⋚",lEg:"⪋",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",lfr:"𝔩",Lfr:"𝔏",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",ljcy:"љ",LJcy:"Љ",ll:"≪",Ll:"⋘",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",lmidot:"ŀ",Lmidot:"Ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",Longleftarrow:"⟸",LongLeftArrow:"⟵",longleftrightarrow:"⟷",Longleftrightarrow:"⟺",LongLeftRightArrow:"⟷",longmapsto:"⟼",longrightarrow:"⟶",Longrightarrow:"⟹",LongRightArrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",lopf:"𝕝",Lopf:"𝕃",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",lstrok:"ł",Lstrok:"Ł",lt:"<",Lt:"≪",LT:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",map:"↦",Map:"⤅",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",mcy:"м",Mcy:"М",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",mfr:"𝔪",Mfr:"𝔐",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",mopf:"𝕞",Mopf:"𝕄",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",mu:"μ",Mu:"Μ",multimap:"⊸",mumap:"⊸",nabla:"∇",nacute:"ń",Nacute:"Ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",ncaron:"ň",Ncaron:"Ň",ncedil:"ņ",Ncedil:"Ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",ncy:"н",Ncy:"Н",ndash:"–",ne:"≠",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",nfr:"𝔫",Nfr:"𝔑",nge:"≱",ngE:"≧̸",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",ngt:"≯",nGt:"≫⃒",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",njcy:"њ",NJcy:"Њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nle:"≰",nlE:"≦̸",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nlt:"≮",nLt:"≪⃒",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",not:"¬",Not:"⫬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrarr:"↛",nrArr:"⇏",nrarrc:"⤳̸",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",nscr:"𝓃",Nscr:"𝒩",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsube:"⊈",nsubE:"⫅̸",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupe:"⊉",nsupE:"⫆̸",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",ntilde:"ñ",Ntilde:"Ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",nu:"ν",Nu:"Ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",oacute:"ó",Oacute:"Ó",oast:"⊛",ocir:"⊚",ocirc:"ô",Ocirc:"Ô",ocy:"о",Ocy:"О",odash:"⊝",odblac:"ő",Odblac:"Ő",odiv:"⨸",odot:"⊙",odsold:"⦼",oelig:"œ",OElig:"Œ",ofcir:"⦿",ofr:"𝔬",Ofr:"𝔒",ogon:"˛",ograve:"ò",Ograve:"Ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",omacr:"ō",Omacr:"Ō",omega:"ω",Omega:"Ω",omicron:"ο",Omicron:"Ο",omid:"⦶",ominus:"⊖",oopf:"𝕠",Oopf:"𝕆",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",or:"∨",Or:"⩔",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",oscr:"ℴ",Oscr:"𝒪",oslash:"ø",Oslash:"Ø",osol:"⊘",otilde:"õ",Otilde:"Õ",otimes:"⊗",Otimes:"⨷",otimesas:"⨶",ouml:"ö",Ouml:"Ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",pcy:"п",Pcy:"П",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",pfr:"𝔭",Pfr:"𝔓",phi:"φ",Phi:"Φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",pi:"π",Pi:"Π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",pr:"≺",Pr:"⪻",prap:"⪷",prcue:"≼",pre:"⪯",prE:"⪳",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",pscr:"𝓅",Pscr:"𝒫",psi:"ψ",Psi:"Ψ",puncsp:" ",qfr:"𝔮",Qfr:"𝔔",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",qscr:"𝓆",Qscr:"𝒬",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",racute:"ŕ",Racute:"Ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarr:"→",rArr:"⇒",Rarr:"↠",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",rarrtl:"↣",Rarrtl:"⤖",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",rcaron:"ř",Rcaron:"Ř",rcedil:"ŗ",Rcedil:"Ŗ",rceil:"⌉",rcub:"}",rcy:"р",Rcy:"Р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",rho:"ρ",Rho:"Ρ",rhov:"ϱ",RightAngleBracket:"⟩",rightarrow:"→",Rightarrow:"⇒",RightArrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",sacute:"ś",Sacute:"Ś",sbquo:"‚",sc:"≻",Sc:"⪼",scap:"⪸",scaron:"š",Scaron:"Š",sccue:"≽",sce:"⪰",scE:"⪴",scedil:"ş",Scedil:"Ş",scirc:"ŝ",Scirc:"Ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",scy:"с",Scy:"С",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",sfr:"𝔰",Sfr:"𝔖",sfrown:"⌢",sharp:"♯",shchcy:"щ",SHCHcy:"Щ",shcy:"ш",SHcy:"Ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",sigma:"σ",Sigma:"Σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",softcy:"ь",SOFTcy:"Ь",sol:"/",solb:"⧄",solbar:"⌿",sopf:"𝕤",Sopf:"𝕊",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",sscr:"𝓈",Sscr:"𝒮",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",star:"☆",Star:"⋆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",sube:"⊆",subE:"⫅",subedot:"⫃",submult:"⫁",subne:"⊊",subnE:"⫋",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup:"⊃",Sup:"⋑",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supe:"⊇",supE:"⫆",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supne:"⊋",supnE:"⫌",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",tau:"τ",Tau:"Τ",tbrk:"⎴",tcaron:"ť",Tcaron:"Ť",tcedil:"ţ",Tcedil:"Ţ",tcy:"т",Tcy:"Т",tdot:"⃛",telrec:"⌕",tfr:"𝔱",Tfr:"𝔗",there4:"∴",therefore:"∴",Therefore:"∴",theta:"θ",Theta:"Θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",thorn:"þ",THORN:"Þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",topf:"𝕥",Topf:"𝕋",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",tscr:"𝓉",Tscr:"𝒯",tscy:"ц",TScy:"Ц",tshcy:"ћ",TSHcy:"Ћ",tstrok:"ŧ",Tstrok:"Ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",uacute:"ú",Uacute:"Ú",uarr:"↑",uArr:"⇑",Uarr:"↟",Uarrocir:"⥉",ubrcy:"ў",Ubrcy:"Ў",ubreve:"ŭ",Ubreve:"Ŭ",ucirc:"û",Ucirc:"Û",ucy:"у",Ucy:"У",udarr:"⇅",udblac:"ű",Udblac:"Ű",udhar:"⥮",ufisht:"⥾",ufr:"𝔲",Ufr:"𝔘",ugrave:"ù",Ugrave:"Ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",umacr:"ū",Umacr:"Ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",uogon:"ų",Uogon:"Ų",uopf:"𝕦",Uopf:"𝕌",uparrow:"↑",Uparrow:"⇑",UpArrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",updownarrow:"↕",Updownarrow:"⇕",UpDownArrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",upsilon:"υ",Upsilon:"Υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",uring:"ů",Uring:"Ů",urtri:"◹",uscr:"𝓊",Uscr:"𝒰",utdot:"⋰",utilde:"ũ",Utilde:"Ũ",utri:"▵",utrif:"▴",uuarr:"⇈",uuml:"ü",Uuml:"Ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",vcy:"в",Vcy:"В",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",vee:"∨",Vee:"⋁",veebar:"⊻",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",vfr:"𝔳",Vfr:"𝔙",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",vopf:"𝕧",Vopf:"𝕍",vprop:"∝",vrtri:"⊳",vscr:"𝓋",Vscr:"𝒱",vsubne:"⊊︀",vsubnE:"⫋︀",vsupne:"⊋︀",vsupnE:"⫌︀",Vvdash:"⊪",vzigzag:"⦚",wcirc:"ŵ",Wcirc:"Ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",wfr:"𝔴",Wfr:"𝔚",wopf:"𝕨",Wopf:"𝕎",wp:"℘",wr:"≀",wreath:"≀",wscr:"𝓌",Wscr:"𝒲",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",xfr:"𝔵",Xfr:"𝔛",xharr:"⟷",xhArr:"⟺",xi:"ξ",Xi:"Ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",xopf:"𝕩",Xopf:"𝕏",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",xscr:"𝓍",Xscr:"𝒳",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",yacute:"ý",Yacute:"Ý",yacy:"я",YAcy:"Я",ycirc:"ŷ",Ycirc:"Ŷ",ycy:"ы",Ycy:"Ы",yen:"¥",yfr:"𝔶",Yfr:"𝔜",yicy:"ї",YIcy:"Ї",yopf:"𝕪",Yopf:"𝕐",yscr:"𝓎",Yscr:"𝒴",yucy:"ю",YUcy:"Ю",yuml:"ÿ",Yuml:"Ÿ",zacute:"ź",Zacute:"Ź",zcaron:"ž",Zcaron:"Ž",zcy:"з",Zcy:"З",zdot:"ż",Zdot:"Ż",zeetrf:"ℨ",ZeroWidthSpace:"​",zeta:"ζ",Zeta:"Ζ",zfr:"𝔷",Zfr:"ℨ",zhcy:"ж",ZHcy:"Ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",zscr:"𝓏",Zscr:"𝒵",zwj:"‍",zwnj:"‌"},v={aacute:"á",Aacute:"Á",acirc:"â",Acirc:"Â",acute:"´",aelig:"æ",AElig:"Æ",agrave:"à",Agrave:"À",amp:"&",AMP:"&",aring:"å",Aring:"Å",atilde:"ã",Atilde:"Ã",auml:"ä",Auml:"Ä",brvbar:"¦",ccedil:"ç",Ccedil:"Ç",cedil:"¸",cent:"¢",copy:"©",COPY:"©",curren:"¤",deg:"°",divide:"÷",eacute:"é",Eacute:"É",ecirc:"ê",Ecirc:"Ê",egrave:"è",Egrave:"È",eth:"ð",ETH:"Ð",euml:"ë",Euml:"Ë",frac12:"½",frac14:"¼",frac34:"¾",gt:">",GT:">",iacute:"í",Iacute:"Í",icirc:"î",Icirc:"Î",iexcl:"¡",igrave:"ì",Igrave:"Ì",iquest:"¿",iuml:"ï",Iuml:"Ï",laquo:"«",lt:"<",LT:"<",macr:"¯",micro:"µ",middot:"·",nbsp:" ",not:"¬",ntilde:"ñ",Ntilde:"Ñ",oacute:"ó",Oacute:"Ó",ocirc:"ô",Ocirc:"Ô",ograve:"ò",Ograve:"Ò",ordf:"ª",ordm:"º",oslash:"ø",Oslash:"Ø",otilde:"õ",Otilde:"Õ",ouml:"ö",Ouml:"Ö",para:"¶",plusmn:"±",pound:"£",quot:'"',QUOT:'"',raquo:"»",reg:"®",REG:"®",sect:"§",shy:"­",sup1:"¹",sup2:"²",sup3:"³",szlig:"ß",thorn:"þ",THORN:"Þ",times:"×",uacute:"ú",Uacute:"Ú",ucirc:"û",Ucirc:"Û",ugrave:"ù",Ugrave:"Ù",uml:"¨",uuml:"ü",Uuml:"Ü",yacute:"ý",Yacute:"Ý",yen:"¥",yuml:"ÿ"},M={0:"�",128:"€",130:"‚",131:"ƒ",132:"„",133:"…",134:"†",135:"‡",136:"ˆ",137:"‰",138:"Š",139:"‹",140:"Œ",142:"Ž",145:"‘",146:"’",147:"“",148:"”",149:"•",150:"–",151:"—",152:"˜",153:"™",154:"š",155:"›",156:"œ",158:"ž",159:"Ÿ"},b=[1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65e3,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111],L=String.fromCharCode,k={},w=k.hasOwnProperty,D=function(t,e){return w.call(t,e)},x=function(t,e){for(var n=-1,r=t.length;++n<r;)if(t[n]==e)return!0;return!1},Y=function(t,e){if(!t)return e;var n,r={};for(n in e)r[n]=D(t,n)?t[n]:e[n];return r},T=function(t,e){var n="";return t>=55296&&t<=57343||t>1114111?(e&&S("character reference outside the permissible Unicode range"),"�"):D(M,t)?(e&&S("disallowed character reference"),M[t]):(e&&x(b,t)&&S("disallowed character reference"),t>65535&&(t-=65536,n+=L(t>>>10&1023|55296),t=56320|1023&t),n+=L(t))},A=function(t){return"&#x"+t.toString(16).toUpperCase()+";"},E=function(t){return"&#"+t+";"},S=function(t){throw Error("Parse error: "+t)},F=function(t,e){e=Y(e,F.options),e.strict&&m.test(t)&&S("forbidden code point");var n=e.encodeEverything,r=e.useNamedReferences,i=e.allowUnsafeSymbols,a=e.decimal?E:A,o=function(t){return a(t.charCodeAt(0))};return n?(t=t.replace(c,function(t){return r&&D(h,t)?"&"+h[t]+";":o(t)}),r&&(t=t.replace(/&gt;\u20D2/g,"&nvgt;").replace(/&lt;\u20D2/g,"&nvlt;").replace(/&#x66;&#x6A;/g,"&fjlig;")),r&&(t=t.replace(d,function(t){return"&"+h[t]+";"}))):r?(i||(t=t.replace(f,function(t){return"&"+h[t]+";"})),t=t.replace(/&gt;\u20D2/g,"&nvgt;").replace(/&lt;\u20D2/g,"&nvlt;"),t=t.replace(d,function(t){return"&"+h[t]+";"})):i||(t=t.replace(f,o)),t.replace(s,function(t){var e=t.charCodeAt(0),n=t.charCodeAt(1);return a(1024*(e-55296)+n-56320+65536)}).replace(l,o)};F.options={allowUnsafeSymbols:!1,encodeEverything:!1,strict:!1,useNamedReferences:!1,decimal:!1};var C=function(t,e){e=Y(e,C.options);var n=e.strict;return n&&p.test(t)&&S("malformed character reference"),t.replace(y,function(t,r,i,a,o,u,s,c){var l,d,h,f,_,p;return r?(h=r,d=i,n&&!d&&S("character reference was not terminated by a semicolon"),l=parseInt(h,10),T(l,n)):a?(f=a,d=o,n&&!d&&S("character reference was not terminated by a semicolon"),l=parseInt(f,16),T(l,n)):u?(_=u,D(g,_)?g[_]:(n&&S("named character reference was not terminated by a semicolon"),t)):(_=s,p=c,p&&e.isAttributeValue?(n&&"="==p&&S("`&` did not start a character reference"),t):(n&&S("named character reference was not terminated by a semicolon"),v[_]+(p||"")))})};C.options={isAttributeValue:!1,strict:!1};var j=function(t){return t.replace(f,function(t){return _[t]})},H={version:"1.1.1",encode:F,decode:C,escape:j,unescape:C};void 0!==(i=function(){return H}.call(e,n,e,t))&&(t.exports=i)}()}).call(e,n(4)(t),n(9))}]); \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.neutral.min.css b/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.neutral.min.css
new file mode 100644
index 00000000..e9570979
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaid.neutral.min.css
@@ -0,0 +1 @@
+.mermaid .label{color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#eee;stroke:#999;stroke-width:1px}.edgePath .path{stroke:#666;stroke-width:1.5px}.edgeLabel{background-color:#fff}.cluster rect{fill:#eaf2fb!important;rx:4!important;stroke:#26a!important;stroke-width:1px!important}.cluster text{fill:#333}.actor{stroke:#999;fill:#eee}text.actor{fill:#333;stroke:none}.actor-line{stroke:#666}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#arrowhead{fill:#333}#crosshead path{fill:#333!important;stroke:#333!important}.messageText{fill:#333;stroke:none}.labelBox{stroke:#999;fill:#eee}.labelText,.loopText{fill:#fff;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#999}.note{stroke:#770;fill:#ffa}.noteText{fill:#000;stroke:none;font-family:Arial,Helvetica,sans-serif;font-size:14px}.section{stroke:none;opacity:.2}.section0,.section2{fill:#7fb2e6}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#333}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#e5e5e5;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:#d42;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#333;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#333;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:#26a;stroke:#194c7f}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#333}.active0,.active1,.active2,.active3{fill:#eee;stroke:#194c7f}.activeText0,.activeText1,.activeText2,.activeText3{fill:#333!important}.done0,.done1,.done2,.done3{stroke:#666;fill:#bbb;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#333!important}.crit0,.crit1,.crit2,.crit3{stroke:#b1361b;fill:#d42;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#b1361b;fill:#eee;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#b1361b;fill:#bbb;stroke-width:2;cursor:pointer}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#333!important}.titleText{text-anchor:middle;font-size:18px;fill:#333}g.classGroup text{fill:#999;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#eee;stroke:#999}g.classGroup line{stroke:#999;stroke-width:1}svg .classLabel .box{stroke:none;stroke-width:0;fill:#eee;opacity:.5}svg .classLabel .label{fill:#999;font-size:10px}.relation{stroke:#999;stroke-width:1;fill:none}#compositionEnd,#compositionStart,.composition{fill:#999;stroke:#999;stroke-width:1}#aggregationEnd,#aggregationStart,.aggregation{fill:#eee;stroke:#999;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:#999;stroke:#999;stroke-width:1}.node text{font-size:14px}.node text,div.mermaidTooltip{font-family:Arial,Helvetica,sans-serif}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:#eaf2fb;border:1px solid #26a;border-radius:2px;pointer-events:none;z-index:100} \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaidAPI.min.js b/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaidAPI.min.js
new file mode 100644
index 00000000..4d8b8b58
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/mermaid/7.0.5/mermaidAPI.min.js
@@ -0,0 +1 @@
+module.exports=function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var r={};return e.m=t,e.c=r,e.d=function(t,r,n){e.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,"a",r),r},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=21)}([function(t,e,r){"use strict";function n(t){var e=t.getUTCHours(),r=t.getUTCMinutes(),n=t.getSeconds(),i=t.getMilliseconds();return e<10&&(e="0"+e),r<10&&(r="0"+r),n<10&&(n="0"+n),i<100&&(i="0"+i),i<10&&(i="00"+i),e+":"+r+":"+n+" ("+i+")"}function i(t){return"%c "+n(new Date)+" :%c"+t+": "}var s=function(){},a=function(){},u=function(){},o=function(){},c=function(){};e.setLogLevel=function(t){t<6&&(e.Log.fatal=console.log.bind(console,i("FATAL"),"color:grey;","color: red;")),t<5&&(e.Log.error=console.log.bind(console,i("ERROR"),"color:grey;","color: red;")),t<4&&(e.Log.warn=console.log.bind(console,i("WARN"),"color:grey;","color: orange;")),t<3&&(e.Log.info=console.log.bind(console,i("INFO"),"color:grey;","color: info;")),t<2&&(e.Log.debug=console.log.bind(console,i("DEBUG"),"color:grey;","color: green;"))},e.Log={debug:s,info:a,warn:u,error:o,fatal:c}},function(t,e,r){"use strict";var n="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},i=r(22);t.exports=i,function(){var t=!1;if(t="tspans",i.selection.prototype.textwrap)return!1;void 0===t&&(t=!1),i.selection.prototype.textwrap=i.selection.enter.prototype.textwrap=function(e,r){r=parseInt(r)||0;var s,a=this,u=function(t){var e=t[0][0];if("rect"!==e.tagName.toString())return!1;var r={};return r.x=i.select(e).attr("x")||0,r.y=i.select(e).attr("y")||0,r.width=i.select(e).attr("width")||0,r.height=i.select(e).attr("height")||0,r.attr=t.attr,r},o=function(t){if(t.attr||(t.attr=function(t){if(this[t])return this[t]}),"object"===(void 0===t?"undefined":n(t))&&void 0!==t.x&&void 0!==t.y&&void 0!==t.width&&void 0!==t.height)return t;if("function"==typeof Array.isArray&&Array.isArray(t)||"[object Array]"===Object.prototype.toString.call(t)){return u(t)}return!1}(e);if(r&&(o=function(t,e){var r=t;return 0!==e&&(r.x=parseInt(r.x)+e,r.y=parseInt(r.y)+e,r.width-=2*e,r.height-=2*e),r}(o,r)),0!==a.length&&i&&e&&o){e=o;var c,l=function(t){var r=i.select(t[0].parentNode),n=r.select("text"),a=n.style("line-height"),u=n.text();n.remove();var o=r.append("foreignObject");o.attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").attr("x",e.x).attr("y",e.y).attr("width",e.width).attr("height",e.height);var c=o.append("xhtml:div").attr("class","wrapped");c.style("height",e.height).style("width",e.width).html(u),a&&c.style("line-height",a),s=r.select("foreignObject")},h=function(t){var n,a=t[0],u=a.parentNode,o=i.select(a),c=a.getBBox().height,l=a.getBBox().width,h=c,y=o.style("line-height");if(n=y&&parseInt(y)?parseInt(y.replace("px","")):h,l>e.width){var d=o.text();if(o.text(""),d){var p,g;if(-1!==d.indexOf(" "))p=" ",g=d.split(" ");else{p="";var f=d.length,m=Math.ceil(l/e.width),A=Math.floor(f/m);A*m>=f||m++,g=[];for(var b,E,x=0;x<m;x++)E=x*A,b=d.substr(E,A),g.push(b)}var k=[],_=0,v={};for(x=0;x<g.length;x++){var F,D=g[x],C=o.text(),T=a.getComputedTextLength();F=C?C+p+D:D,o.text(F);var w=a.getComputedTextLength();if(w>e.width&&C&&""!==C&&(_+=T,v={string:C,width:T,offset:_},k.push(v),o.text(""),o.text(D),x===g.length-1&&(F=D,o.text(F),w=a.getComputedTextLength())),x===g.length-1){o.text("");var S=F;S&&""!==S&&(w-_>0&&(w-=_),v={string:S,width:w,offset:_},k.push(v))}}var B;for(o.text(""),x=0;x<k.length;x++)b=k[x].string,x*n<e.height-1.5*n&&(B=o.append("tspan").text(b),B.attr("dy",function(t){if(x>0)return n}),B.attr("x",function(){var t=e.x;return r&&(t+=r),t}))}}o.attr("y",function(){var t=e.y;return n&&(t+=n),r&&(t+=r),t}),o.attr("x",function(){var t=e.x;return r&&(t+=r),t}),s=i.select(u).selectAll("text")};t&&("foreignobjects"===t?c=l:"tspans"===t&&(c=h)),t||(c="undefined"!=typeof SVGForeignObjectElement?l:h);for(var y=0;y<a.length;y++){c(a[y])}return s}return a||!1}}()},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){t.exports=require("fs")},function(t,e){t.exports=require("path")},function(t,e,r){"use strict";var n,i="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},s=r(0),a=s.Log,u=r(6),o=r(1),c={},l=[],h=[],y=[],d={},p=0,g=[];e.addVertex=function(t,e,r,n){var i;void 0!==t&&0!==t.trim().length&&(void 0===c[t]&&(c[t]={id:t,styles:[],classes:[]}),void 0!==e&&(i=e.trim(),'"'===i[0]&&'"'===i[i.length-1]&&(i=i.substring(1,i.length-1)),c[t].text=i),void 0!==r&&(c[t].type=r),void 0!==r&&(c[t].type=r),void 0!==n&&null!==n&&n.forEach(function(e){c[t].styles.push(e)}))},e.addLink=function(t,e,r,n){a.info("Got edge...",t,e);var i={start:t,end:e,type:void 0,text:""};n=r.text,void 0!==n&&(i.text=n.trim(),'"'===i.text[0]&&'"'===i.text[i.text.length-1]&&(i.text=i.text.substring(1,i.text.length-1))),void 0!==r&&(i.type=r.type,i.stroke=r.stroke),l.push(i)},e.updateLinkInterpolate=function(t,e){"default"===t?l.defaultInterpolate=e:l[t].interpolate=e},e.updateLink=function(t,e){"default"===t?l.defaultStyle=e:(-1===u.isSubstringInArray("fill",e)&&e.push("fill:none"),l[t].style=e)},e.addClass=function(t,e){void 0===h[t]&&(h[t]={id:t,styles:[]}),void 0!==e&&null!==e&&e.forEach(function(e){h[t].styles.push(e)})},e.setDirection=function(t){n=t},e.setClass=function(t,e){t.indexOf(",")>0?t.split(",").forEach(function(t){void 0!==c[t]&&c[t].classes.push(e)}):void 0!==c[t]&&c[t].classes.push(e)};var f=function(t,e){void 0!==e&&(d[t]=e)},m=function(t,e){void 0!==e&&void 0!==c[t]&&g.push(function(r){var n=o.select(r).select("#"+t);null!==n&&n.on("click",function(){window[e](t)})})},A=function(t,e){void 0!==e&&void 0!==c[t]&&g.push(function(r){var n=o.select(r).select("#"+t);null!==n&&n.on("click",function(){window.open(e,"newTab")})})};e.getTooltip=function(t){return d[t]},e.setClickEvent=function(t,e,r,n){t.indexOf(",")>0?t.split(",").forEach(function(t){f(t,n),m(t,e),A(t,r)}):(f(t,n),m(t,e),A(t,r))},e.bindFunctions=function(t){g.forEach(function(e){e(t)})},e.getDirection=function(){return n},e.getVertices=function(){return c},e.getEdges=function(){return l},e.getClasses=function(){return h};var b=function(t){var e=o.select(".mermaidTooltip");null===e[0][0]&&(e=o.select("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),o.select(t).select("svg").selectAll("g.node").on("mouseover",function(){var t=o.select(this);if(null!==t.attr("title")){var r=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.html(t.attr("title")).style("left",r.left+(r.right-r.left)/2+"px").style("top",r.top-14+document.body.scrollTop+"px"),t.classed("hover",!0)}}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),o.select(this).classed("hover",!1)})};g.push(b),e.clear=function(){c={},h={},l=[],g=[],g.push(b),y=[],p=0,d=[]},e.defaultStyle=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},e.addSubGraph=function(t,e){var r=[];r=function(t){var e={boolean:{},number:{},string:{}},r=[];return t.filter(function(t){var n=void 0===t?"undefined":i(t);return" "!==t&&(n in e?!e[n].hasOwnProperty(t)&&(e[n][t]=!0):!(r.indexOf(t)>=0)&&r.push(t))})}(r.concat.apply(r,t));var n={id:"subGraph"+p,nodes:r,title:e};return y.push(n),p+=1,n.id};var E=function(t){var e;for(e=0;e<y.length;e++)if(y[e].id===t)return e;return-1},x=-1,k=[],_=function t(e,r){var n=y[r].nodes;if(!((x+=1)>2e3)){if(k[x]=r,y[r].id===e)return{result:!0,count:0};for(var i=0,s=1;i<n.length;){var a=E(n[i]);if(a>=0){var u=t(e,a);if(u.result)return{result:!0,count:s+u.count};s+=u.count}i+=1}return{result:!1,count:s}}};e.getDepthFirstPos=function(t){return k[t]},e.indexNodes=function(){x=-1,y.length>0&&_("none",y.length-1)},e.getSubGraphs=function(){return y},e.parseError=function(t,e){global.mermaidAPI.parseError(t,e)}},function(t,e,r){"use strict";var n=r(0),i=n.Log,s=function(t){return t=t.replace(/^\s*%%.*\n/g,"\n"),t.match(/^\s*sequenceDiagram/)?"sequenceDiagram":t.match(/^\s*digraph/)?"dotGraph":t.match(/^\s*info/)?"info":t.match(/^\s*gantt/)?"gantt":t.match(/^\s*classDiagram/)?(i.debug("Detected classDiagram syntax"),"classDiagram"):t.match(/^\s*gitGraph/)?(i.debug("Detected gitGraph syntax"),"gitGraph"):"graph"};e.detectType=s;var a=function(t,e){for(var r,n="",s=document.styleSheets,a=0;a<s.length;a++)if("mermaid-svg-internal-css"!==s[a].title)try{var u=s[a].cssRules;if(null!==u)for(var o=0;o<u.length;o++)if(r=u[o],void 0!==r.style){var c;c=t.querySelectorAll(r.selectorText),c.length>0&&(n+=r.selectorText+" { "+r.style.cssText+"}\n")}}catch(t){void 0!==r&&i.warn('Invalid CSS selector "'+r.selectorText+'"',t)}var l="",h="";for(var y in e)e.hasOwnProperty(y)&&void 0!==y&&("default"===y?(e.default.styles instanceof Array&&(l+="#"+t.id.trim()+" .node>rect { "+e[y].styles.join("; ")+"; }\n"),e.default.nodeLabelStyles instanceof Array&&(l+="#"+t.id.trim()+" .node text { "+e[y].nodeLabelStyles.join("; ")+"; }\n"),e.default.edgeLabelStyles instanceof Array&&(l+="#"+t.id.trim()+" .edgeLabel text { "+e[y].edgeLabelStyles.join("; ")+"; }\n"),e.default.clusterStyles instanceof Array&&(l+="#"+t.id.trim()+" .cluster rect { "+e[y].clusterStyles.join("; ")+"; }\n")):e[y].styles instanceof Array&&(h+="#"+t.id.trim()+" ."+y+">rect, ."+y+">polygon, ."+y+">circle, ."+y+">ellipse { "+e[y].styles.join("; ")+"; }\n"));if(""!==n||""!==l||""!==h){var d=document.createElement("style");d.setAttribute("type","text/css"),d.setAttribute("title","mermaid-svg-internal-css"),d.innerHTML="/* <![CDATA[ */\n",""!==l&&(d.innerHTML+=l),""!==n&&(d.innerHTML+=n),""!==h&&(d.innerHTML+=h),d.innerHTML+="/* ]]> */\n",t.insertBefore(d,t.firstChild)}};e.cloneCssStyles=a;var u=function(t,e){for(var r=0;r<e.length;r++)if(e[r].match(t))return r;return-1};e.isSubstringInArray=u},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[1,4],n=[1,3],i=[1,5],s=[1,8,9,10,11,13,18,30,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],a=[2,2],u=[1,12],o=[1,13],c=[1,14],l=[1,15],h=[1,31],y=[1,33],d=[1,22],p=[1,34],g=[1,24],f=[1,25],m=[1,26],A=[1,27],b=[1,28],E=[1,38],x=[1,40],k=[1,35],_=[1,39],v=[1,45],F=[1,44],D=[1,36],C=[1,37],T=[1,41],w=[1,42],S=[1,43],B=[1,8,9,10,11,13,18,30,32,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],L=[1,53],I=[1,52],O=[1,54],P=[1,72],N=[1,80],M=[1,81],R=[1,66],$=[1,65],j=[1,85],V=[1,84],U=[1,82],G=[1,83],H=[1,73],Y=[1,68],W=[1,67],q=[1,63],z=[1,75],X=[1,76],K=[1,77],Z=[1,78],Q=[1,79],J=[1,70],tt=[1,69],et=[8,9,11],rt=[8,9,11,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64],nt=[1,115],it=[8,9,10,11,13,15,18,36,38,40,42,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,86,88,89,91,92,94,95,96,97,98],st=[8,9,10,11,12,13,15,16,17,18,30,32,36,37,38,39,40,41,42,43,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,71,72,73,74,75,78,81,84,86,88,89,91,92,94,95,96,97,98],at=[1,117],ut=[1,118],ot=[8,9,10,11,13,18,30,32,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],ct=[8,9,10,11,12,13,15,16,17,18,30,32,37,39,41,43,46,50,51,52,53,54,56,57,58,59,60,61,62,63,64,65,71,72,73,74,75,78,81,84,86,88,89,91,92,94,95,96,97,98],lt=[13,18,46,81,86,88,89,91,92,94,95,96,97,98],ht=[13,18,46,49,65,81,86,88,89,91,92,94,95,96,97,98],yt=[1,191],dt=[1,188],pt=[1,195],gt=[1,192],ft=[1,189],mt=[1,196],At=[1,186],bt=[1,187],Et=[1,190],xt=[1,193],kt=[1,194],_t=[1,213],vt=[8,9,11,86],Ft=[8,9,10,11,46,71,80,81,84,86,88,89,90,91,92],Dt={trace:function(){},yy:{},symbols_:{error:2,mermaidDoc:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,DIR:13,FirstStmtSeperator:14,TAGEND:15,TAGSTART:16,UP:17,DOWN:18,ending:19,endToken:20,spaceList:21,spaceListNewline:22,verticeStatement:23,separator:24,styleStatement:25,linkStyleStatement:26,classDefStatement:27,classStatement:28,clickStatement:29,subgraph:30,text:31,end:32,vertex:33,link:34,alphaNum:35,SQS:36,SQE:37,PS:38,PE:39,"(-":40,"-)":41,DIAMOND_START:42,DIAMOND_STOP:43,alphaNumStatement:44,alphaNumToken:45,MINUS:46,linkStatement:47,arrowText:48,TESTSTR:49,"--":50,ARROW_POINT:51,ARROW_CIRCLE:52,ARROW_CROSS:53,ARROW_OPEN:54,"-.":55,DOTTED_ARROW_POINT:56,DOTTED_ARROW_CIRCLE:57,DOTTED_ARROW_CROSS:58,DOTTED_ARROW_OPEN:59,"==":60,THICK_ARROW_POINT:61,THICK_ARROW_CIRCLE:62,THICK_ARROW_CROSS:63,THICK_ARROW_OPEN:64,PIPE:65,textToken:66,STR:67,commentText:68,commentToken:69,keywords:70,STYLE:71,LINKSTYLE:72,CLASSDEF:73,CLASS:74,CLICK:75,textNoTags:76,textNoTagsToken:77,DEFAULT:78,stylesOpt:79,HEX:80,NUM:81,INTERPOLATE:82,commentStatement:83,PCT:84,style:85,COMMA:86,styleComponent:87,ALPHA:88,COLON:89,UNIT:90,BRKT:91,DOT:92,graphCodeTokens:93,PUNCTUATION:94,UNICODE_TEXT:95,PLUS:96,EQUALS:97,MULT:98,TAG_START:99,TAG_END:100,QUOTE:101,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"DIR",15:"TAGEND",16:"TAGSTART",17:"UP",18:"DOWN",30:"subgraph",32:"end",36:"SQS",37:"SQE",38:"PS",39:"PE",40:"(-",41:"-)",42:"DIAMOND_START",43:"DIAMOND_STOP",46:"MINUS",49:"TESTSTR",50:"--",51:"ARROW_POINT",52:"ARROW_CIRCLE",53:"ARROW_CROSS",54:"ARROW_OPEN",55:"-.",56:"DOTTED_ARROW_POINT",57:"DOTTED_ARROW_CIRCLE",58:"DOTTED_ARROW_CROSS",59:"DOTTED_ARROW_OPEN",60:"==",61:"THICK_ARROW_POINT",62:"THICK_ARROW_CIRCLE",63:"THICK_ARROW_CROSS",64:"THICK_ARROW_OPEN",65:"PIPE",67:"STR",71:"STYLE",72:"LINKSTYLE",73:"CLASSDEF",74:"CLASS",75:"CLICK",78:"DEFAULT",80:"HEX",81:"NUM",82:"INTERPOLATE",84:"PCT",86:"COMMA",88:"ALPHA",89:"COLON",90:"UNIT",91:"BRKT",92:"DOT",94:"PUNCTUATION",95:"UNICODE_TEXT",96:"PLUS",97:"EQUALS",98:"MULT",99:"TAG_START",100:"TAG_END",101:"QUOTE"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,4],[4,4],[4,4],[4,4],[4,4],[19,2],[19,1],[20,1],[20,1],[20,1],[14,1],[14,1],[14,2],[22,2],[22,2],[22,1],[22,1],[21,2],[21,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,5],[7,4],[24,1],[24,1],[24,1],[23,3],[23,1],[33,4],[33,5],[33,6],[33,7],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,1],[33,2],[35,1],[35,2],[44,1],[44,1],[44,1],[44,1],[34,2],[34,3],[34,3],[34,1],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[48,3],[31,1],[31,2],[31,1],[68,1],[68,2],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[76,1],[76,2],[27,5],[27,5],[28,5],[29,5],[29,7],[29,5],[29,7],[25,5],[25,5],[26,5],[26,5],[26,9],[26,9],[26,7],[26,7],[83,3],[79,1],[79,3],[85,1],[85,2],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[69,1],[69,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[77,1],[77,1],[77,1],[77,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1]],performAction:function(t,e,r,n,i,s,a){var u=s.length-1;switch(i){case 2:this.$=[];break;case 3:s[u]!==[]&&s[u-1].push(s[u]),this.$=s[u-1];break;case 4:case 57:case 59:case 60:case 92:case 94:case 95:case 108:this.$=s[u];break;case 11:n.setDirection(s[u-1]),this.$=s[u-1];break;case 12:n.setDirection("LR"),this.$=s[u-1];break;case 13:n.setDirection("RL"),this.$=s[u-1];break;case 14:n.setDirection("BT"),this.$=s[u-1];break;case 15:n.setDirection("TB"),this.$=s[u-1];break;case 30:this.$=s[u-1];break;case 31:case 32:case 33:case 34:case 35:this.$=[];break;case 36:this.$=n.addSubGraph(s[u-1],s[u-3]);break;case 37:this.$=n.addSubGraph(s[u-1],void 0);break;case 41:n.addLink(s[u-2],s[u],s[u-1]),this.$=[s[u-2],s[u]];break;case 42:this.$=[s[u]];break;case 43:this.$=s[u-3],n.addVertex(s[u-3],s[u-1],"square");break;case 44:this.$=s[u-4],n.addVertex(s[u-4],s[u-2],"square");break;case 45:this.$=s[u-5],n.addVertex(s[u-5],s[u-2],"circle");break;case 46:this.$=s[u-6],n.addVertex(s[u-6],s[u-3],"circle");break;case 47:this.$=s[u-3],n.addVertex(s[u-3],s[u-1],"ellipse");break;case 48:this.$=s[u-4],n.addVertex(s[u-4],s[u-2],"ellipse");break;case 49:this.$=s[u-3],n.addVertex(s[u-3],s[u-1],"round");break;case 50:this.$=s[u-4],n.addVertex(s[u-4],s[u-2],"round");break;case 51:this.$=s[u-3],n.addVertex(s[u-3],s[u-1],"diamond");break;case 52:this.$=s[u-4],n.addVertex(s[u-4],s[u-2],"diamond");break;case 53:this.$=s[u-3],n.addVertex(s[u-3],s[u-1],"odd");break;case 54:this.$=s[u-4],n.addVertex(s[u-4],s[u-2],"odd");break;case 55:this.$=s[u],n.addVertex(s[u]);break;case 56:this.$=s[u-1],n.addVertex(s[u-1]);break;case 58:case 93:case 96:case 109:this.$=s[u-1]+""+s[u];break;case 61:this.$="v";break;case 62:this.$="-";break;case 63:s[u-1].text=s[u],this.$=s[u-1];break;case 64:case 65:s[u-2].text=s[u-1],this.$=s[u-2];break;case 66:this.$=s[u];break;case 67:this.$={type:"arrow",stroke:"normal",text:s[u-1]};break;case 68:this.$={type:"arrow_circle",stroke:"normal",text:s[u-1]};break;case 69:this.$={type:"arrow_cross",stroke:"normal",text:s[u-1]};break;case 70:this.$={type:"arrow_open",stroke:"normal",text:s[u-1]};break;case 71:this.$={type:"arrow",stroke:"dotted",text:s[u-1]};break;case 72:this.$={type:"arrow_circle",stroke:"dotted",text:s[u-1]};break;case 73:this.$={type:"arrow_cross",stroke:"dotted",text:s[u-1]};break;case 74:this.$={type:"arrow_open",stroke:"dotted",text:s[u-1]};break;case 75:this.$={type:"arrow",stroke:"thick",text:s[u-1]};break;case 76:this.$={type:"arrow_circle",stroke:"thick",text:s[u-1]};break;case 77:this.$={type:"arrow_cross",stroke:"thick",text:s[u-1]};break;case 78:this.$={type:"arrow_open",stroke:"thick",text:s[u-1]};break;case 79:this.$={type:"arrow",stroke:"normal"};break;case 80:this.$={type:"arrow_circle",stroke:"normal"};break;case 81:this.$={type:"arrow_cross",stroke:"normal"};break;case 82:this.$={type:"arrow_open",stroke:"normal"};break;case 83:this.$={type:"arrow",stroke:"dotted"};break;case 84:this.$={type:"arrow_circle",stroke:"dotted"};break;case 85:this.$={type:"arrow_cross",stroke:"dotted"};break;case 86:this.$={type:"arrow_open",stroke:"dotted"};break;case 87:this.$={type:"arrow",stroke:"thick"};break;case 88:this.$={type:"arrow_circle",stroke:"thick"};break;case 89:this.$={type:"arrow_cross",stroke:"thick"};break;case 90:this.$={type:"arrow_open",stroke:"thick"};break;case 91:this.$=s[u-1];break;case 110:case 111:this.$=s[u-4],n.addClass(s[u-2],s[u]);break;case 112:this.$=s[u-4],n.setClass(s[u-2],s[u]);break;case 113:this.$=s[u-4],n.setClickEvent(s[u-2],s[u],void 0,void 0);break;case 114:this.$=s[u-6],n.setClickEvent(s[u-4],s[u-2],void 0,s[u]);break;case 115:this.$=s[u-4],n.setClickEvent(s[u-2],void 0,s[u],void 0);break;case 116:this.$=s[u-6],n.setClickEvent(s[u-4],void 0,s[u-2],s[u]);break;case 117:this.$=s[u-4],n.addVertex(s[u-2],void 0,void 0,s[u]);break;case 118:case 119:case 120:this.$=s[u-4],n.updateLink(s[u-2],s[u]);break;case 121:case 122:this.$=s[u-8],n.updateLinkInterpolate(s[u-6],s[u-2]),n.updateLink(s[u-6],s[u]);break;case 123:case 124:this.$=s[u-6],n.updateLinkInterpolate(s[u-4],s[u]);break;case 126:this.$=[s[u]];break;case 127:s[u-2].push(s[u]),this.$=s[u-2];break;case 129:this.$=s[u-1]+s[u]}},table:[{3:1,4:2,9:r,10:n,12:i},{1:[3]},e(s,a,{5:6}),{4:7,9:r,10:n,12:i},{4:8,9:r,10:n,12:i},{10:[1,9]},{1:[2,1],6:10,7:11,8:u,9:o,10:c,11:l,13:h,18:y,23:16,25:17,26:18,27:19,28:20,29:21,30:d,33:23,35:29,44:30,45:32,46:p,71:g,72:f,73:m,74:A,75:b,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(s,[2,9]),e(s,[2,10]),{13:[1,46],15:[1,47],16:[1,48],17:[1,49],18:[1,50]},e(B,[2,3]),e(B,[2,4]),e(B,[2,5]),e(B,[2,6]),e(B,[2,7]),e(B,[2,8]),{8:L,9:I,11:O,24:51},{8:L,9:I,11:O,24:55},{8:L,9:I,11:O,24:56},{8:L,9:I,11:O,24:57},{8:L,9:I,11:O,24:58},{8:L,9:I,11:O,24:59},{8:L,9:I,10:P,11:O,12:N,13:M,15:R,16:$,17:j,18:V,24:61,30:U,31:60,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(et,[2,42],{34:86,47:87,50:[1,88],51:[1,91],52:[1,92],53:[1,93],54:[1,94],55:[1,89],56:[1,95],57:[1,96],58:[1,97],59:[1,98],60:[1,90],61:[1,99],62:[1,100],63:[1,101],64:[1,102]}),{10:[1,103]},{10:[1,104]},{10:[1,105]},{10:[1,106]},{10:[1,107]},e(rt,[2,55],{45:32,21:113,44:114,10:nt,13:h,15:[1,112],18:y,36:[1,108],38:[1,109],40:[1,110],42:[1,111],46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S}),e(it,[2,57]),e(it,[2,59]),e(it,[2,60]),e(it,[2,61]),e(it,[2,62]),e(st,[2,154]),e(st,[2,155]),e(st,[2,156]),e(st,[2,157]),e(st,[2,158]),e(st,[2,159]),e(st,[2,160]),e(st,[2,161]),e(st,[2,162]),e(st,[2,163]),e(st,[2,164]),{8:at,9:ut,10:nt,14:116,21:119},{8:at,9:ut,10:nt,14:120,21:119},{8:at,9:ut,10:nt,14:121,21:119},{8:at,9:ut,10:nt,14:122,21:119},{8:at,9:ut,10:nt,14:123,21:119},e(B,[2,30]),e(B,[2,38]),e(B,[2,39]),e(B,[2,40]),e(B,[2,31]),e(B,[2,32]),e(B,[2,33]),e(B,[2,34]),e(B,[2,35]),{8:L,9:I,10:P,11:O,12:N,13:M,15:R,16:$,17:j,18:V,24:124,30:U,32:G,45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(ot,a,{5:126}),e(ct,[2,92]),e(ct,[2,94]),e(ct,[2,143]),e(ct,[2,144]),e(ct,[2,145]),e(ct,[2,146]),e(ct,[2,147]),e(ct,[2,148]),e(ct,[2,149]),e(ct,[2,150]),e(ct,[2,151]),e(ct,[2,152]),e(ct,[2,153]),e(ct,[2,97]),e(ct,[2,98]),e(ct,[2,99]),e(ct,[2,100]),e(ct,[2,101]),e(ct,[2,102]),e(ct,[2,103]),e(ct,[2,104]),e(ct,[2,105]),e(ct,[2,106]),e(ct,[2,107]),{13:h,18:y,33:127,35:29,44:30,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(lt,[2,66],{48:128,49:[1,129],65:[1,130]}),{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:131,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:132,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:133,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(ht,[2,79]),e(ht,[2,80]),e(ht,[2,81]),e(ht,[2,82]),e(ht,[2,83]),e(ht,[2,84]),e(ht,[2,85]),e(ht,[2,86]),e(ht,[2,87]),e(ht,[2,88]),e(ht,[2,89]),e(ht,[2,90]),{13:h,18:y,35:134,44:30,45:32,46:p,80:[1,135],81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{78:[1,136],81:[1,137]},{13:h,18:y,35:139,44:30,45:32,46:p,78:[1,138],81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{13:h,18:y,35:140,44:30,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{13:h,18:y,35:141,44:30,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:142,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:144,32:G,38:[1,143],45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:145,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:146,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:147,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(rt,[2,56]),e(it,[2,58]),e(rt,[2,29],{21:148,10:nt}),e(s,[2,11]),e(s,[2,21]),e(s,[2,22]),{9:[1,149]},e(s,[2,12]),e(s,[2,13]),e(s,[2,14]),e(s,[2,15]),e(ot,a,{5:150}),e(ct,[2,93]),{6:10,7:11,8:u,9:o,10:c,11:l,13:h,18:y,23:16,25:17,26:18,27:19,28:20,29:21,30:d,32:[1,151],33:23,35:29,44:30,45:32,46:p,71:g,72:f,73:m,74:A,75:b,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(et,[2,41]),e(lt,[2,63],{10:[1,152]}),{10:[1,153]},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:154,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,45:71,46:H,50:Y,51:[1,155],52:[1,156],53:[1,157],54:[1,158],60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,45:71,46:H,50:Y,56:[1,159],57:[1,160],58:[1,161],59:[1,162],60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,45:71,46:H,50:Y,60:W,61:[1,163],62:[1,164],63:[1,165],64:[1,166],66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:[1,167],13:h,18:y,44:114,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:[1,168]},{10:[1,169]},{10:[1,170]},{10:[1,171]},{10:[1,172],13:h,18:y,44:114,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:[1,173],13:h,18:y,44:114,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:[1,174],13:h,18:y,44:114,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,37:[1,175],45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:176,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,39:[1,177],45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,41:[1,178],45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,43:[1,179],45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,37:[1,180],45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(rt,[2,28]),e(s,[2,23]),{6:10,7:11,8:u,9:o,10:c,11:l,13:h,18:y,23:16,25:17,26:18,27:19,28:20,29:21,30:d,32:[1,181],33:23,35:29,44:30,45:32,46:p,71:g,72:f,73:m,74:A,75:b,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(B,[2,37]),e(lt,[2,65]),e(lt,[2,64]),{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,45:71,46:H,50:Y,60:W,65:[1,182],66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(lt,[2,67]),e(lt,[2,68]),e(lt,[2,69]),e(lt,[2,70]),e(lt,[2,71]),e(lt,[2,72]),e(lt,[2,73]),e(lt,[2,74]),e(lt,[2,75]),e(lt,[2,76]),e(lt,[2,77]),e(lt,[2,78]),{10:yt,46:dt,71:pt,79:183,80:gt,81:ft,84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{10:yt,46:dt,71:pt,79:197,80:gt,81:ft,84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{10:yt,46:dt,71:pt,79:198,80:gt,81:ft,82:[1,199],84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{10:yt,46:dt,71:pt,79:200,80:gt,81:ft,82:[1,201],84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{10:yt,46:dt,71:pt,79:202,80:gt,81:ft,84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{10:yt,46:dt,71:pt,79:203,80:gt,81:ft,84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{13:h,18:y,35:204,44:30,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{13:h,18:y,35:205,44:30,45:32,46:p,67:[1,206],81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(rt,[2,43],{21:207,10:nt}),{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,39:[1,208],45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(rt,[2,49],{21:209,10:nt}),e(rt,[2,47],{21:210,10:nt}),e(rt,[2,51],{21:211,10:nt}),e(rt,[2,53],{21:212,10:nt}),e(B,[2,36]),e([10,13,18,46,81,86,88,89,91,92,94,95,96,97,98],[2,91]),e(et,[2,117],{86:_t}),e(vt,[2,126],{87:214,10:yt,46:dt,71:pt,80:gt,81:ft,84:mt,88:At,89:bt,90:Et,91:xt,92:kt}),e(Ft,[2,128]),e(Ft,[2,130]),e(Ft,[2,131]),e(Ft,[2,132]),e(Ft,[2,133]),e(Ft,[2,134]),e(Ft,[2,135]),e(Ft,[2,136]),e(Ft,[2,137]),e(Ft,[2,138]),e(Ft,[2,139]),e(Ft,[2,140]),e(et,[2,118],{86:_t}),e(et,[2,119],{86:_t}),{10:[1,215]},e(et,[2,120],{86:_t}),{10:[1,216]},e(et,[2,110],{86:_t}),e(et,[2,111],{86:_t}),e(et,[2,112],{45:32,44:114,13:h,18:y,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S}),e(et,[2,113],{45:32,44:114,10:[1,217],13:h,18:y,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S}),e(et,[2,115],{10:[1,218]}),e(rt,[2,44]),{39:[1,219]},e(rt,[2,50]),e(rt,[2,48]),e(rt,[2,52]),e(rt,[2,54]),{10:yt,46:dt,71:pt,80:gt,81:ft,84:mt,85:220,87:185,88:At,89:bt,90:Et,91:xt,92:kt},e(Ft,[2,129]),{13:h,18:y,35:221,44:30,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{13:h,18:y,35:222,44:30,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{67:[1,223]},{67:[1,224]},e(rt,[2,45],{21:225,10:nt}),e(vt,[2,127],{87:214,10:yt,46:dt,71:pt,80:gt,81:ft,84:mt,88:At,89:bt,90:Et,91:xt,92:kt}),e(et,[2,123],{45:32,44:114,10:[1,226],13:h,18:y,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S}),e(et,[2,124],{45:32,44:114,10:[1,227],13:h,18:y,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S}),e(et,[2,114]),e(et,[2,116]),e(rt,[2,46]),{10:yt,46:dt,71:pt,79:228,80:gt,81:ft,84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{10:yt,46:dt,71:pt,79:229,80:gt,81:ft,84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},e(et,[2,121],{86:_t}),e(et,[2,122],{86:_t})],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var r=function(t,e){this.message=t,this.hash=e};throw r.prototype=Error,new r(t,e)}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},Ct=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,r,n){switch(r){case 0:break;case 1:this.begin("string");break;case 2:this.popState();break;case 3:return"STR";case 4:return 71;case 5:return 78;case 6:return 72;case 7:return 82;case 8:return 73;case 9:return 74;case 10:return 75;case 11:return 12;case 12:return 30;case 13:return 32;case 14:case 15:case 16:case 17:case 18:case 19:return 13;case 20:return 81;case 21:return 91;case 22:return 89;case 23:return 8;case 24:return 86;case 25:return 98;case 26:return 16;case 27:return 15;case 28:return 17;case 29:return 18;case 30:return 53;case 31:return 51;case 32:return 52;case 33:return 54;case 34:return 58;case 35:return 56;case 36:return 57;case 37:return 59;case 38:return 58;case 39:return 56;case 40:return 57;case 41:return 59;case 42:return 63;case 43:return 61;case 44:return 62;case 45:return 64;case 46:return 50;case 47:return 55;case 48:return 60;case 49:return 40;case 50:return 41;case 51:return 46;case 52:return 92;case 53:return 96;case 54:return 84;case 55:case 56:return 97;case 57:return 88;case 58:return 94;case 59:return 95;case 60:return 65;case 61:return 38;case 62:return 39;case 63:return 36;case 64:return 37;case 65:return 42;case 66:return 43;case 67:return 101;case 68:return 9;case 69:return 10;case 70:return 11}},rules:[/^(?:%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:v\b)/,/^(?:\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*==[x]\s*)/,/^(?:\s*==>\s*)/,/^(?:\s*==[o]\s*)/,/^(?:\s*==[\=]\s*)/,/^(?:\s*--\s*)/,/^(?:\s*-\.\s*)/,/^(?:\s*==\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[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])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\n+)/,/^(?:\s)/,/^(?:$)/],conditions:{string:{rules:[2,3],inclusive:!1},INITIAL:{rules:[0,1,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,33,34,35,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],inclusive:!0}}}}();return Dt.lexer=Ct,t.prototype=Dt,Dt.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[1,5],n=[1,6],i=[1,12],s=[1,13],a=[1,14],u=[1,15],o=[1,16],c=[1,17],l=[1,18],h=[1,19],y=[1,20],d=[1,21],p=[1,22],g=[8,16,17,18,19,20,21,22,23,24,25,26],f=[1,37],m=[1,33],A=[1,34],b=[1,35],E=[1,36],x=[8,10,16,17,18,19,20,21,22,23,24,25,26,28,32,37,39,40,45,57,58],k=[10,28],_=[10,28,37,57,58],v=[2,49],F=[1,45],D=[1,48],C=[1,49],T=[1,52],w=[2,65],S=[1,65],B=[1,66],L=[1,67],I=[1,68],O=[1,69],P=[1,70],N=[1,71],M=[1,72],R=[1,73],$=[8,16,17,18,19,20,21,22,23,24,25,26,47],j=[10,28,37],V={trace:function(){},yy:{},symbols_:{error:2,expressions:3,graph:4,EOF:5,graphStatement:6,idStatement:7,"{":8,stmt_list:9,"}":10,strict:11,GRAPH:12,DIGRAPH:13,textNoTags:14,textNoTagsToken:15,ALPHA:16,NUM:17,COLON:18,PLUS:19,EQUALS:20,MULT:21,DOT:22,BRKT:23,SPACE:24,MINUS:25,keywords:26,stmt:27,";":28,node_stmt:29,edge_stmt:30,attr_stmt:31,"=":32,subgraph:33,attr_list:34,NODE:35,EDGE:36,"[":37,a_list:38,"]":39,",":40,edgeRHS:41,node_id:42,edgeop:43,port:44,":":45,compass_pt:46,SUBGRAPH:47,n:48,ne:49,e:50,se:51,s:52,sw:53,w:54,nw:55,c:56,ARROW_POINT:57,ARROW_OPEN:58,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",8:"{",10:"}",11:"strict",12:"GRAPH",13:"DIGRAPH",16:"ALPHA",17:"NUM",18:"COLON",19:"PLUS",20:"EQUALS",21:"MULT",22:"DOT",23:"BRKT",24:"SPACE",25:"MINUS",26:"keywords",28:";",32:"=",35:"NODE",36:"EDGE",37:"[",39:"]",40:",",45:":",47:"SUBGRAPH",48:"n",49:"ne",50:"e",51:"se",52:"s",53:"sw",54:"w",55:"nw",56:"c",57:"ARROW_POINT",58:"ARROW_OPEN"},productions_:[0,[3,2],[4,5],[4,6],[4,4],[6,1],[6,1],[7,1],[14,1],[14,2],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[9,1],[9,3],[27,1],[27,1],[27,1],[27,3],[27,1],[31,2],[31,2],[31,2],[34,4],[34,3],[34,3],[34,2],[38,5],[38,5],[38,3],[30,3],[30,3],[30,2],[30,2],[41,3],[41,3],[41,2],[41,2],[29,2],[29,1],[42,2],[42,1],[44,4],[44,2],[44,2],[33,5],[33,4],[33,3],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,0],[43,1],[43,1]],performAction:function(t,e,r,n,i,s,a){var u=s.length-1;switch(i){case 1:this.$=s[u-1];break;case 2:this.$=s[u-4];break;case 3:this.$=s[u-5];break;case 4:this.$=s[u-3];break;case 8:case 10:case 11:this.$=s[u];break;case 9:this.$=s[u-1]+""+s[u];break;case 12:case 13:case 14:case 15:case 16:case 18:case 19:case 20:this.$=s[u];break;case 17:this.$="<br>";break;case 39:this.$="oy";break;case 40:n.addLink(s[u-1],s[u].id,s[u].op),this.$="oy";break;case 42:n.addLink(s[u-1],s[u].id,s[u].op),this.$={op:s[u-2],id:s[u-1]};break;case 44:this.$={op:s[u-1],id:s[u]};break;case 48:n.addVertex(s[u-1]),this.$=s[u-1];break;case 49:n.addVertex(s[u]),this.$=s[u];break;case 66:this.$="arrow";break;case 67:this.$="arrow_open"}},table:[{3:1,4:2,6:3,11:[1,4],12:r,13:n},{1:[3]},{5:[1,7]},{7:8,8:[1,9],14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p},{6:23,12:r,13:n},e(g,[2,5]),e(g,[2,6]),{1:[2,1]},{8:[1,24]},{7:30,8:f,9:25,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},e([8,10,28,32,37,39,40,45,57,58],[2,7],{15:38,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p}),e(x,[2,8]),e(x,[2,10]),e(x,[2,11]),e(x,[2,12]),e(x,[2,13]),e(x,[2,14]),e(x,[2,15]),e(x,[2,16]),e(x,[2,17]),e(x,[2,18]),e(x,[2,19]),e(x,[2,20]),{7:39,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p},{7:30,8:f,9:40,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},{10:[1,41]},{10:[2,21],28:[1,42]},e(k,[2,23]),e(k,[2,24]),e(k,[2,25]),e(_,v,{44:44,32:[1,43],45:F}),e(k,[2,27],{41:46,43:47,57:D,58:C}),e(k,[2,47],{43:47,34:50,41:51,37:T,57:D,58:C}),{34:53,37:T},{34:54,37:T},{34:55,37:T},{7:56,8:[1,57],14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p},{7:30,8:f,9:58,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},e(x,[2,9]),{8:[1,59]},{10:[1,60]},{5:[2,4]},{7:30,8:f,9:61,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},{7:62,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p},e(_,[2,48]),e(_,w,{14:10,15:11,7:63,46:64,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,48:S,49:B,50:L,51:I,52:O,53:P,54:N,55:M,56:R}),e(k,[2,41],{34:74,37:T}),{7:77,8:f,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,33:76,42:75,47:E},e($,[2,66]),e($,[2,67]),e(k,[2,46]),e(k,[2,40],{34:78,37:T}),{7:81,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,38:79,39:[1,80]},e(k,[2,28]),e(k,[2,29]),e(k,[2,30]),{8:[1,82]},{7:30,8:f,9:83,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},{10:[1,84]},{7:30,8:f,9:85,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},{5:[2,2]},{10:[2,22]},e(k,[2,26]),e(_,[2,51],{45:[1,86]}),e(_,[2,52]),e(_,[2,56]),e(_,[2,57]),e(_,[2,58]),e(_,[2,59]),e(_,[2,60]),e(_,[2,61]),e(_,[2,62]),e(_,[2,63]),e(_,[2,64]),e(k,[2,38]),e(j,[2,44],{43:47,41:87,57:D,58:C}),e(j,[2,45],{43:47,41:88,57:D,58:C}),e(_,v,{44:44,45:F}),e(k,[2,39]),{39:[1,89]},e(k,[2,34],{34:90,37:T}),{32:[1,91]},{7:30,8:f,9:92,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},{10:[1,93]},e(_,[2,55]),{10:[1,94]},e(_,w,{46:95,48:S,49:B,50:L,51:I,52:O,53:P,54:N,55:M,56:R}),e(j,[2,42]),e(j,[2,43]),e(k,[2,33],{34:96,37:T}),e(k,[2,32]),{7:97,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p},{10:[1,98]},e(_,[2,54]),{5:[2,3]},e(_,[2,50]),e(k,[2,31]),{28:[1,99],39:[2,37],40:[1,100]},e(_,[2,53]),{7:81,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,38:101},{7:81,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,38:102},{39:[2,35]},{39:[2,36]}],defaultActions:{7:[2,1],41:[2,4],60:[2,2],61:[2,22],94:[2,3],101:[2,35],102:[2,36]},parseError:function(t,e){if(!e.recoverable){var r=function(t,e){this.message=t,this.hash=e};throw r.prototype=Error,new r(t,e)}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},U=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,r,n){switch(r){case 0:return"STYLE";case 1:return"LINKSTYLE";case 2:return"CLASSDEF";case 3:return"CLASS";case 4:return"CLICK";case 5:return 12;case 6:return 13;case 7:return 47;case 8:return 35;case 9:return 36;case 10:case 11:case 12:case 13:case 14:case 15:return"DIR";case 16:return 17;case 17:return 23;case 18:return 18;case 19:return 28;case 20:return 40;case 21:return 32;case 22:return 21;case 23:return 22;case 24:return"ARROW_CROSS";case 25:return 57;case 26:return"ARROW_CIRCLE";case 27:return 58;case 28:return 25;case 29:return 19;case 30:return 20;case 31:return 16;case 32:return"PIPE";case 33:return"PS";case 34:return"PE";case 35:return 37;case 36:return 39;case 37:return 8;case 38:return 10;case 39:return"QUOTE";case 40:return 24;case 41:return"NEWLINE";case 42:return 5}},rules:[/^(?:style\b)/,/^(?:linkStyle\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:digraph\b)/,/^(?:subgraph\b)/,/^(?:node\b)/,/^(?:edge\b)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9])/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:=)/,/^(?:\*)/,/^(?:\.)/,/^(?:--[x])/,/^(?:->)/,/^(?:--[o])/,/^(?:--)/,/^(?:-)/,/^(?:\+)/,/^(?:=)/,/^(?:[\u0021-\u0027\u002A-\u002E\u003F\u0041-\u005A\u0061-\u007A\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)/,/^(?:\n)/,/^(?:$)/],conditions:{INITIAL:{rules:[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,33,34,35,36,37,38,39,40,41,42],inclusive:!0}}}}();return V.lexer=U,t.prototype=V,V.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[1,2],n=[1,3],i=[1,4],s=[2,4],a=[1,9],u=[1,11],o=[1,12],c=[1,14],l=[1,15],h=[1,17],y=[1,18],d=[1,19],p=[1,20],g=[1,21],f=[1,23],m=[1,24],A=[1,4,5,10,15,16,18,20,21,22,23,24,25,27,28,39],b=[1,32],E=[4,5,10,15,16,18,20,21,22,23,25,28,39],x=[4,5,10,15,16,18,20,21,22,23,25,27,28,39],k=[37,38,39],_={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,participant:10,actor:11,AS:12,restOfLine:13,signal:14,activate:15,deactivate:16,note_statement:17,title:18,text2:19,loop:20,end:21,opt:22,alt:23,else:24,par:25,par_sections:26,and:27,note:28,placement:29,over:30,actor_pair:31,spaceList:32,",":33,left_of:34,right_of:35,signaltype:36,"+":37,"-":38,ACTOR:39,SOLID_OPEN_ARROW:40,DOTTED_OPEN_ARROW:41,SOLID_ARROW:42,DOTTED_ARROW:43,SOLID_CROSS:44,DOTTED_CROSS:45,TXT:46,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",10:"participant",12:"AS",13:"restOfLine",15:"activate",16:"deactivate",18:"title",20:"loop",21:"end",22:"opt",23:"alt",24:"else",25:"par",27:"and",28:"note",30:"over",33:",",34:"left_of",35:"right_of",37:"+",38:"-",39:"ACTOR",40:"SOLID_OPEN_ARROW",41:"DOTTED_OPEN_ARROW",42:"SOLID_ARROW",43:"DOTTED_ARROW",44:"SOLID_CROSS",45:"DOTTED_CROSS",46:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,5],[9,3],[9,2],[9,3],[9,3],[9,2],[9,3],[9,4],[9,4],[9,7],[9,4],[26,1],[26,4],[17,4],[17,4],[32,2],[32,1],[31,3],[31,1],[29,1],[29,1],[14,5],[14,5],[14,4],[11,1],[36,1],[36,1],[36,1],[36,1],[36,1],[36,1],[19,1]],performAction:function(t,e,r,n,i,s,a){var u=s.length-1;switch(i){case 3:return n.apply(s[u]),s[u];case 4:this.$=[];break;case 5:s[u-1].push(s[u]),this.$=s[u-1];break;case 6:case 7:this.$=s[u];break;case 8:this.$=[];break;case 9:s[u-3].description=s[u-1],this.$=s[u-3];break;case 10:this.$=s[u-1];break;case 12:this.$={type:"activeStart",signalType:n.LINETYPE.ACTIVE_START,actor:s[u-1]};break;case 13:this.$={type:"activeEnd",signalType:n.LINETYPE.ACTIVE_END,actor:s[u-1]};break;case 15:this.$=[{type:"setTitle",text:s[u-1]}];break;case 16:s[u-1].unshift({type:"loopStart",loopText:s[u-2],signalType:n.LINETYPE.LOOP_START}),s[u-1].push({type:"loopEnd",loopText:s[u-2],signalType:n.LINETYPE.LOOP_END}),this.$=s[u-1];break;case 17:s[u-1].unshift({type:"optStart",optText:s[u-2],signalType:n.LINETYPE.OPT_START}),s[u-1].push({type:"optEnd",optText:s[u-2],signalType:n.LINETYPE.OPT_END}),this.$=s[u-1];break;case 18:s[u-4].unshift({type:"altStart",altText:s[u-5],signalType:n.LINETYPE.ALT_START}),s[u-4].push({type:"else",altText:s[u-2],signalType:n.LINETYPE.ALT_ELSE}),s[u-4]=s[u-4].concat(s[u-1]),s[u-4].push({type:"altEnd",signalType:n.LINETYPE.ALT_END}),this.$=s[u-4];break;case 19:s[u-1].unshift({type:"parStart",parText:s[u-2],signalType:n.LINETYPE.PAR_START}),s[u-1].push({type:"parEnd",signalType:n.LINETYPE.PAR_END}),this.$=s[u-1];break;case 21:this.$=s[u-3].concat([{type:"and",parText:s[u-1],signalType:n.LINETYPE.PAR_AND},s[u]]);break;case 22:this.$=[s[u-1],{type:"addNote",placement:s[u-2],actor:s[u-1].actor,text:s[u]}];break;case 23:s[u-2]=[].concat(s[u-1],s[u-1]).slice(0,2),s[u-2][0]=s[u-2][0].actor,s[u-2][1]=s[u-2][1].actor,this.$=[s[u-1],{type:"addNote",placement:n.PLACEMENT.OVER,actor:s[u-2].slice(0,2),text:s[u]}];break;case 26:this.$=[s[u-2],s[u]];break;case 27:this.$=s[u];break;case 28:this.$=n.PLACEMENT.LEFTOF;break;case 29:this.$=n.PLACEMENT.RIGHTOF;break;case 30:this.$=[s[u-4],s[u-1],{type:"addMessage",from:s[u-4].actor,to:s[u-1].actor,signalType:s[u-3],msg:s[u]},{type:"activeStart",signalType:n.LINETYPE.ACTIVE_START,actor:s[u-1]}];break;case 31:this.$=[s[u-4],s[u-1],{type:"addMessage",from:s[u-4].actor,to:s[u-1].actor,signalType:s[u-3],msg:s[u]},{type:"activeEnd",signalType:n.LINETYPE.ACTIVE_END,actor:s[u-4]}];break;case 32:this.$=[s[u-3],s[u-1],{type:"addMessage",from:s[u-3].actor,to:s[u-1].actor,signalType:s[u-2],msg:s[u]}];break;case 33:this.$={type:"addActor",actor:s[u]};break;case 34:this.$=n.LINETYPE.SOLID_OPEN;break;case 35:this.$=n.LINETYPE.DOTTED_OPEN;break;case 36:this.$=n.LINETYPE.SOLID;break;case 37:this.$=n.LINETYPE.DOTTED;break;case 38:this.$=n.LINETYPE.SOLID_CROSS;break;case 39:this.$=n.LINETYPE.DOTTED_CROSS;break;case 40:this.$=s[u].substring(1).trim().replace(/\\n/gm,"\n")}},table:[{3:1,4:r,5:n,6:i},{1:[3]},{3:5,4:r,5:n,6:i},{3:6,4:r,5:n,6:i},e([1,4,5,10,15,16,18,20,22,23,25,28,39],s,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:u,8:8,9:10,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,22:d,23:p,25:g,28:f,39:m},e(A,[2,5]),{9:25,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,22:d,23:p,25:g,28:f,39:m},e(A,[2,7]),e(A,[2,8]),{11:26,39:m},{5:[1,27]},{11:28,39:m},{11:29,39:m},{5:[1,30]},{19:31,46:b},{13:[1,33]},{13:[1,34]},{13:[1,35]},{13:[1,36]},{36:37,40:[1,38],41:[1,39],42:[1,40],43:[1,41],44:[1,42],45:[1,43]},{29:44,30:[1,45],34:[1,46],35:[1,47]},e([5,12,33,40,41,42,43,44,45,46],[2,33]),e(A,[2,6]),{5:[1,49],12:[1,48]},e(A,[2,11]),{5:[1,50]},{5:[1,51]},e(A,[2,14]),{5:[1,52]},{5:[2,40]},e(E,s,{7:53}),e(E,s,{7:54}),e([4,5,10,15,16,18,20,22,23,24,25,28,39],s,{7:55}),e(x,s,{26:56,7:57}),{11:60,37:[1,58],38:[1,59],39:m},e(k,[2,34]),e(k,[2,35]),e(k,[2,36]),e(k,[2,37]),e(k,[2,38]),e(k,[2,39]),{11:61,39:m},{11:63,31:62,39:m},{39:[2,28]},{39:[2,29]},{13:[1,64]},e(A,[2,10]),e(A,[2,12]),e(A,[2,13]),e(A,[2,15]),{4:a,5:u,8:8,9:10,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,21:[1,65],22:d,23:p,25:g,28:f,39:m},{4:a,5:u,8:8,9:10,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,21:[1,66],22:d,23:p,25:g,28:f,39:m},{4:a,5:u,8:8,9:10,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,22:d,23:p,24:[1,67],25:g,28:f,39:m},{21:[1,68]},{4:a,5:u,8:8,9:10,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,21:[2,20],22:d,23:p,25:g,27:[1,69],28:f,39:m},{11:70,39:m},{11:71,39:m},{19:72,46:b},{19:73,46:b},{19:74,46:b},{33:[1,75],46:[2,27]},{5:[1,76]},e(A,[2,16]),e(A,[2,17]),{13:[1,77]},e(A,[2,19]),{13:[1,78]},{19:79,46:b},{19:80,46:b},{5:[2,32]},{5:[2,22]},{5:[2,23]},{11:81,39:m},e(A,[2,9]),e(E,s,{7:82}),e(x,s,{7:57,26:83}),{5:[2,30]},{5:[2,31]},{46:[2,26]},{4:a,5:u,8:8,9:10,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,21:[1,84],22:d,23:p,25:g,28:f,39:m},{21:[2,21]},e(A,[2,18])],defaultActions:{5:[2,1],6:[2,2],32:[2,40],46:[2,28],47:[2,29],72:[2,32],73:[2,22],74:[2,23],79:[2,30],80:[2,31],81:[2,26],83:[2,21]},parseError:function(t,e){if(!e.recoverable){var r=new Error(t);throw r.hash=e,r}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},v=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=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,r,n){switch(r){case 0:return 5;case 1:case 2:case 3:case 4:break;case 5:return this.begin("ID"),10;case 6:return this.begin("ALIAS"),39;case 7:return this.popState(),this.popState(),this.begin("LINE"),12;case 8:return this.popState(),this.popState(),5;case 9:return this.begin("LINE"),20;case 10:return this.begin("LINE"),22;case 11:return this.begin("LINE"),23;case 12:return this.begin("LINE"),24;case 13:return this.begin("LINE"),25;case 14:return this.begin("LINE"),27;case 15:return this.popState(),13;case 16:return 21;case 17:return 34;case 18:return 35;case 19:return 30;case 20:return 28;case 21:return this.begin("ID"),15;case 22:return this.begin("ID"),16;case 23:return 18;case 24:return 6;case 25:return 33;case 26:return 5;case 27:return e.yytext=e.yytext.trim(),39;case 28:return 42;case 29:return 43;case 30:return 40;case 31:return 41;case 32:return 44;case 33:return 45;case 34:return 46;case 35:return 37;case 36:return 38;case 37:return 5;case 38:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:[^#\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,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[2,3,15],inclusive:!1},ALIAS:{rules:[2,3,7,8],inclusive:!1},ID:{rules:[2,3,6],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],inclusive:!0}}}}();return _.lexer=v,t.prototype=_,_.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";var n={},i=[],s=[],a="",u=r(0),o=u.Log;e.addActor=function(t,e,r){var i=n[t];i&&e===i.name&&null==r||(null==r&&(r=e),n[t]={name:e,description:r})},e.addMessage=function(t,e,r,n){i.push({from:t,to:e,message:r,answer:n})},e.addSignal=function(t,e,r,n){o.debug("Adding message from="+t+" to="+e+" message="+r+" type="+n),i.push({from:t,to:e,message:r,type:n})},e.getMessages=function(){return i},e.getActors=function(){return n},e.getActor=function(t){return n[t]},e.getActorKeys=function(){return Object.keys(n)},e.getTitle=function(){return a},e.clear=function(){n={},i=[]},e.LINETYPE={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},e.ARROWTYPE={FILLED:0,OPEN:1},e.PLACEMENT={LEFTOF:0,RIGHTOF:1,OVER:2},e.addNote=function(t,r,n){var a={actor:t,placement:r,message:n},u=[].concat(t,t);s.push(a),i.push({from:u[0],to:u[1],message:n,type:e.LINETYPE.NOTE,placement:r})},e.setTitle=function(t){a=t},e.parseError=function(t,e){global.mermaidAPI.parseError(t,e)},e.apply=function(t){if(t instanceof Array)t.forEach(function(t){e.apply(t)});else switch(t.type){case"addActor":e.addActor(t.actor,t.actor,t.description);break;case"activeStart":case"activeEnd":e.addSignal(t.actor,void 0,void 0,t.signalType);break;case"addNote":e.addNote(t.actor,t.placement,t.text);break;case"addMessage":e.addSignal(t.from,t.to,t.msg,t.signalType);break;case"loopStart":e.addSignal(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":e.addSignal(void 0,void 0,void 0,t.signalType);break;case"optStart":e.addSignal(void 0,void 0,t.optText,t.signalType);break;case"optEnd":e.addSignal(void 0,void 0,void 0,t.signalType);break;case"altStart":case"else":e.addSignal(void 0,void 0,t.altText,t.signalType);break;case"altEnd":e.addSignal(void 0,void 0,void 0,t.signalType);break;case"setTitle":e.setTitle(t.text);break;case"parStart":case"and":e.addSignal(void 0,void 0,t.parText,t.signalType);break;case"parEnd":e.addSignal(void 0,void 0,void 0,t.signalType)}}},function(t,e,r){"use strict";var n=r(0),i=n.Log,s="",a=!1;e.setMessage=function(t){i.debug("Setting message to: "+t),s=t},e.getMessage=function(){return s},e.setInfo=function(t){a=t},e.getInfo=function(){return a},e.parseError=function(t,e){global.mermaidAPI.parseError(t,e)}},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[6,9,10,12],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,message:11,say:12,TXT:13,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo",12:"say",13:"TXT"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1],[8,1],[11,2]],performAction:function(t,e,r,n,i,s,a){var u=s.length-1;switch(i){case 1:return n;case 4:break;case 6:n.setInfo(!0);break;case 7:n.setMessage(s[u]);break;case 8:this.$=s[u-1].substring(1).trim().replace(/\\n/gm,"\n")}},table:[{3:1,4:[1,2]},{1:[3]},e(r,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8],11:9,12:[1,10]},{1:[2,1]},e(r,[2,3]),e(r,[2,4]),e(r,[2,5]),e(r,[2,6]),e(r,[2,7]),{13:[1,11]},e(r,[2,8])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var r=function(t,e){this.message=t,this.hash=e};throw r.prototype=Error,new r(t,e)}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},i=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=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,r,n){switch(r){case 0:return 9;case 1:return 10;case 2:return 4;case 3:return 12;case 4:return 13;case 5:return 6;case 6:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:showInfo\b)/i,/^(?:info\b)/i,/^(?:say\b)/i,/^(?::[^#\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6],inclusive:!0}}}}();return n.lexer=i,t.prototype=n,n.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[6,8,10,11,12,13,14],n=[1,9],i=[1,10],s=[1,11],a=[1,12],u={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,dateFormat:11,title:12,section:13,taskTxt:14,taskData:15,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",11:"dateFormat",12:"title",13:"section",14:"taskTxt",15:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,1],[9,1],[9,2]],performAction:function(t,e,r,n,i,s,a){var u=s.length-1;switch(i){case 1:return s[u-1];case 2:this.$=[];break;case 3:s[u-1].push(s[u]),this.$=s[u-1];break;case 4:case 5:this.$=s[u];break;case 6:case 7:this.$=[];break;case 8:n.setDateFormat(s[u].substr(11)),this.$=s[u].substr(11);break;case 9:n.setTitle(s[u].substr(6)),this.$=s[u].substr(6);break;case 10:n.addSection(s[u].substr(8)),this.$=s[u].substr(8);break;case 11:n.addTask(s[u-1],s[u]),this.$="task"}},table:[{3:1,4:[1,2]},{1:[3]},e(r,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:i,13:s,14:a},e(r,[2,7],{1:[2,1]}),e(r,[2,3]),{9:13,11:n,12:i,13:s,14:a},e(r,[2,5]),e(r,[2,6]),e(r,[2,8]),e(r,[2,9]),e(r,[2,10]),{15:[1,14]},e(r,[2,4]),e(r,[2,11])],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var r=function(t,e){this.message=t,this.hash=e};throw r.prototype=Error,new r(t,e)}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},o=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=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,r,n){switch(r){case 0:return 10;case 1:case 2:case 3:break;case 4:return 4;case 5:return 11;case 6:return"date";case 7:return 12;case 8:return 13;case 9:return 14;case 10:return 15;case 11:return":";case 12:return 6;case 13:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\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:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}}}();return u.lexer=o,t.prototype=u,u.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";var n=r(15),i=r(0),s=i.Log,a="",u="",o=[],c=[],l="";e.clear=function(){o=[],c=[],l="",u="",g=0,h=void 0,y=void 0,b=[]},e.setDateFormat=function(t){a=t},e.getDateFormat=function(){return a},e.setTitle=function(t){u=t},e.getTitle=function(){return u},e.addSection=function(t){l=t,o.push(t)},e.getTasks=function(){for(var t=x(),e=0;!t&&e<10;)t=x(),e++;return c=b};var h,y,d=function(t,r,i){i=i.trim();var a=/^after\s+([\d\w-]+)/,u=a.exec(i.trim());if(null!==u){var o=e.findTaskById(u[1]);if(void 0===o){var c=new Date;return c.setHours(0,0,0,0),c}return o.endTime}return n(i,r.trim(),!0).isValid()?n(i,r.trim(),!0).toDate():(s.debug("Invalid date:"+i),s.debug("With date format:"+r.trim()),new Date)},p=function(t,e,r){if(r=r.trim(),n(r,e.trim(),!0).isValid())return n(r,e.trim()).toDate();var i=n(t),s=/^([\d]+)([wdhms])/,a=s.exec(r.trim());if(null!==a){switch(a[2]){case"s":i.add(a[1],"seconds");break;case"m":i.add(a[1],"minutes");break;case"h":i.add(a[1],"hours");break;case"d":i.add(a[1],"days");break;case"w":i.add(a[1],"weeks")}return i.toDate()}return i.toDate()},g=0,f=function(t){return void 0===t?"task"+(g+=1):t},m=function(t,r){var n;n=":"===r.substr(0,1)?r.substr(1,r.length):r;for(var i=n.split(","),s={},a=e.getDateFormat(),u=!0;u;)u=!1,i[0].match(/^\s*active\s*$/)&&(s.active=!0,i.shift(1),u=!0),i[0].match(/^\s*done\s*$/)&&(s.done=!0,i.shift(1),u=!0),i[0].match(/^\s*crit\s*$/)&&(s.crit=!0,i.shift(1),u=!0);var o;for(o=0;o<i.length;o++)i[o]=i[o].trim();switch(i.length){case 1:s.id=f(),s.startTime=t.endTime,s.endTime=p(s.startTime,a,i[0]);break;case 2:s.id=f(),s.startTime=d(0,a,i[0]),s.endTime=p(s.startTime,a,i[1]);break;case 3:s.id=f(i[0]),s.startTime=d(0,a,i[1]),s.endTime=p(s.startTime,a,i[2])}return s},A=function(t,e){var r;r=":"===e.substr(0,1)?e.substr(1,e.length):e;for(var n=r.split(","),i={},s=!0;s;)s=!1,n[0].match(/^\s*active\s*$/)&&(i.active=!0,n.shift(1),s=!0),n[0].match(/^\s*done\s*$/)&&(i.done=!0,n.shift(1),s=!0),n[0].match(/^\s*crit\s*$/)&&(i.crit=!0,n.shift(1),s=!0);var a;for(a=0;a<n.length;a++)n[a]=n[a].trim();switch(n.length){case 1:i.id=f(),i.startTime={type:"prevTaskEnd",id:t},i.endTime={data:n[0]};break;case 2:i.id=f(),i.startTime={type:"getStartDate",startData:n[0]},i.endTime={data:n[1]};break;case 3:i.id=f(n[0]),i.startTime={type:"getStartDate",startData:n[1]},i.endTime={data:n[2]}}return i},b=[],E={};e.addTask=function(t,e){var r={section:l,type:l,processed:!1,raw:{data:e},task:t},n=A(y,e);r.raw.startTime=n.startTime,r.raw.endTime=n.endTime,r.id=n.id,r.prevTaskId=y,r.active=n.active,r.done=n.done,r.crit=n.crit;var i=b.push(r);y=r.id,E[r.id]=i-1},e.findTaskById=function(t){var e=E[t];return b[e]},e.addTaskOrg=function(t,e){var r={section:l,type:l,description:t,task:t},n=m(h,e);r.startTime=n.startTime,r.endTime=n.endTime,r.id=n.id,r.active=n.active,r.done=n.done,r.crit=n.crit,h=r,c.push(r)};var x=function(){var t,r=e.getDateFormat(),n=!0;for(t=0;t<b.length;t++)!function(t){var n=b[t],i="";switch(b[t].raw.startTime.type){case"prevTaskEnd":var s=e.findTaskById(n.prevTaskId);n.startTime=s.endTime;break;case"getStartDate":i=d(0,r,b[t].raw.startTime.startData),i&&(b[t].startTime=i)}b[t].startTime&&(b[t].endTime=p(b[t].startTime,r,b[t].raw.endTime.data),b[t].endTime&&(b[t].processed=!0)),b[t].processed}(t),n=n&&b[t].processed;return n};e.parseError=function(t,e){global.mermaidAPI.parseError(t,e)}},function(t,e){t.exports=require("moment")},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[1,11],n=[1,12],i=[1,13],s=[1,15],a=[1,16],u=[1,17],o=[6,8],c=[1,26],l=[1,27],h=[1,28],y=[1,29],d=[1,30],p=[1,31],g=[6,8,13,17,23,26,27,28,29,30,31],f=[6,8,13,17,23,26,27,28,29,30,31,45,46,47],m=[23,45,46,47],A=[23,30,31,45,46,47],b=[23,26,27,28,29,45,46,47],E=[6,8,13],x=[1,46],k={trace:function(){},yy:{},symbols_:{error:2,mermaidDoc:3,graphConfig:4,CLASS_DIAGRAM:5,NEWLINE:6,statements:7,EOF:8,statement:9,className:10,alphaNumToken:11,relationStatement:12,LABEL:13,classStatement:14,methodStatement:15,CLASS:16,STRUCT_START:17,members:18,STRUCT_STOP:19,MEMBER:20,SEPARATOR:21,relation:22,STR:23,relationType:24,lineType:25,AGGREGATION:26,EXTENSION:27,COMPOSITION:28,DEPENDENCY:29,LINE:30,DOTTED_LINE:31,commentToken:32,textToken:33,graphCodeTokens:34,textNoTagsToken:35,TAGSTART:36,TAGEND:37,"==":38,"--":39,PCT:40,DEFAULT:41,SPACE:42,MINUS:43,keywords:44,UNICODE_TEXT:45,NUM:46,ALPHA:47,$accept:0,$end:1},terminals_:{2:"error",5:"CLASS_DIAGRAM",6:"NEWLINE",8:"EOF",13:"LABEL",16:"CLASS",17:"STRUCT_START",19:"STRUCT_STOP",20:"MEMBER",21:"SEPARATOR",23:"STR",26:"AGGREGATION",27:"EXTENSION",28:"COMPOSITION",29:"DEPENDENCY",30:"LINE",31:"DOTTED_LINE",34:"graphCodeTokens",36:"TAGSTART",37:"TAGEND",38:"==",39:"--",40:"PCT",41:"DEFAULT",42:"SPACE",43:"MINUS",44:"keywords",45:"UNICODE_TEXT",46:"NUM",47:"ALPHA"},productions_:[0,[3,1],[4,4],[7,1],[7,3],[10,2],[10,1],[9,1],[9,2],[9,1],[9,1],[14,2],[14,5],[18,1],[18,2],[15,1],[15,2],[15,1],[15,1],[12,3],[12,4],[12,4],[12,5],[22,3],[22,2],[22,2],[22,1],[24,1],[24,1],[24,1],[24,1],[25,1],[25,1],[32,1],[32,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[35,1],[35,1],[35,1],[35,1],[11,1],[11,1],[11,1]],performAction:function(t,e,r,n,i,s,a){var u=s.length-1;switch(i){case 5:this.$=s[u-1]+s[u];break;case 6:this.$=s[u];break;case 7:n.addRelation(s[u]);break;case 8:s[u-1].title=n.cleanupLabel(s[u]),n.addRelation(s[u-1]);break;case 12:n.addMembers(s[u-3],s[u-1]);break;case 13:this.$=[s[u]];break;case 14:s[u].push(s[u-1]),this.$=s[u];break;case 15:break;case 16:n.addMembers(s[u-1],n.cleanupLabel(s[u]));break;case 17:console.warn("Member",s[u]);break;case 18:break;case 19:this.$={id1:s[u-2],id2:s[u],relation:s[u-1],relationTitle1:"none",relationTitle2:"none"};break;case 20:this.$={id1:s[u-3],id2:s[u],relation:s[u-1],relationTitle1:s[u-2],relationTitle2:"none"};break;case 21:this.$={id1:s[u-3],id2:s[u],relation:s[u-2],relationTitle1:"none",relationTitle2:s[u-1]};break;case 22:this.$={id1:s[u-4],id2:s[u],relation:s[u-2],relationTitle1:s[u-3],relationTitle2:s[u-1]};break;case 23:this.$={type1:s[u-2],type2:s[u],lineType:s[u-1]};break;case 24:this.$={type1:"none",type2:s[u],lineType:s[u-1]};break;case 25:this.$={type1:s[u-1],type2:"none",lineType:s[u]};break;case 26:this.$={type1:"none",type2:"none",lineType:s[u]};break;case 27:this.$=n.relationType.AGGREGATION;break;case 28:this.$=n.relationType.EXTENSION;break;case 29:this.$=n.relationType.COMPOSITION;break;case 30:this.$=n.relationType.DEPENDENCY;break;case 31:this.$=n.lineType.LINE;break;case 32:this.$=n.lineType.DOTTED_LINE}},table:[{3:1,4:2,5:[1,3]},{1:[3]},{1:[2,1]},{6:[1,4]},{7:5,9:6,10:10,11:14,12:7,14:8,15:9,16:r,20:n,21:i,45:s,46:a,47:u},{8:[1,18]},{6:[1,19],8:[2,3]},e(o,[2,7],{13:[1,20]}),e(o,[2,9]),e(o,[2,10]),e(o,[2,15],{22:21,24:24,25:25,13:[1,23],23:[1,22],26:c,27:l,28:h,29:y,30:d,31:p}),{10:32,11:14,45:s,46:a,47:u},e(o,[2,17]),e(o,[2,18]),e(g,[2,6],{11:14,10:33,45:s,46:a,47:u}),e(f,[2,46]),e(f,[2,47]),e(f,[2,48]),{1:[2,2]},{7:34,9:6,10:10,11:14,12:7,14:8,15:9,16:r,20:n,21:i,45:s,46:a,47:u},e(o,[2,8]),{10:35,11:14,23:[1,36],45:s,46:a,47:u},{22:37,24:24,25:25,26:c,27:l,28:h,29:y,30:d,31:p},e(o,[2,16]),{25:38,30:d,31:p},e(m,[2,26],{24:39,26:c,27:l,28:h,29:y}),e(A,[2,27]),e(A,[2,28]),e(A,[2,29]),e(A,[2,30]),e(b,[2,31]),e(b,[2,32]),e(o,[2,11],{17:[1,40]}),e(g,[2,5]),{8:[2,4]},e(E,[2,19]),{10:41,11:14,45:s,46:a,47:u},{10:42,11:14,23:[1,43],45:s,46:a,47:u},e(m,[2,25],{24:44,26:c,27:l,28:h,29:y}),e(m,[2,24]),{18:45,20:x},e(E,[2,21]),e(E,[2,20]),{10:47,11:14,45:s,46:a,47:u},e(m,[2,23]),{19:[1,48]},{18:49,19:[2,13],20:x},e(E,[2,22]),e(o,[2,12]),{19:[2,14]}],defaultActions:{2:[2,1],18:[2,2],34:[2,4],49:[2,14]},parseError:function(t,e){if(!e.recoverable){var r=function(t,e){this.message=t,this.hash=e};throw r.prototype=Error,new r(t,e)}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},_=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,r,n){switch(r){case 0:break;case 1:return 6;case 2:break;case 3:return 5;case 4:return this.begin("struct"),17;case 5:return this.popState(),19;case 6:break;case 7:return"MEMBER";case 8:return 16;case 9:this.begin("string");break;case 10:this.popState();break;case 11:return"STR";case 12:case 13:return 27;case 14:case 15:return 29;case 16:return 28;case 17:return 26;case 18:return 30;case 19:return 31;case 20:return 13;case 21:return 43;case 22:return"DOT";case 23:return"PLUS";case 24:return 40;case 25:case 26:return"EQUALS";case 27:return 47;case 28:return"PUNCTUATION";case 29:return 46;case 30:return 45;case 31:return 42;case 32:return 8}},rules:[/^(?:%%[^\n]*)/,/^(?:\n+)/,/^(?:\s+)/,/^(?:classDiagram\b)/,/^(?:[\{])/,/^(?:\})/,/^(?:[\n])/,/^(?:[^\{\}\n]*)/,/^(?:class\b)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::[^#\n;]+)/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!"#$%&'*+,-.`?\\_\/])/,/^(?:[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:[10,11],inclusive:!1},struct:{rules:[5,6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,8,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],inclusive:!0}}}}();return k.lexer=_,t.prototype=k,k.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";var n,i=r(0),s=i.Log,a=[];n={},e.addClass=function(t){void 0===n[t]&&(n[t]={id:t,methods:[],members:[]})},e.clear=function(){a=[],n={}},t.exports.getClass=function(t){return n[t]},t.exports.getClasses=function(){return n},t.exports.getRelations=function(){return a},e.addRelation=function(t){s.warn("Adding relation: "+JSON.stringify(t)),e.addClass(t.id1),e.addClass(t.id2),a.push(t)},e.addMembers=function(t,e){var r=n[t];"string"==typeof e&&(")"===e.substr(-1)?r.methods.push(e):r.members.push(e))},e.cleanupLabel=function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},e.lineType={LINE:0,DOTTED_LINE:1},e.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3}},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[2,3],n=[1,7],i=[7,12,15,17,19,20,21],s=[7,11,12,15,17,19,20,21],a=[2,20],u=[1,32],o={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,r,n,i,s,a){var u=s.length-1;switch(i){case 1:return s[u-1];case 2:return n.setDirection(s[u-3]),s[u-1];case 4:n.setOptions(s[u-1]),this.$=s[u];break;case 5:s[u-1]+=s[u],this.$=s[u-1];break;case 7:this.$=[];break;case 8:s[u-1].push(s[u]),this.$=s[u-1];break;case 9:this.$=s[u-1];break;case 11:n.commit(s[u]);break;case 12:n.branch(s[u]);break;case 13:n.checkout(s[u]);break;case 14:n.merge(s[u]);break;case 15:n.reset(s[u]);break;case 16:this.$="";break;case 17:this.$=s[u];break;case 18:this.$=s[u-1]+":"+s[u];break;case 19:this.$=s[u-1]+":"+n.count,n.count=0;break;case 20:n.count=0;break;case 21:n.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:r,9:6,12:n},{5:[1,8]},{7:[1,9]},e(i,[2,7],{10:10,11:[1,11]}),e(s,[2,6]),{6:12,7:r,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]},e(s,[2,5]),{7:[1,21]},e(i,[2,8]),{12:[1,22]},e(i,[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]},e(i,[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:u},{12:a,25:33,26:u},{12:[2,18]},{12:a,25:34,26:u},{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 r=function(t,e){this.message=t,this.hash=e};throw r.prototype=Error,new r(t,e)}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},c=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=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,r,n){switch(r){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_]+)/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}}}}();return o.lexer=c,t.prototype=o,o.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";function n(t,e){return Math.floor(Math.random()*(e-t))+t}function i(){for(var t="",e=0;e<7;e++)t+="0123456789abcdef"[n(0,16)];return t}function s(t,e){for(l.debug("Entering isfastforwardable:",t.id,e.id);t.seq<=e.seq&&t!==e&&null!=e.parent;){if(Array.isArray(e.parent))return l.debug("In merge commit:",e.parent),s(t,y[e.parent[0]])||s(t,y[e.parent[1]]);e=y[e.parent]}return l.debug(t.id,e.id),t.id===e.id}function a(t,e){return t.seq>e.seq&&s(e,t)}function u(t,e,r){var n=t.indexOf(e);-1===n?t.push(r):t.splice(n,1,r)}function o(t){var e=h.maxBy(t,"seq"),r="";t.forEach(function(t){r+=t===e?"\t*":"\t|"});var n=[r,e.id,e.seq];if(h.each(p,function(t,r){t===e.id&&n.push(r)}),l.debug(n.join(" ")),Array.isArray(e.parent)){var i=y[e.parent[0]];u(t,e,i),t.push(y[e.parent[1]])}else{if(null==e.parent)return;var s=y[e.parent];u(t,e,s)}t=h.uniqBy(t,"id"),o(t)}var c=r(0),l=c.Log,h=r(20),y={},d=null,p={master:d},g="master",f="LR",m=0;e.setDirection=function(t){f=t};var A={};e.setOptions=function(t){l.debug("options str",t),t=t&&t.trim(),t=t||"{}";try{A=JSON.parse(t)}catch(t){l.error("error while parsing gitGraph options",t.message)}},e.getOptions=function(){return A},e.commit=function(t){var e={id:i(),message:t,seq:m++,parent:null==d?null:d.id};d=e,y[e.id]=e,p[g]=e.id,l.debug("in pushCommit "+e.id)},e.branch=function(t){p[t]=null!=d?d.id:null,l.debug("in createBranch")},e.merge=function(t){var e=y[p[g]],r=y[p[t]];if(a(e,r))return void l.debug("Already merged");if(s(e,r))p[g]=p[t],d=y[p[g]];else{var n={id:i(),message:"merged branch "+t+" into "+g,seq:m++,parent:[null==d?null:d.id,p[t]]};d=n,y[n.id]=n,p[g]=n.id}l.debug(p),l.debug("in mergeBranch")},e.checkout=function(t){l.debug("in checkout"),g=t;var e=p[g];d=y[e]},e.reset=function(t){l.debug("in reset",t);var e=t.split(":")[0],r=parseInt(t.split(":")[1]),n="HEAD"===e?d:y[p[e]];for(l.debug(n,r);r>0;)if(n=y[n.parent],r--,!n){var i="Critical error - unique parent commit not found during reset";throw l.error(i),i}d=n,p[g]=n.id},e.prettyPrint=function(){l.debug(y),o([e.getCommitsArray()[0]])},e.clear=function(){y={},d=null,p={master:d},g="master",m=0},e.getBranchesAsObjArray=function(){return h.map(p,function(t,e){return{name:e,commit:y[t]}})},e.getBranches=function(){return p},e.getCommits=function(){return y},e.getCommitsArray=function(){var t=Object.keys(y).map(function(t){return y[t]});return t.forEach(function(t){l.debug(t.id)}),h.orderBy(t,["seq"],["desc"])},e.getCurrentBranch=function(){return g},e.getDirection=function(){return f},e.getHead=function(){return d}},function(t,e){t.exports=require("lodash")},function(t,e,r){"use strict";var n="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},i=r(0),s=i.Log,a=r(5),u=r(6),o=r(23),c=r(25),l=r(27),h=r(12),y=r(7),d=r(8),p=r(9),g=r(10),f=r(11),m=r(28),A=r(13),b=r(14),E=r(16),x=r(29),k=r(17),_=r(18),v=r(31),F=r(19),D=r(1),C={logLevel:5,cloneCssStyles:!0,startOnLoad:!0,arrowMarkerAbsolute:!1,flowchart:{htmlLabels:!0,useMaxWidth:!0},sequenceDiagram:{diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!0,bottomMarginAdj:1,useMaxWidth:!0},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"',numberSectionStyles:3,axisFormatter:[["%I:%M",function(t){return t.getHours()}],["w. %U",function(t){return 1===t.getDay()}],["%a %d",function(t){return t.getDay()&&1!==t.getDate()}],["%b %d",function(t){return 1!==t.getDate()}],["%m-%y",function(t){return t.getMonth()}]]},classDiagram:{},gitGraph:{},info:{}};i.setLogLevel(C.logLevel);var T=function(t){var e,r=u.detectType(t);switch(r){case"gitGraph":e=_,e.parser.yy=F;break;case"graph":e=y,e.parser.yy=a;break;case"dotGraph":e=d,e.parser.yy=a;break;case"sequenceDiagram":e=p,e.parser.yy=g;break;case"info":e=h,e.parser.yy=f;break;case"gantt":e=A,e.parser.yy=b;break;case"classDiagram":e=E,e.parser.yy=k}try{return e.parse(t),!0}catch(t){return!1}};e.parse=T,e.version=function(){return r(32).version},e.encodeEntities=function(t){var e=t;return e=e.replace(/style.*:\S*#.*;/g,function(t){return t.substring(0,t.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(t){return t.substring(0,t.length-1)}),e=e.replace(/#\w+;/g,function(t){var e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"fl°°"+e+"¶ß":"fl°"+e+"¶ß"})},e.decodeEntities=function(t){var e=t;return e=e.replace(/fl°°/g,function(){return"&#"}),e=e.replace(/fl°/g,function(){return"&"}),e=e.replace(/¶ß/g,function(){return";"})};var w=function(t,r,n,i){if(void 0!==i)i.innerHTML="",D.select(i).append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g");else{var h=document.querySelector("#d"+t);h&&(h.innerHTML=""),D.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=r,r=e.encodeEntities(r);var y=D.select("#d"+t).node(),d=u.detectType(r),p={};switch(d){case"gitGraph":C.flowchart.arrowMarkerAbsolute=C.arrowMarkerAbsolute,v.setConf(C.gitGraph),v.draw(r,t,!1);break;case"graph":C.flowchart.arrowMarkerAbsolute=C.arrowMarkerAbsolute,o.setConf(C.flowchart),o.draw(r,t,!1),C.cloneCssStyles&&(p=o.getClasses(r,!1),u.cloneCssStyles(y.firstChild,p));break;case"dotGraph":C.flowchart.arrowMarkerAbsolute=C.arrowMarkerAbsolute,o.setConf(C.flowchart),o.draw(r,t,!0),C.cloneCssStyles&&(p=o.getClasses(r,!0),u.cloneCssStyles(y.firstChild,p));break;case"sequenceDiagram":C.sequenceDiagram.arrowMarkerAbsolute=C.arrowMarkerAbsolute,c.setConf(C.sequenceDiagram),c.draw(r,t),C.cloneCssStyles&&u.cloneCssStyles(y.firstChild,[]);break;case"gantt":C.gantt.arrowMarkerAbsolute=C.arrowMarkerAbsolute,m.setConf(C.gantt),m.draw(r,t),C.cloneCssStyles&&u.cloneCssStyles(y.firstChild,[]);break;case"classDiagram":C.classDiagram.arrowMarkerAbsolute=C.arrowMarkerAbsolute,x.setConf(C.classDiagram),x.draw(r,t),C.cloneCssStyles&&u.cloneCssStyles(y.firstChild,[]);break;case"info":C.info.arrowMarkerAbsolute=C.arrowMarkerAbsolute,l.draw(r,t,e.version()),C.cloneCssStyles&&u.cloneCssStyles(y.firstChild,[])}D.select("#d"+t).selectAll("foreignobject div").attr("xmlns","http://www.w3.org/1999/xhtml");var g="";C.arrowMarkerAbsolute&&(g=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,g=g.replace(/\(/g,"\\("),g=g.replace(/\)/g,"\\)"));var f=D.select("#d"+t).node().innerHTML.replace(/url\(#arrowhead/g,"url("+g+"#arrowhead","g");f=e.decodeEntities(f),void 0!==n?n(f,a.bindFunctions):s.warn("CB = undefined!");var A=D.select("#d"+t).node();return null!==A&&"function"==typeof A.remove&&D.select("#d"+t).node().remove(),f};e.render=function(t,e,r,n){try{if(1===arguments.length&&(e=t,t="mermaidId0"),"undefined"!=typeof document)return w(t,e,r,n)}catch(t){s.warn(t)}};var S=function(t){var e,r=Object.keys(t);for(e=0;e<r.length;e++)if("object"===n(t[r[e]])){var i,a=Object.keys(t[r[e]]);for(i=0;i<a.length;i++)s.debug("Setting conf ",r[e],"-",a[i]),void 0===C[r[e]]&&(C[r[e]]={}),s.debug("Setting config: "+r[e]+" "+a[i]+" to "+t[r[e]][a[i]]),C[r[e]][a[i]]=t[r[e]][a[i]]}else C[r[e]]=t[r[e]]};e.initialize=function(t){s.debug("Initializing mermaidAPI"),"object"===(void 0===t?"undefined":n(t))&&S(t),i.setLogLevel(C.logLevel)},e.getConfig=function(){return C},e.parseError=function(t,e){"undefined"!=typeof mermaid?global.mermaid.parseError(t,e):(s.debug("Mermaid Syntax error:"),s.debug(t))},global.mermaidAPI={render:e.render,parse:e.parse,initialize:e.initialize,detectType:u.detectType,parseError:e.parseError,getConfig:e.getConfig}},function(t,e){t.exports=require("d3")},function(t,e,r){"use strict";var n=r(5),i=r(7),s=r(8),a=r(1),u=r(24),o=r(0),c=o.Log,l={};t.exports.setConf=function(t){var e,r=Object.keys(t);for(e=0;e<r.length;e++)l[r[e]]=t[r[e]]},e.addVertices=function(t,e){var r=function(t,e){var r;for(r=0;r<e.length;r++)void 0!==e[r]&&(t=t+e[r]+";");return t};Object.keys(t).forEach(function(n){var i,s=t[n],a="";s.classes.length>0&&(a=s.classes.join(" "));var u="";u=r(u,s.styles),i=void 0===s.text?s.id:s.text;var o="";if(l.htmlLabels)o="html",i=i.replace(/fa:fa[\w-]+/g,function(t){return'<i class="fa '+t.substring(3)+'"></i>'});else{var c=document.createElementNS("http://www.w3.org/2000/svg","text"),h=i.split(/<br>/),y=0;for(y=0;y<h.length;y++){var d=document.createElementNS("http://www.w3.org/2000/svg","tspan");d.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),d.setAttribute("dy","1em"),d.setAttribute("x","1"),d.textContent=h[y],c.appendChild(d)}o="svg",i=c}var p=0,g="";switch(s.type){case"round":p=5,g="rect";break;case"square":g="rect";break;case"diamond":g="question";break;case"odd":case"odd_right":g="rect_left_inv_arrow";break;case"circle":g="circle";break;case"ellipse":g="ellipse";break;case"group":g="rect",i=l.htmlLabels?"":document.createElementNS("http://www.w3.org/2000/svg","text");break;default:g="rect"}e.setNode(s.id,{labelType:o,shape:g,label:i,rx:p,ry:p,class:a,style:u,id:s.id})})},e.addEdges=function(t,e){var r,n=0;void 0!==t.defaultStyle&&(r=t.defaultStyle.toString().replace(/,/g,";")),t.forEach(function(i){n++;var s={};"arrow_open"===i.type?s.arrowhead="none":s.arrowhead="normal";var a="";if(void 0!==i.style)i.style.forEach(function(t){a=a+t+";"});else switch(i.stroke){case"normal":a="fill:none",void 0!==r&&(a=r);break;case"dotted":a="stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":a="stroke: #333; stroke-width: 3.5px;fill:none"}s.style=a,void 0!==i.interpolate?s.lineInterpolate=i.interpolate:void 0!==t.defaultInterpolate&&(s.lineInterpolate=t.defaultInterpolate),void 0===i.text?void 0!==i.style&&(s.arrowheadStyle="fill: #333"):(s.arrowheadStyle="fill: #333",void 0===i.style?(s.labelpos="c",l.htmlLabels?(s.labelType="html",s.label='<span class="edgeLabel">'+i.text+"</span>"):(s.labelType="text",s.style="stroke: #333; stroke-width: 1.5px;fill:none",s.label=i.text.replace(/<br>/g,"\n"))):s.label=i.text.replace(/<br>/g,"\n")),e.setEdge(i.start,i.end,s,n)})},e.getClasses=function(t,e){var r;n.clear(),r=e?s.parser:i.parser,r.yy=n,r.parse(t);var a=n.getClasses();return void 0===a.default&&(a.default={id:"default"},a.default.styles=[],a.default.clusterStyles=["rx:4px","fill: rgb(255, 255, 222)","rx: 4px","stroke: rgb(170, 170, 51)","stroke-width: 1px"],a.default.nodeLabelStyles=["fill:#000","stroke:none","font-weight:300",'font-family:"Helvetica Neue",Helvetica,Arial,sans-serf',"font-size:14px"],a.default.edgeLabelStyles=["fill:#000","stroke:none","font-weight:300",'font-family:"Helvetica Neue",Helvetica,Arial,sans-serf',"font-size:14px"]),a},e.draw=function(t,r,o){c.debug("Drawing flowchart");var h;n.clear(),h=o?s.parser:i.parser,h.yy=n;try{h.parse(t)}catch(t){c.debug("Parsing failed")}var y;void 0===(y=n.getDirection())&&(y="TD");var d,p=new u.graphlib.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:y,marginx:20,marginy:20}).setDefaultEdgeLabel(function(){return{}}),g=n.getSubGraphs(),f=0;for(f=g.length-1;f>=0;f--)d=g[f],n.addVertex(d.id,d.title,"group",void 0);var m=n.getVertices(),A=n.getEdges();f=0;var b;for(f=g.length-1;f>=0;f--)for(d=g[f],a.selectAll("cluster").append("text"),b=0;b<d.nodes.length;b++)p.setParent(d.nodes[b],d.id);e.addVertices(m,p),e.addEdges(A,p);var E=u.render,x=new E;x.shapes().question=function(t,e,r){var n=e.width,i=e.height,s=.8*(n+i),a=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}],o=t.insert("polygon",":first-child").attr("points",a.map(function(t){return t.x+","+t.y}).join(" ")).attr("rx",5).attr("ry",5).attr("transform","translate("+-s/2+","+2*s/4+")");return r.intersect=function(t){return u.intersect.polygon(r,a,t)},o},x.shapes().rect_left_inv_arrow=function(t,e,r){var n=e.width,i=e.height,s=[{x:-i/2,y:0},{x:n,y:0},{x:n,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}],a=t.insert("polygon",":first-child").attr("points",s.map(function(t){return t.x+","+t.y}).join(" ")).attr("transform","translate("+-n/2+","+2*i/4+")");return r.intersect=function(t){return u.intersect.polygon(r,s,t)},a},x.shapes().rect_right_inv_arrow=function(t,e,r){var n=e.width,i=e.height,s=[{x:0,y:0},{x:n+i/2,y:0},{x:n,y:-i/2},{x:n+i/2,y:-i},{x:0,y:-i}],a=t.insert("polygon",":first-child").attr("points",s.map(function(t){return t.x+","+t.y}).join(" ")).attr("transform","translate("+-n/2+","+2*i/4+")");return r.intersect=function(t){return u.intersect.polygon(r,s,t)},a},x.arrows().none=function(t,e,r,n){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=i.append("path").attr("d","M 0 0 L 0 0 L 0 0 z");u.util.applyStyle(s,r[n+"Style"])},x.arrows().normal=function(t,e,r,n){t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowheadPath").style("stroke-width",1).style("stroke-dasharray","1,0")};var k=a.select("#"+r),_=a.select("#"+r+" g");for(x(_,p),_.selectAll("g.node").attr("title",function(){return n.getTooltip(this.id)}),l.useMaxWidth?(k.attr("height","100%"),k.attr("width",l.width),k.attr("viewBox","0 0 "+(p.graph().width+20)+" "+(p.graph().height+20)),k.attr("style","max-width:"+(p.graph().width+20)+"px;")):(k.attr("height",p.graph().height),void 0===l.width?k.attr("width",p.graph().width):k.attr("width",l.width),k.attr("viewBox","0 0 "+(p.graph().width+20)+" "+(p.graph().height+20))),n.indexNodes("subGraph"+f),f=0;f<g.length;f++)if(d=g[f],"undefined"!==d.title){var v=document.querySelectorAll("#"+r+" #"+d.id+" rect"),F=document.querySelectorAll("#"+r+" #"+d.id),D=v[0].x.baseVal.value,C=v[0].y.baseVal.value,T=v[0].width.baseVal.value,w=a.select(F[0]),S=w.append("text");S.attr("x",D+T/2),S.attr("y",C+14),S.attr("fill","black"),S.attr("stroke","none"),S.attr("id",r+"Text"),S.style("text-anchor","middle"),void 0===d.title?S.text("Undef"):S.text(d.title)}if(!l.htmlLabels){var B,L=document.querySelectorAll("#"+r+" .edgeLabel .label");for(B=0;B<L.length;B++){var I=L[f],O=I.getBBox(),P=document.createElementNS("http://www.w3.org/2000/svg","rect");P.setAttribute("rx",0),P.setAttribute("ry",0),P.setAttribute("width",O.width),P.setAttribute("height",O.height),P.setAttribute("style","fill:#e8e8e8;"),I.insertBefore(P,I.firstChild)}}}},function(t,e){t.exports=require("dagre-d3-renderer")},function(t,e,r){"use strict";var n=r(9).parser;n.yy=r(10);var i=r(26),s=r(1),a=r(0),u=a.Log,o={diagramMarginX:50,diagramMarginY:30,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!1,bottomMarginAdj:1,activationWidth:10,textPlacement:"tspan"};e.bounds={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],init:function(){this.sequenceItems=[],this.activations=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,r,n){void 0===t[e]?t[e]=r:t[e]=n(r,t[e])},updateBounds:function(t,r,n,i){function s(s){return function(c){u++;var l=a.sequenceItems.length-u+1;a.updateVal(c,"starty",r-l*o.boxMargin,Math.min),a.updateVal(c,"stopy",i+l*o.boxMargin,Math.max),a.updateVal(e.bounds.data,"startx",t-l*o.boxMargin,Math.min),a.updateVal(e.bounds.data,"stopx",n+l*o.boxMargin,Math.max),"activation"!==s&&(a.updateVal(c,"startx",t-l*o.boxMargin,Math.min),a.updateVal(c,"stopx",n+l*o.boxMargin,Math.max),a.updateVal(e.bounds.data,"starty",r-l*o.boxMargin,Math.min),a.updateVal(e.bounds.data,"stopy",i+l*o.boxMargin,Math.max))}}var a=this,u=0;this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},insert:function(t,r,n,i){var s,a,u,o;s=Math.min(t,n),u=Math.max(t,n),a=Math.min(r,i),o=Math.max(r,i),this.updateVal(e.bounds.data,"startx",s,Math.min),this.updateVal(e.bounds.data,"starty",a,Math.min),this.updateVal(e.bounds.data,"stopx",u,Math.max),this.updateVal(e.bounds.data,"stopy",o,Math.max),this.updateBounds(s,a,u,o)},newActivation:function(t,e){var r=n.yy.getActors()[t.from.actor],s=h(t.from.actor).length,a=r.x+o.width/2+(s-1)*o.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+o.activationWidth,stopy:void 0,actor:t.from.actor,anchored:i.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]},newLoop:function(t){this.sequenceItems.push({startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t})},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){var r=this.sequenceItems.pop();r.sections=r.sections||[],r.sectionTitles=r.sectionTitles||[],r.sections.push(e.bounds.getVerticalPos()),r.sectionTitles.push(t),this.sequenceItems.push(r)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}};var c=function(t,r,n,s,a){var u=i.getNoteRect();u.x=r,u.y=n,u.width=a||o.width,u.class="note";var c=t.append("g"),l=i.drawRect(c,u),h=i.getTextObj();h.x=r-4,h.y=n-13,h.textMargin=o.noteMargin,h.dy="1em",h.text=s.message,h.class="noteText";var y=i.drawText(c,h,u.width-o.noteMargin),d=y[0][0].getBBox().height;!a&&d>o.width?(y.remove(),c=t.append("g"),y=i.drawText(c,h,2*u.width-o.noteMargin),d=y[0][0].getBBox().height,l.attr("width",2*u.width),e.bounds.insert(r,n,r+2*u.width,n+2*o.noteMargin+d)):e.bounds.insert(r,n,r+u.width,n+2*o.noteMargin+d),l.attr("height",d+2*o.noteMargin),e.bounds.bumpVerticalPos(d+2*o.noteMargin)},l=function(t,r,i,s,a){var u,c=t.append("g"),l=r+(i-r)/2,h=c.append("text").attr("x",l).attr("y",s-7).style("text-anchor","middle").attr("class","messageText").text(a.message);u=void 0!==h[0][0].getBBox?h[0][0].getBBox().width:h[0][0].getBoundingClientRect();var y;if(r===i){y=c.append("path").attr("d","M "+r+","+s+" C "+(r+60)+","+(s-10)+" "+(r+60)+","+(s+30)+" "+r+","+(s+20)),e.bounds.bumpVerticalPos(30);var d=Math.max(u/2,100);e.bounds.insert(r-d,e.bounds.getVerticalPos()-10,i+d,e.bounds.getVerticalPos())}else y=c.append("line"),y.attr("x1",r),y.attr("y1",s),y.attr("x2",i),y.attr("y2",s),e.bounds.insert(r,e.bounds.getVerticalPos()-10,i,e.bounds.getVerticalPos());a.type===n.yy.LINETYPE.DOTTED||a.type===n.yy.LINETYPE.DOTTED_CROSS||a.type===n.yy.LINETYPE.DOTTED_OPEN?(y.style("stroke-dasharray","3, 3"),y.attr("class","messageLine1")):y.attr("class","messageLine0");var p="";o.arrowMarkerAbsolute&&(p=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,p=p.replace(/\(/g,"\\("),p=p.replace(/\)/g,"\\)")),y.attr("stroke-width",2),y.attr("stroke","black"),y.style("fill","none"),a.type!==n.yy.LINETYPE.SOLID&&a.type!==n.yy.LINETYPE.DOTTED||y.attr("marker-end","url("+p+"#arrowhead)"),a.type!==n.yy.LINETYPE.SOLID_CROSS&&a.type!==n.yy.LINETYPE.DOTTED_CROSS||y.attr("marker-end","url("+p+"#crosshead)")};t.exports.drawActors=function(t,r,n,s){var a;for(a=0;a<n.length;a++){var u=n[a];r[u].x=a*o.actorMargin+a*o.width,r[u].y=s,r[u].width=o.diagramMarginX,r[u].height=o.diagramMarginY,i.drawActor(t,r[u].x,s,r[u].description,o),e.bounds.insert(r[u].x,s,r[u].x+o.width,o.height)}e.bounds.bumpVerticalPos(o.height)},t.exports.setConf=function(t){Object.keys(t).forEach(function(e){o[e]=t[e]})};var h=function(e){return t.exports.bounds.activations.filter(function(t){return t.actor===e})},y=function(t){var e=n.yy.getActors(),r=h(t);return[r.reduce(function(t,e){return Math.min(t,e.startx)},e[t].x+o.width/2),r.reduce(function(t,e){return Math.max(t,e.stopx)},e[t].x+o.width/2)]};t.exports.draw=function(r,a){function h(t,r){var n=e.bounds.endActivation(t);n.starty+18>r&&(n.starty=r-6,r+=12),i.drawActivation(f,n,r,o),e.bounds.insert(n.startx,r-10,n.stopx,r)}n.yy.clear(),n.parse(r+"\n"),e.bounds.init();var d,p,g,f=s.select("#"+a),m=n.yy.getActors(),A=n.yy.getActorKeys(),b=n.yy.getMessages(),E=n.yy.getTitle();t.exports.drawActors(f,m,A,0),i.insertArrowHead(f),i.insertArrowCrossHead(f),b.forEach(function(t){var r;switch(t.type){case n.yy.LINETYPE.NOTE:e.bounds.bumpVerticalPos(o.boxMargin),d=m[t.from].x,p=m[t.to].x,t.placement===n.yy.PLACEMENT.RIGHTOF?c(f,d+(o.width+o.actorMargin)/2,e.bounds.getVerticalPos(),t):t.placement===n.yy.PLACEMENT.LEFTOF?c(f,d-(o.width+o.actorMargin)/2,e.bounds.getVerticalPos(),t):t.to===t.from?c(f,d,e.bounds.getVerticalPos(),t):(g=Math.abs(d-p)+o.actorMargin,c(f,(d+p+o.width-g)/2,e.bounds.getVerticalPos(),t,g));break;case n.yy.LINETYPE.ACTIVE_START:e.bounds.newActivation(t,f);break;case n.yy.LINETYPE.ACTIVE_END:h(t,e.bounds.getVerticalPos());break;case n.yy.LINETYPE.LOOP_START:e.bounds.bumpVerticalPos(o.boxMargin),e.bounds.newLoop(t.message),e.bounds.bumpVerticalPos(o.boxMargin+o.boxTextMargin);break;case n.yy.LINETYPE.LOOP_END:r=e.bounds.endLoop(),i.drawLoop(f,r,"loop",o),e.bounds.bumpVerticalPos(o.boxMargin);break;case n.yy.LINETYPE.OPT_START:e.bounds.bumpVerticalPos(o.boxMargin),e.bounds.newLoop(t.message),e.bounds.bumpVerticalPos(o.boxMargin+o.boxTextMargin);break;case n.yy.LINETYPE.OPT_END:r=e.bounds.endLoop(),i.drawLoop(f,r,"opt",o),e.bounds.bumpVerticalPos(o.boxMargin);break;case n.yy.LINETYPE.ALT_START:e.bounds.bumpVerticalPos(o.boxMargin),e.bounds.newLoop(t.message),e.bounds.bumpVerticalPos(o.boxMargin+o.boxTextMargin);break;case n.yy.LINETYPE.ALT_ELSE:e.bounds.bumpVerticalPos(o.boxMargin),r=e.bounds.addSectionToLoop(t.message),e.bounds.bumpVerticalPos(o.boxMargin);break;case n.yy.LINETYPE.ALT_END:r=e.bounds.endLoop(),i.drawLoop(f,r,"alt",o),e.bounds.bumpVerticalPos(o.boxMargin);break;case n.yy.LINETYPE.PAR_START:e.bounds.bumpVerticalPos(o.boxMargin),e.bounds.newLoop(t.message),e.bounds.bumpVerticalPos(o.boxMargin+o.boxTextMargin);break;case n.yy.LINETYPE.PAR_AND:e.bounds.bumpVerticalPos(o.boxMargin),r=e.bounds.addSectionToLoop(t.message),e.bounds.bumpVerticalPos(o.boxMargin);break;case n.yy.LINETYPE.PAR_END:r=e.bounds.endLoop(),i.drawLoop(f,r,"par",o),e.bounds.bumpVerticalPos(o.boxMargin);break;default:try{e.bounds.bumpVerticalPos(o.messageMargin);var s=y(t.from),a=y(t.to),u=s[0]<=a[0]?1:0,A=s[0]<a[0]?0:1;d=s[u],p=a[A];var b=e.bounds.getVerticalPos();l(f,d,p,b,t);var E=s.concat(a);e.bounds.insert(Math.min.apply(null,E),b,Math.max.apply(null,E),b)}catch(t){console.error("error while drawing message",t)}}}),o.mirrorActors&&(e.bounds.bumpVerticalPos(2*o.boxMargin),t.exports.drawActors(f,m,A,e.bounds.getVerticalPos()));var x=e.bounds.getBounds();u.debug("For line height fix Querying: #"+a+" .actor-line"),s.selectAll("#"+a+" .actor-line").attr("y2",x.stopy);var k=x.stopy-x.starty+2*o.diagramMarginY;o.mirrorActors&&(k=k-o.boxMargin+o.bottomMarginAdj);var _=x.stopx-x.startx+2*o.diagramMarginX;E&&f.append("text").text(E).attr("x",(x.stopx-x.startx)/2-2*o.diagramMarginX).attr("y",-25),o.useMaxWidth?(f.attr("height","100%"),f.attr("width","100%"),f.attr("style","max-width:"+_+"px;")):(f.attr("height",k),f.attr("width",_));var v=E?40:0;f.attr("viewBox",x.startx-o.diagramMarginX+" -"+(o.diagramMarginY+v)+" "+_+" "+(k+v))}},function(t,e,r){"use strict";e.drawRect=function(t,e){var r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),void 0!==e.class&&r.attr("class",e.class),r},e.drawText=function(t,e,r){var n=e.text.replace(/<br\/?>/gi," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.attr("fill",e.fill),void 0!==e.class&&i.attr("class",e.class);var s=i.append("tspan");return s.attr("x",e.x+2*e.textMargin),s.attr("fill",e.fill),s.text(n),void 0!==i.textwrap&&i.textwrap({x:e.x,y:e.y,width:r,height:1800},e.textMargin),i},e.drawLabel=function(t,r){var n=t.append("polygon");n.attr("points",function(t,e,r,n,i){return t+","+e+" "+(t+r)+","+e+" "+(t+r)+","+(e+n-i)+" "+(t+r-1.2*i)+","+(e+n)+" "+t+","+(e+n)}(r.x,r.y,50,20,7)),n.attr("class","labelBox"),r.y=r.y+r.labelMargin,r.x=r.x+.5*r.labelMargin,e.drawText(t,r)};var n=-1;e.drawActor=function(t,r,s,a,u){var o=r+u.width/2,c=t.append("g");0===s&&(n++,c.append("line").attr("id","actor"+n).attr("x1",o).attr("y1",5).attr("x2",o).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));var l=e.getNoteRect();l.x=r,l.y=s,l.fill="#eaeaea",l.width=u.width,l.height=u.height,l.class="actor",l.rx=3,l.ry=3,e.drawRect(c,l),i(u)(a,c,l.x,l.y,l.width,l.height,{class:"actor"})},e.anchorElement=function(t){return t.append("g")},e.drawActivation=function(t,r,n){var i=e.getNoteRect(),s=r.anchored;i.x=r.startx,i.y=r.starty,i.fill="#f4f4f4",i.width=r.stopx-r.startx,i.height=n-r.starty,e.drawRect(s,i)},e.drawLoop=function(t,r,n,i){var s=t.append("g"),a=function(t,e,r,n){return s.append("line").attr("x1",t).attr("y1",e).attr("x2",r).attr("y2",n).attr("class","loopLine")};a(r.startx,r.starty,r.stopx,r.starty),a(r.stopx,r.starty,r.stopx,r.stopy),a(r.startx,r.stopy,r.stopx,r.stopy),a(r.startx,r.starty,r.startx,r.stopy),void 0!==r.sections&&r.sections.forEach(function(t){a(r.startx,t,r.stopx,t).style("stroke-dasharray","3, 3")});var u=e.getTextObj();u.text=n,u.x=r.startx,u.y=r.starty,u.labelMargin=15,u.class="labelText",e.drawLabel(s,u),u=e.getTextObj(),u.text="[ "+r.title+" ]",u.x=r.startx+(r.stopx-r.startx)/2,u.y=r.starty+1.5*i.boxMargin,u.anchor="middle",u.class="loopText",e.drawText(s,u),void 0!==r.sectionTitles&&r.sectionTitles.forEach(function(t,n){""!==t&&(u.text="[ "+t+" ]",u.y=r.sections[n]+1.5*i.boxMargin,e.drawText(s,u))})},e.insertArrowHead=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")},e.insertArrowCrossHead=function(t){var e=t.append("defs"),r=e.append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},e.getTextObj=function(){return{x:0,y:0,fill:"black","text-anchor":"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0}},e.getNoteRect=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}};var i=function(){function t(t,e,r,i,s,a,u){n(e.append("text").attr("x",r+s/2).attr("y",i+a/2+5).style("text-anchor","middle").text(t),u)}function e(t,e,r,i,s,a,u){var o=e.append("text").attr("x",r+s/2).attr("y",i).style("text-anchor","middle");if(o.append("tspan").attr("x",r+s/2).attr("dy","0").text(t),void 0!==o.textwrap){o.textwrap({x:r+s/2,y:i,width:s,height:a},0);var c=o.selectAll("tspan");c.length>0&&c[0].length>0&&(c=c[0],o.attr("y",i+(a/2-o[0][0].getBBox().height*(1-1/c.length)/2)).attr("dominant-baseline","central").attr("alignment-baseline","central"))}n(o,u)}function r(t,r,i,s,a,u,o){var c=r.append("switch"),l=c.append("foreignObject").attr("x",i).attr("y",s).attr("width",a).attr("height",u),h=l.append("div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,c,i,s,a,u,o),n(h,o)}function n(t,e){for(var r in e)e.hasOwnProperty(r)&&t.attr(r,e[r])}return function(n){return"fo"===n.textPlacement?r:"old"===n.textPlacement?t:e}}()},function(t,e,r){"use strict";var n=r(11),i=r(12),s=r(1),a=r(0),u=a.Log;e.draw=function(t,e,r){var a;a=i.parser,a.yy=n,u.debug("Renering example diagram"),a.parse(t);var o=s.select("#"+e);o.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("mermaid "+r),o.attr("height",100),o.attr("width",400)}},function(t,e,r){"use strict";var n=r(13).parser;n.yy=r(14);var i,s=r(1),a=r(15),u={titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"'};t.exports.setConf=function(t){Object.keys(t).forEach(function(e){u[e]=t[e]})};var o;t.exports.draw=function(t,e){function r(t,e,r,n,i,s,a,o){m.append("g").selectAll("rect").data(t).enter().append("rect").attr("x",0).attr("y",function(t,n){return n*e+r-2}).attr("width",function(){return a-u.rightPadding/2}).attr("height",e).attr("class",function(t){for(var e=0;e<x.length;e++)if(t.type===x[e])return"section section"+e%u.numberSectionStyles;return"section section0"});var c=m.append("g").selectAll("rect").data(t).enter();c.append("rect").attr("rx",3).attr("ry",3).attr("x",function(t){return E(t.startTime)+n}).attr("y",function(t,n){return n*e+r}).attr("width",function(t){return E(t.endTime)-E(t.startTime)}).attr("height",i).attr("class",function(t){for(var e="task ",r=0,n=0;n<x.length;n++)t.type===x[n]&&(r=n%u.numberSectionStyles);return t.active?t.crit?e+" activeCrit"+r:e+" active"+r:t.done?t.crit?e+" doneCrit"+r:e+" done"+r:t.crit?e+" crit"+r:e+" task"+r}),c.append("text").text(function(t){return t.task}).attr("font-size",u.fontSize).attr("x",function(t){var e=E(t.startTime),r=E(t.endTime),i=this.getBBox().width;return i>r-e?r+i+1.5*u.leftPadding>a?e+n-5:r+n+5:(r-e)/2+e+n}).attr("y",function(t,n){return n*e+u.barHeight/2+(u.fontSize/2-2)+r}).attr("text-height",i).attr("class",function(t){for(var e=E(t.startTime),r=E(t.endTime),n=this.getBBox().width,i=0,s=0;s<x.length;s++)t.type===x[s]&&(i=s%u.numberSectionStyles);var o="";return t.active&&(o=t.crit?"activeCritText"+i:"activeText"+i),t.done?o=t.crit?o+" doneCritText"+i:o+" doneText"+i:t.crit&&(o=o+" critText"+i),n>r-e?r+n+1.5*u.leftPadding>a?"taskTextOutsideLeft taskTextOutside"+i+" "+o:"taskTextOutsideRight taskTextOutside"+i+" "+o:"taskText taskText"+i+" "+o})}function c(t,e,r,n){var a,o=[[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["h1 %I:%M",function(t){return t.getMinutes()}]],c=[["%Y",function(){return!0}]],l=[["%I:%M",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!==t.getDate()}],["%b %d",function(t){return 1!==t.getDate()}],["%B",function(t){return t.getMonth()}]];void 0!==u.axisFormatter&&(l=[],u.axisFormatter.forEach(function(t){var e=[];e[0]=t[0],e[1]=t[1],l.push(e)})),a=o.concat(l).concat(c);var h=s.svg.axis().scale(E).orient("bottom").tickSize(-n+e+u.gridLineStartPadding,0,0).tickFormat(s.time.format.multi(a));i>7&&i<230&&(h=h.ticks(s.time.monday.range)),m.append("g").attr("class","grid").attr("transform","translate("+t+", "+(n-50)+")").call(h).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em")}function l(t,e){for(var r=[],n=0,i=0;i<x.length;i++)r[i]=[x[i],d(x[i],_)];m.append("g").selectAll("text").data(r).enter().append("text").text(function(t){return t[0]}).attr("x",10).attr("y",function(i,s){if(!(s>0))return i[1]*t/2+e;for(var a=0;a<s;a++)return n+=r[s-1][1],i[1]*t/2+n*t+e}).attr("class",function(t){for(var e=0;e<x.length;e++)if(t[0]===x[e])return"sectionTitle sectionTitle"+e%u.numberSectionStyles;return"sectionTitle"})}function h(t,e,r,n){var i=m.append("g").attr("class","today"),s=new Date;i.append("line").attr("x1",E(s)+t).attr("x2",E(s)+t).attr("y1",u.titleTopMargin).attr("y2",n-u.titleTopMargin).attr("class","today")}function y(t){for(var e=t.length,r={};e;)r[t[--e]]=(r[t[e]]||0)+1;return r}function d(t,e){return y(e)[t]||0}n.yy.clear(),n.parse(t);var p=document.getElementById(e);o=p.parentElement.offsetWidth,void 0===o&&(o=1200),void 0!==u.useWidth&&(o=u.useWidth);var g=n.yy.getTasks(),f=g.length*(u.barHeight+u.barGap)+2*u.topPadding;p.setAttribute("height","100%"),p.setAttribute("viewBox","0 0 "+o+" "+f);var m=s.select("#"+e),A=s.min(g,function(t){return t.startTime}),b=s.max(g,function(t){return t.endTime}),E=s.time.scale().domain([s.min(g,function(t){return t.startTime}),s.max(g,function(t){return t.endTime})]).rangeRound([0,o-u.leftPadding-u.rightPadding]),x=[];i=a.duration(b-A).asDays();for(var k=0;k<g.length;k++)x.push(g[k].type);var _=x;x=function(t){for(var e={},r=[],n=0,i=t.length;n<i;++n)e.hasOwnProperty(t[n])||(e[t[n]]=!0,r.push(t[n]));return r}(x),function(t,e,n){var i=u.barHeight,a=i+u.barGap,o=u.topPadding,y=u.leftPadding,d=s.scale.linear().domain([0,x.length]).range(["#00B9FA","#F95002"]).interpolate(s.interpolateHcl);c(y,o,e,n),r(t,a,o,y,i,d,e,n),l(a,o),h(y,o,e,n)}(g,o,f),void 0!==u.useWidth&&p.setAttribute("width",o),m.append("text").text(n.yy.getTitle()).attr("x",o/2).attr("y",u.titleTopMargin).attr("class","titleText")}},function(t,e,r){"use strict";var n=r(16).parser,i=r(17);n.yy=i;var s,a=r(1),u=r(0),o=u.Log,c=r(30);s={};var l=0,h={dividerMargin:10,padding:5,textHeight:10},y=function(t){var e,r=Object.keys(s);for(e=0;e<r.length;e++)if(s[r[e]].label===t)return r[e]},d=function(t){t.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),t.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.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 18,7 L9,13 L14,7 L9,1 Z")},p=0,g=function(t,e,r){var n=function(t){switch(t){case i.relationType.AGGREGATION:return"aggregation";case i.relationType.EXTENSION:return"extension";case i.relationType.COMPOSITION:return"composition";case i.relationType.DEPENDENCY:return"dependency"}},s=e.points,u=a.svg.line().x(function(t){return t.x}).y(function(t){return t.y}).interpolate("basis"),o=t.append("path").attr("d",u(s)).attr("id","edge"+p).attr("class","relation"),c="";h.arrowMarkerAbsolute&&(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,c=c.replace(/\(/g,"\\("),c=c.replace(/\)/g,"\\)")),"none"!==r.relation.type1&&o.attr("marker-start","url("+c+"#"+n(r.relation.type1)+"Start)"),"none"!==r.relation.type2&&o.attr("marker-end","url("+c+"#"+n(r.relation.type2)+"End)");var l,y,d=e.points.length;if(d%2!=0){var g=e.points[Math.floor(d/2)],f=e.points[Math.ceil(d/2)];l=(g.x+f.x)/2,y=(g.y+f.y)/2}else{var m=e.points[Math.floor(d/2)];l=m.x,y=m.y}if(void 0!==r.title){var A=t.append("g").attr("class","classLabel"),b=A.append("text").attr("class","label").attr("x",l).attr("y",y).attr("fill","red").attr("text-anchor","middle").text(r.title);window.label=b;var E=b.node().getBBox();A.insert("rect",":first-child").attr("class","box").attr("x",E.x-h.padding/2).attr("y",E.y-h.padding/2).attr("width",E.width+h.padding).attr("height",E.height+h.padding)}p++},f=function(t,e){o.info("Rendering class "+e);var r=function(t,e,r){var n=t.append("tspan").attr("x",h.padding).text(e);r||n.attr("dy",h.textHeight)},n="classId"+l,i={id:n,label:e.id,width:0,height:0},a=t.append("g").attr("id",n).attr("class","classGroup"),u=a.append("text").attr("x",h.padding).attr("y",h.textHeight+h.padding).text(e.id),c=u.node().getBBox().height,y=a.append("line").attr("x1",0).attr("y1",h.padding+c+h.dividerMargin/2).attr("y2",h.padding+c+h.dividerMargin/2),d=a.append("text").attr("x",h.padding).attr("y",c+h.dividerMargin+h.textHeight).attr("fill","white").attr("class","classText"),p=!0;e.members.forEach(function(t){r(d,t,p),p=!1});var g=d.node().getBBox(),f=a.append("line").attr("x1",0).attr("y1",h.padding+c+h.dividerMargin+g.height).attr("y2",h.padding+c+h.dividerMargin+g.height),m=a.append("text").attr("x",h.padding).attr("y",c+2*h.dividerMargin+g.height+h.textHeight).attr("fill","white").attr("class","classText");p=!0,e.methods.forEach(function(t){r(m,t,p),p=!1});var A=a.node().getBBox();return a.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",A.width+2*h.padding).attr("height",A.height+h.padding+.5*h.dividerMargin),y.attr("x2",A.width+2*h.padding),f.attr("x2",A.width+2*h.padding),i.width=A.width+2*h.padding,i.height=A.height+h.padding+.5*h.dividerMargin,s[n]=i,l++,i};t.exports.setConf=function(t){Object.keys(t).forEach(function(e){h[e]=t[e]})},t.exports.draw=function(t,e){n.yy.clear(),n.parse(t),o.info("Rendering diagram "+t);var r=a.select("#"+e);d(r);var s=new c.graphlib.Graph({multigraph:!0});s.setGraph({isMultiGraph:!0}),s.setDefaultEdgeLabel(function(){return{}});var u,l=i.getClasses(),h=Object.keys(l);for(u=0;u<h.length;u++){var p=l[h[u]],m=f(r,p);s.setNode(m.id,m),o.info("Org height: "+m.height)}i.getRelations().forEach(function(t){o.info("tjoho"+y(t.id1)+y(t.id2)+JSON.stringify(t)),s.setEdge(y(t.id1),y(t.id2),{relation:t})}),c.layout(s),s.nodes().forEach(function(t){void 0!==t&&(o.debug("Node "+t+": "+JSON.stringify(s.node(t))),a.select("#"+t).attr("transform","translate("+(s.node(t).x-s.node(t).width/2)+","+(s.node(t).y-s.node(t).height/2)+" )"))}),s.edges().forEach(function(t){o.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(s.edge(t))),g(r,s.edge(t),s.edge(t).relation)}),r.attr("height","100%"),r.attr("width","100%"),r.attr("viewBox","0 0 "+(s.graph().width+20)+" "+(s.graph().height+20))}},function(t,e){t.exports=require("dagre")},function(t,e,r){"use strict";function n(t){t.append("defs").append("g").attr("id","def-commit").append("circle").attr("r",A.nodeRadius).attr("cx",0).attr("cy",0),t.select("#def-commit").append("foreignObject").attr("width",A.nodeLabel.width).attr("height",A.nodeLabel.height).attr("x",A.nodeLabel.x).attr("y",A.nodeLabel.y).attr("class","node-label").attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").append("xhtml:p").html("")}function i(t,e,r,n){n=n||"basis";var i=A.branchColors[r%A.branchColors.length],s=p.svg.line().x(function(t){return Math.round(t.x)}).y(function(t){return Math.round(t.y)}).interpolate(n);t.append("svg:path").attr("d",s(e)).style("stroke",i).style("stroke-width",A.lineStrokeWidth).style("fill","none")}function s(t,e){e=e||t.node().getBBox();var r=t.node().getCTM();return{left:r.e+e.x*r.a,top:r.f+e.y*r.d,width:e.width,height:e.height}}function a(t,e,r,n,a){f.debug("svgDrawLineForCommits: ",e,r);var u=s(t.select("#node-"+e+" circle")),o=s(t.select("#node-"+r+" circle"));switch(n){case"LR":if(u.left-o.left>A.nodeSpacing){var c={x:u.left-A.nodeSpacing,y:o.top+o.height/2},l={x:o.left+o.width,y:o.top+o.height/2};i(t,[c,l],a,"linear"),i(t,[{x:u.left,y:u.top+u.height/2},{x:u.left-A.nodeSpacing/2,y:u.top+u.height/2},{x:u.left-A.nodeSpacing/2,y:c.y},c],a)}else i(t,[{x:u.left,y:u.top+u.height/2},{x:u.left-A.nodeSpacing/2,y:u.top+u.height/2},{x:u.left-A.nodeSpacing/2,y:o.top+o.height/2},{x:o.left+o.width,y:o.top+o.height/2}],a);break;case"BT":o.top-u.top>A.nodeSpacing?(c={x:o.left+o.width/2,y:u.top+u.height+A.nodeSpacing},l={x:o.left+o.width/2,y:o.top},i(t,[c,l],a,"linear"),i(t,[{x:u.left+u.width/2,y:u.top+u.height},{x:u.left+u.width/2,y:u.top+u.height+A.nodeSpacing/2},{x:o.left+o.width/2,y:c.y-A.nodeSpacing/2},c],a)):i(t,[{x:u.left+u.width/2,y:u.top+u.height},{x:u.left+u.width/2,y:u.top+A.nodeSpacing/2},{x:o.left+o.width/2,y:o.top-A.nodeSpacing/2},{x:o.left+o.width/2,y:o.top}],a)}}function u(t,e){return t.select(e).node().cloneNode(!0)}function o(t,e,r,n){var i,s=Object.keys(m).length;if(y.isString(e))do{if(i=m[e],f.debug("in renderCommitHistory",i.id,i.seq),t.select("#node-"+e).size()>0)return;t.append(function(){return u(t,"#def-commit")}).attr("class","commit").attr("id",function(){return"node-"+i.id}).attr("transform",function(){switch(n){case"LR":return"translate("+(i.seq*A.nodeSpacing+A.leftMargin)+", "+l*A.branchOffset+")";case"BT":return"translate("+(l*A.branchOffset+A.leftMargin)+", "+(s-i.seq)*A.nodeSpacing+")"}}).attr("fill",A.nodeFillColor).attr("stroke",A.nodeStrokeColor).attr("stroke-width",A.nodeStrokeWidth);var a=y.find(r,["commit",i]);a&&(f.debug("found branch ",a.name),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","branch-label").text(a.name+", ")),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-id").text(i.id),""!==i.message&&"BT"===n&&t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-msg").text(", "+i.message),e=i.parent}while(e&&m[e]);y.isArray(e)&&(f.debug("found merge commmit",e),o(t,e[0],r,n),l++,o(t,e[1],r,n),l--)}function c(t,e,r,n){for(n=n||0;e.seq>0&&!e.lineDrawn;)y.isString(e.parent)?(a(t,e.id,e.parent,r,n),e.lineDrawn=!0,e=m[e.parent]):y.isArray(e.parent)&&(a(t,e.id,e.parent[0],r,n),a(t,e.id,e.parent[1],r,n+1),c(t,m[e.parent[1]],r,n+1),e.lineDrawn=!0,e=m[e.parent[0]])}var l,h=r(19),y=r(20),d=r(18),p=r(1),g=r(0),f=g.Log,m={},A={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}},b={};e.setConf=function(t){b=t},e.draw=function(t,e,r){try{var i;i=d.parser,i.yy=h,f.debug("in gitgraph renderer",t,e,r),i.parse(t+"\n"),A=y.extend(A,b,h.getOptions()),f.debug("effective options",A);var s=h.getDirection();m=h.getCommits();var a=h.getBranchesAsObjArray();"BT"===s&&(A.nodeLabel.x=a.length*A.branchOffset,A.nodeLabel.width="100%",A.nodeLabel.y=-2*A.nodeRadius);var u=p.select("#"+e);n(u),l=1,y.each(a,function(t){o(u,t.commit.id,a,s),c(u,t.commit,s),l++}),u.attr("height",function(){return"BT"===s?Object.keys(m).length*A.nodeSpacing:(a.length+1)*A.branchOffset})}catch(t){f.error("Error while rendering gitgraph"),f.error(t.message)}}},function(t,e){t.exports={name:"mermaid",version:"7.0.5",description:"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.",main:"src/mermaid.js",keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],bin:{mermaid:"./bin/mermaid.js"},scripts:{build:"node -r babel-register ./node_modules/.bin/webpack --progress --colors",watch:"yarn build -- --watch",release:"yarn build -- -p --config webpack.config.prod.js",upgrade:"yarn-upgrade-all && yarn remove d3 && yarn add d3@3.5.17",lint:"node_modules/.bin/standard",karma:"node node_modules/karma/bin/karma start karma.conf.js --single-run",tape:"node node_modules/tape/bin/tape test/cli_test-*.js",test:"yarn lint && yarn tape && yarn karma",live:"live-server ./test/examples",jison:"gulp jison_legacy",live_server:"gulp live-server",prepublishOnly:"yarn build && yarn release && yarn test"},repository:{type:"git",url:"https://github.com/knsv/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js"]},dependencies:{chalk:"^2.1.0",d3:"3.5.17",dagre:"^0.7.4","dagre-d3-renderer":"^0.1.6",he:"^1.1.1",lodash:"^4.17.4",minimist:"^1.2.0",mkdirp:"^0.5.1",moment:"^2.18.1",semver:"^5.4.1",which:"^1.3.0"},devDependencies:{async:"^2.5.0","babel-core":"^6.26.0","babel-loader":"^7.1.2","babel-plugin-transform-remove-strict-mode":"^0.0.2","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1",clone:"^2.1.1","codeclimate-test-reporter":"^0.5.0","css-loader":"^0.28.7",dox:"^0.9.0","event-stream":"^3.3.4","extract-text-webpack-plugin":"^3.0.0","front-matter":"^2.2.0",gulp:"^3.9.1","gulp-bower":"^0.0.13","gulp-bump":"^2.7.0","gulp-concat":"^2.6.1","gulp-data":"^1.2.1","gulp-dox":"^0.1.6","gulp-ext-replace":"^0.3.0","gulp-filelog":"^0.4.1","gulp-front-matter":"^1.3.0","gulp-hogan":"^2.0.0","gulp-if":"^2.0.2","gulp-insert":"^0.5.0","gulp-istanbul":"^1.1.2","gulp-jasmine":"^2.4.2","gulp-jasmine-browser":"^1.9.0","gulp-jison":"^1.2.0","gulp-less":"^3.3.2","gulp-livereload":"^3.8.1","gulp-marked":"^1.0.0","gulp-mdvars":"^2.0.0","gulp-qunit":"^1.5.0","gulp-rename":"^1.2.2","gulp-shell":"^0.6.3","gulp-tag-version":"^1.3.0","gulp-util":"^3.0.8","gulp-vartree":"^2.0.1","hogan.js":"^3.0.2","inject-loader":"^3.0.1",jasmine:"^2.8.0","jasmine-es6":"^0.4.1",jison:"^0.4.17",jsdom:"^11.2.0",karma:"^1.7.1","karma-chrome-launcher":"^2.2.0","karma-jasmine":"^1.1.0","karma-webpack":"^2.0.4",less:"^2.7.2","less-loader":"^4.0.5","live-server":"^1.2.0","map-stream":"^0.0.7",marked:"^0.3.6","mock-browser":"^0.92.14","phantomjs-prebuilt":"^2.1.15","require-dir":"^0.3.2",rimraf:"^2.6.1",standard:"^10.0.3","style-loader":"^0.18.2",tape:"^4.8.0",webpack:"^3.5.5","webpack-node-externals":"^1.6.0","yarn-upgrade-all":"^0.1.8"},files:["bin","dist","lib","src"]}}]); \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.dark.min.css b/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.dark.min.css
new file mode 100644
index 00000000..e8912f71
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.dark.min.css
@@ -0,0 +1 @@
+.mermaid .label{color:#323d47}.node circle,.node ellipse,.node polygon,.node rect{fill:#bdd5ea;stroke:#81b1db;stroke-width:1px}.arrowheadPath{fill:#d3d3d3}.edgePath .path{stroke:#d3d3d3}.edgeLabel{background-color:#e8e8e8}.cluster rect{fill:#6d6d65!important;rx:4!important;stroke:hsla(0,0%,100%,.25)!important;stroke-width:1px!important}.cluster text{fill:#f9fffe}.actor{stroke:#81b1db;fill:#bdd5ea}text.actor{fill:#000;stroke:none}.actor-line{stroke:#d3d3d3}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#d3d3d3}#arrowhead,#crosshead path{fill:#d3d3d3!important}#crosshead path{stroke:#d3d3d3!important}.messageText{fill:#d3d3d3;stroke:none}.labelBox{stroke:#81b1db;fill:#bdd5ea}.labelText{fill:#323d47;stroke:none}.loopText{fill:#d3d3d3;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#81b1db}.note{stroke:hsla(0,0%,100%,.25);fill:#fff5ad}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0{fill:hsla(0,0%,100%,.3)}.section2{fill:#eae8b9}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#f9fffe}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:hsla(0,0%,100%,.3);opacity:.3;shape-rendering:crispEdges}.grid .tick text{fill:#d3d3d3;opacity:.5}.grid path{stroke-width:0}.today{fill:none;stroke:#db5757;stroke-width:2px}.task{stroke-width:1}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#323d47;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#323d47;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#323d47}.task0,.task1,.task2,.task3{fill:#bdd5ea;stroke:hsla(0,0%,100%,.5)}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#d3d3d3}.active0,.active1,.active2,.active3{fill:#81b1db;stroke:hsla(0,0%,100%,.5)}.activeText0,.activeText1,.activeText2,.activeText3{fill:#323d47!important}.done0,.done1,.done2,.done3{fill:#d3d3d3}.doneText0,.doneText1,.doneText2,.doneText3{fill:#323d47!important}.crit0,.crit1,.crit2,.crit3{stroke:#e83737;fill:#e83737;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#e83737;fill:#81b1db;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#e83737;fill:#d3d3d3;stroke-width:1;cursor:pointer;shape-rendering:crispEdges}.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#d3d3d3!important}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3{fill:#323d47!important}.titleText{text-anchor:middle;font-size:18px;fill:#d3d3d3}g.classGroup text{fill:purple;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#bdd5ea;stroke:purple}g.classGroup line{stroke:purple;stroke-width:1}svg .classLabel .box{stroke:none;stroke-width:0;fill:#bdd5ea;opacity:.5}svg .classLabel .label{fill:purple;font-size:10px}.relation{stroke:purple;stroke-width:1;fill:none}#compositionEnd,#compositionStart,.composition{fill:purple;stroke:purple;stroke-width:1}#aggregationEnd,#aggregationStart,.aggregation{fill:#bdd5ea;stroke:purple;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:purple;stroke:purple;stroke-width:1}.branch-label,.commit-id,.commit-msg{fill:#d3d3d3;color:#d3d3d3}.node text{font-size:14px}.node text,div.mermaidTooltip{font-family:trebuchet ms,verdana,arial}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:#6d6d65;border:1px solid hsla(0,0%,100%,.25);border-radius:2px;pointer-events:none;z-index:100} \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.forest.min.css b/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.forest.min.css
new file mode 100644
index 00000000..f8a2fca3
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.forest.min.css
@@ -0,0 +1 @@
+.mermaid .label{font-family:trebuchet ms,verdana,arial;color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#cde498;stroke:#13540c;stroke-width:1px}.arrowheadPath{fill:green}.edgePath .path{stroke:green;stroke-width:1.5px}.edgeLabel{background-color:#e8e8e8}.cluster rect{fill:#cdffb2!important;rx:4!important;stroke:#6eaa49!important;stroke-width:1px!important}.cluster text{fill:#333}.actor{stroke:#13540c;fill:#cde498}text.actor{fill:#000;stroke:none}.actor-line{stroke:grey}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#arrowhead{fill:#333}#crosshead path{fill:#333!important;stroke:#333!important}.messageText{fill:#333;stroke:none}.labelBox{stroke:#326932;fill:#cde498}.labelText,.loopText{fill:#000;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#326932}.note{stroke:#6eaa49;fill:#fff5ad}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0,.section2{fill:#6eaa49}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#333}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#d3d3d3;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:red;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:#487e3a;stroke:#13540c}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#000}.active0,.active1,.active2,.active3{fill:#cde498;stroke:#13540c}.activeText0,.activeText1,.activeText2,.activeText3{fill:#000!important}.done0,.done1,.done2,.done3{stroke:grey;fill:#d3d3d3;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#000!important}.crit0,.crit1,.crit2,.crit3{stroke:#f88;fill:red;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#f88;fill:#cde498;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#000!important}.titleText{text-anchor:middle;font-size:18px;fill:#000}g.classGroup text{fill:#13540c;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#cde498;stroke:#13540c}g.classGroup line{stroke:#13540c;stroke-width:1}svg .classLabel .box{stroke:none;stroke-width:0;fill:#cde498;opacity:.5}svg .classLabel .label{fill:#13540c;font-size:10px}.relation{stroke:#13540c;stroke-width:1;fill:none}#compositionEnd,#compositionStart,.composition{fill:#13540c;stroke:#13540c;stroke-width:1}#aggregationEnd,#aggregationStart,.aggregation{fill:#cde498;stroke:#13540c;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:#13540c;stroke:#13540c;stroke-width:1}.node text{font-size:14px}.node text,div.mermaidTooltip{font-family:trebuchet ms,verdana,arial}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:#cdffb2;border:1px solid #6eaa49;border-radius:2px;pointer-events:none;z-index:100} \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.min.css b/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.min.css
new file mode 100644
index 00000000..a485f4ce
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.min.css
@@ -0,0 +1 @@
+.mermaid .label{color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#ececff;stroke:#ccf;stroke-width:1px}.arrowheadPath{fill:#333}.edgePath .path{stroke:#333}.edgeLabel{background-color:#e8e8e8}.cluster rect{fill:#ffffde!important;rx:4!important;stroke:#aa3!important;stroke-width:1px!important}.cluster text{fill:#333}.actor{stroke:#ccf;fill:#ececff}text.actor{fill:#000;stroke:none}.actor-line{stroke:grey}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#arrowhead{fill:#333}#crosshead path{fill:#333!important;stroke:#333!important}.messageText{fill:#333;stroke:none}.labelBox{stroke:#ccf;fill:#ececff}.labelText,.loopText{fill:#000;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#ccf}.note{stroke:#aa3;fill:#fff5ad}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0{fill:rgba(102,102,255,.49)}.section2{fill:#fff400}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#333}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#d3d3d3;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:red;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:#8a90dd;stroke:#534fbc}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#000}.active0,.active1,.active2,.active3{fill:#bfc7ff;stroke:#534fbc}.activeText0,.activeText1,.activeText2,.activeText3{fill:#000!important}.done0,.done1,.done2,.done3{stroke:grey;fill:#d3d3d3;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#000!important}.crit0,.crit1,.crit2,.crit3{stroke:#f88;fill:red;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#000!important}.titleText{text-anchor:middle;font-size:18px;fill:#000}g.classGroup text{fill:#9370db;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#ececff;stroke:#9370db}g.classGroup line{stroke:#9370db;stroke-width:1}svg .classLabel .box{stroke:none;stroke-width:0;fill:#ececff;opacity:.5}svg .classLabel .label{fill:#9370db;font-size:10px}.relation{stroke:#9370db;stroke-width:1;fill:none}#compositionEnd,#compositionStart,.composition{fill:#9370db;stroke:#9370db;stroke-width:1}#aggregationEnd,#aggregationStart,.aggregation{fill:#ececff;stroke:#9370db;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}.node text{font-size:14px}.node text,div.mermaidTooltip{font-family:trebuchet ms,verdana,arial}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100} \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.min.js b/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.min.js
new file mode 100644
index 00000000..09183e98
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.min.js
@@ -0,0 +1,9 @@
+!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()}(window,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,{configurable:!1,enumerable:!0,get:r})},n.r=function(t){Object.defineProperty(t,"__esModule",{value:!0})},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=182)}([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 u(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function c(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function l(t,e){var n,r=[];for(n=0;n<t.length;++n)r.push(e(t[n],n));return r}function d(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function f(t,e){for(var n in e)d(e,n)&&(t[n]=e[n]);return d(e,"toString")&&(t.toString=e.toString),d(e,"valueOf")&&(t.valueOf=e.valueOf),t}function h(t,e,n,r){return Se(t,e,n,r,!0).utc()}function _(t){return null==t._pf&&(t._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],meridiem:null,rfc2822:!1,weekdayMismatch:!1}),t._pf}function p(t){if(null==t._isValid){var e=_(t),n=r.call(e.parsedDateParts,function(t){return null!=t}),i=!isNaN(t._d.getTime())&&e.overflow<0&&!e.empty&&!e.invalidMonth&&!e.invalidWeekday&&!e.weekdayMismatch&&!e.nullInput&&!e.invalidFormat&&!e.userInvalidated&&(!e.meridiem||e.meridiem&&n);if(t._strict&&(i=i&&0===e.charsLeftOver&&0===e.unusedTokens.length&&void 0===e.bigHour),null!=Object.isFrozen&&Object.isFrozen(t))return i;t._isValid=i}return t._isValid}function m(t){var e=h(NaN);return null!=t?f(_(e),t):_(e).userInvalidated=!0,e}r=Array.prototype.some?Array.prototype.some:function(t){for(var e=Object(this),n=e.length>>>0,r=0;r<n;r++)if(r in e&&t.call(this,e[r],r,e))return!0;return!1};var y=i.momentProperties=[];function g(t,e){var n,r,i;if(s(e._isAMomentObject)||(t._isAMomentObject=e._isAMomentObject),s(e._i)||(t._i=e._i),s(e._f)||(t._f=e._f),s(e._l)||(t._l=e._l),s(e._strict)||(t._strict=e._strict),s(e._tzm)||(t._tzm=e._tzm),s(e._isUTC)||(t._isUTC=e._isUTC),s(e._offset)||(t._offset=e._offset),s(e._pf)||(t._pf=_(e)),s(e._locale)||(t._locale=e._locale),y.length>0)for(n=0;n<y.length;n++)r=y[n],s(i=e[r])||(t[r]=i);return t}var v=!1;function M(t){g(this,t),this._d=new Date(null!=t._d?t._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===v&&(v=!0,i.updateOffset(this),v=!1)}function b(t){return t instanceof M||null!=t&&null!=t._isAMomentObject}function k(t){return t<0?Math.ceil(t)||0:Math.floor(t)}function L(t){var e=+t,n=0;return 0!==e&&isFinite(e)&&(n=k(e)),n}function w(t,e,n){var r,i=Math.min(t.length,e.length),a=Math.abs(t.length-e.length),o=0;for(r=0;r<i;r++)(n&&t[r]!==e[r]||!n&&L(t[r])!==L(e[r]))&&o++;return o+a}function x(t){!1===i.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+t)}function T(t,e){var n=!0;return f(function(){if(null!=i.deprecationHandler&&i.deprecationHandler(null,t),n){for(var r,a=[],o=0;o<arguments.length;o++){if(r="","object"==typeof arguments[o]){for(var s in r+="\n["+o+"] ",arguments[0])r+=s+": "+arguments[0][s]+", ";r=r.slice(0,-2)}else r=arguments[o];a.push(r)}x(t+"\nArguments: "+Array.prototype.slice.call(a).join("")+"\n"+(new Error).stack),n=!1}return e.apply(this,arguments)},e)}var D,Y={};function S(t,e){null!=i.deprecationHandler&&i.deprecationHandler(t,e),Y[t]||(x(e),Y[t]=!0)}function E(t){return t instanceof Function||"[object Function]"===Object.prototype.toString.call(t)}function A(t,e){var n,r=f({},t);for(n in e)d(e,n)&&(o(t[n])&&o(e[n])?(r[n]={},f(r[n],t[n]),f(r[n],e[n])):null!=e[n]?r[n]=e[n]:delete r[n]);for(n in t)d(t,n)&&!d(e,n)&&o(t[n])&&(r[n]=f({},r[n]));return r}function C(t){null!=t&&this.set(t)}i.suppressDeprecationWarnings=!1,i.deprecationHandler=null,D=Object.keys?Object.keys:function(t){var e,n=[];for(e in t)d(t,e)&&n.push(e);return n};var j={};function O(t,e){var n=t.toLowerCase();j[n]=j[n+"s"]=j[e]=t}function H(t){return"string"==typeof t?j[t]||j[t.toLowerCase()]:void 0}function P(t){var e,n,r={};for(n in t)d(t,n)&&(e=H(n))&&(r[e]=t[n]);return r}var F={};function N(t,e){F[t]=e}function B(t,e,n){var r=""+Math.abs(t),i=e-r.length,a=t>=0;return(a?n?"+":"":"-")+Math.pow(10,Math.max(0,i)).toString().substr(1)+r}var R=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,I=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,z={},W={};function q(t,e,n,r){var i=r;"string"==typeof r&&(i=function(){return this[r]()}),t&&(W[t]=i),e&&(W[e[0]]=function(){return B(i.apply(this,arguments),e[1],e[2])}),n&&(W[n]=function(){return this.localeData().ordinal(i.apply(this,arguments),t)})}function U(t,e){return t.isValid()?(e=V(e,t.localeData()),z[e]=z[e]||function(t){var e,n,r,i=t.match(R);for(e=0,n=i.length;e<n;e++)W[i[e]]?i[e]=W[i[e]]:i[e]=(r=i[e]).match(/\[[\s\S]/)?r.replace(/^\[|\]$/g,""):r.replace(/\\/g,"");return function(e){var r,a="";for(r=0;r<n;r++)a+=E(i[r])?i[r].call(e,t):i[r];return a}}(e),z[e](t)):t.localeData().invalidDate()}function V(t,e){var n=5;function r(t){return e.longDateFormat(t)||t}for(I.lastIndex=0;n>=0&&I.test(t);)t=t.replace(I,r),I.lastIndex=0,n-=1;return t}var $=/\d/,G=/\d\d/,J=/\d{3}/,X=/\d{4}/,Z=/[+-]?\d{6}/,K=/\d\d?/,Q=/\d\d\d\d?/,tt=/\d\d\d\d\d\d?/,et=/\d{1,3}/,nt=/\d{1,4}/,rt=/[+-]?\d{1,6}/,it=/\d+/,at=/[+-]?\d+/,ot=/Z|[+-]\d\d:?\d\d/gi,st=/Z|[+-]\d\d(?::?\d\d)?/gi,ut=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,ct={};function lt(t,e,n){ct[t]=E(e)?e:function(t,r){return t&&n?n:e}}function dt(t,e){return d(ct,t)?ct[t](e._strict,e._locale):new RegExp(ft(t.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(t,e,n,r,i){return e||n||r||i})))}function ft(t){return t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}var ht={};function _t(t,e){var n,r=e;for("string"==typeof t&&(t=[t]),u(e)&&(r=function(t,n){n[e]=L(t)}),n=0;n<t.length;n++)ht[t[n]]=r}function pt(t,e){_t(t,function(t,n,r,i){r._w=r._w||{},e(t,r._w,r,i)})}function mt(t,e,n){null!=e&&d(ht,t)&&ht[t](e,n._a,n,t)}var yt=0,gt=1,vt=2,Mt=3,bt=4,kt=5,Lt=6,wt=7,xt=8;function Tt(t){return Dt(t)?366:365}function Dt(t){return t%4==0&&t%100!=0||t%400==0}q("Y",0,0,function(){var t=this.year();return t<=9999?""+t:"+"+t}),q(0,["YY",2],0,function(){return this.year()%100}),q(0,["YYYY",4],0,"year"),q(0,["YYYYY",5],0,"year"),q(0,["YYYYYY",6,!0],0,"year"),O("year","y"),N("year",1),lt("Y",at),lt("YY",K,G),lt("YYYY",nt,X),lt("YYYYY",rt,Z),lt("YYYYYY",rt,Z),_t(["YYYYY","YYYYYY"],yt),_t("YYYY",function(t,e){e[yt]=2===t.length?i.parseTwoDigitYear(t):L(t)}),_t("YY",function(t,e){e[yt]=i.parseTwoDigitYear(t)}),_t("Y",function(t,e){e[yt]=parseInt(t,10)}),i.parseTwoDigitYear=function(t){return L(t)+(L(t)>68?1900:2e3)};var Yt,St=Et("FullYear",!0);function Et(t,e){return function(n){return null!=n?(Ct(this,t,n),i.updateOffset(this,e),this):At(this,t)}}function At(t,e){return t.isValid()?t._d["get"+(t._isUTC?"UTC":"")+e]():NaN}function Ct(t,e,n){t.isValid()&&!isNaN(n)&&("FullYear"===e&&Dt(t.year())&&1===t.month()&&29===t.date()?t._d["set"+(t._isUTC?"UTC":"")+e](n,t.month(),jt(n,t.month())):t._d["set"+(t._isUTC?"UTC":"")+e](n))}function jt(t,e){if(isNaN(t)||isNaN(e))return NaN;var n,r=(e%(n=12)+n)%n;return t+=(e-r)/12,1===r?Dt(t)?29:28:31-r%7%2}Yt=Array.prototype.indexOf?Array.prototype.indexOf:function(t){var e;for(e=0;e<this.length;++e)if(this[e]===t)return e;return-1},q("M",["MM",2],"Mo",function(){return this.month()+1}),q("MMM",0,0,function(t){return this.localeData().monthsShort(this,t)}),q("MMMM",0,0,function(t){return this.localeData().months(this,t)}),O("month","M"),N("month",8),lt("M",K),lt("MM",K,G),lt("MMM",function(t,e){return e.monthsShortRegex(t)}),lt("MMMM",function(t,e){return e.monthsRegex(t)}),_t(["M","MM"],function(t,e){e[gt]=L(t)-1}),_t(["MMM","MMMM"],function(t,e,n,r){var i=n._locale.monthsParse(t,r,n._strict);null!=i?e[gt]=i:_(n).invalidMonth=t});var Ot=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Ht="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),Pt="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_");function Ft(t,e){var n;if(!t.isValid())return t;if("string"==typeof e)if(/^\d+$/.test(e))e=L(e);else if(!u(e=t.localeData().monthsParse(e)))return t;return n=Math.min(t.date(),jt(t.year(),e)),t._d["set"+(t._isUTC?"UTC":"")+"Month"](e,n),t}function Nt(t){return null!=t?(Ft(this,t),i.updateOffset(this,!0),this):At(this,"Month")}var Bt=ut,Rt=ut;function It(){function t(t,e){return e.length-t.length}var e,n,r=[],i=[],a=[];for(e=0;e<12;e++)n=h([2e3,e]),r.push(this.monthsShort(n,"")),i.push(this.months(n,"")),a.push(this.months(n,"")),a.push(this.monthsShort(n,""));for(r.sort(t),i.sort(t),a.sort(t),e=0;e<12;e++)r[e]=ft(r[e]),i[e]=ft(i[e]);for(e=0;e<24;e++)a[e]=ft(a[e]);this._monthsRegex=new RegExp("^("+a.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+i.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+r.join("|")+")","i")}function zt(t){var e=new Date(Date.UTC.apply(null,arguments));return t<100&&t>=0&&isFinite(e.getUTCFullYear())&&e.setUTCFullYear(t),e}function Wt(t,e,n){var r=7+e-n,i=(7+zt(t,0,r).getUTCDay()-e)%7;return-i+r-1}function qt(t,e,n,r,i){var a,o,s=(7+n-r)%7,u=Wt(t,r,i),c=1+7*(e-1)+s+u;return c<=0?o=Tt(a=t-1)+c:c>Tt(t)?(a=t+1,o=c-Tt(t)):(a=t,o=c),{year:a,dayOfYear:o}}function Ut(t,e,n){var r,i,a=Wt(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?(i=t.year()-1,r=o+Vt(i,e,n)):o>Vt(t.year(),e,n)?(r=o-Vt(t.year(),e,n),i=t.year()+1):(i=t.year(),r=o),{week:r,year:i}}function Vt(t,e,n){var r=Wt(t,e,n),i=Wt(t+1,e,n);return(Tt(t)-r+i)/7}q("w",["ww",2],"wo","week"),q("W",["WW",2],"Wo","isoWeek"),O("week","w"),O("isoWeek","W"),N("week",5),N("isoWeek",5),lt("w",K),lt("ww",K,G),lt("W",K),lt("WW",K,G),pt(["w","ww","W","WW"],function(t,e,n,r){e[r.substr(0,1)]=L(t)}),q("d",0,"do","day"),q("dd",0,0,function(t){return this.localeData().weekdaysMin(this,t)}),q("ddd",0,0,function(t){return this.localeData().weekdaysShort(this,t)}),q("dddd",0,0,function(t){return this.localeData().weekdays(this,t)}),q("e",0,0,"weekday"),q("E",0,0,"isoWeekday"),O("day","d"),O("weekday","e"),O("isoWeekday","E"),N("day",11),N("weekday",11),N("isoWeekday",11),lt("d",K),lt("e",K),lt("E",K),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)}),pt(["dd","ddd","dddd"],function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:_(n).invalidWeekday=t}),pt(["d","e","E"],function(t,e,n,r){e[r]=L(t)});var $t="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Gt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Jt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Xt=ut,Zt=ut,Kt=ut;function Qt(){function t(t,e){return e.length-t.length}var e,n,r,i,a,o=[],s=[],u=[],c=[];for(e=0;e<7;e++)n=h([2e3,1]).day(e),r=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),a=this.weekdays(n,""),o.push(r),s.push(i),u.push(a),c.push(r),c.push(i),c.push(a);for(o.sort(t),s.sort(t),u.sort(t),c.sort(t),e=0;e<7;e++)s[e]=ft(s[e]),u[e]=ft(u[e]),c[e]=ft(c[e]);this._weekdaysRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function te(){return this.hours()%12||12}function ee(t,e){q(t,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)})}function ne(t,e){return e._meridiemParse}q("H",["HH",2],0,"hour"),q("h",["hh",2],0,te),q("k",["kk",2],0,function(){return this.hours()||24}),q("hmm",0,0,function(){return""+te.apply(this)+B(this.minutes(),2)}),q("hmmss",0,0,function(){return""+te.apply(this)+B(this.minutes(),2)+B(this.seconds(),2)}),q("Hmm",0,0,function(){return""+this.hours()+B(this.minutes(),2)}),q("Hmmss",0,0,function(){return""+this.hours()+B(this.minutes(),2)+B(this.seconds(),2)}),ee("a",!0),ee("A",!1),O("hour","h"),N("hour",13),lt("a",ne),lt("A",ne),lt("H",K),lt("h",K),lt("k",K),lt("HH",K,G),lt("hh",K,G),lt("kk",K,G),lt("hmm",Q),lt("hmmss",tt),lt("Hmm",Q),lt("Hmmss",tt),_t(["H","HH"],Mt),_t(["k","kk"],function(t,e,n){var r=L(t);e[Mt]=24===r?0:r}),_t(["a","A"],function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t}),_t(["h","hh"],function(t,e,n){e[Mt]=L(t),_(n).bigHour=!0}),_t("hmm",function(t,e,n){var r=t.length-2;e[Mt]=L(t.substr(0,r)),e[bt]=L(t.substr(r)),_(n).bigHour=!0}),_t("hmmss",function(t,e,n){var r=t.length-4,i=t.length-2;e[Mt]=L(t.substr(0,r)),e[bt]=L(t.substr(r,2)),e[kt]=L(t.substr(i)),_(n).bigHour=!0}),_t("Hmm",function(t,e,n){var r=t.length-2;e[Mt]=L(t.substr(0,r)),e[bt]=L(t.substr(r))}),_t("Hmmss",function(t,e,n){var r=t.length-4,i=t.length-2;e[Mt]=L(t.substr(0,r)),e[bt]=L(t.substr(r,2)),e[kt]=L(t.substr(i))});var re,ie=Et("Hours",!0),ae={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:Ht,monthsShort:Pt,week:{dow:0,doy:6},weekdays:$t,weekdaysMin:Jt,weekdaysShort:Gt,meridiemParse:/[ap]\.?m?\.?/i},oe={},se={};function ue(t){return t?t.toLowerCase().replace("_","-"):t}function ce(e){var r=null;if(!oe[e]&&void 0!==t&&t&&t.exports)try{r=re._abbr,n(178)("./"+e),le(r)}catch(t){}return oe[e]}function le(t,e){var n;return t&&((n=s(e)?fe(t):de(t,e))?re=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),re._abbr}function de(t,e){if(null!==e){var n,r=ae;if(e.abbr=t,null!=oe[t])S("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=oe[t]._config;else if(null!=e.parentLocale)if(null!=oe[e.parentLocale])r=oe[e.parentLocale]._config;else{if(null==(n=ce(e.parentLocale)))return se[e.parentLocale]||(se[e.parentLocale]=[]),se[e.parentLocale].push({name:t,config:e}),null;r=n._config}return oe[t]=new C(A(r,e)),se[t]&&se[t].forEach(function(t){de(t.name,t.config)}),le(t),oe[t]}return delete oe[t],null}function fe(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return re;if(!a(t)){if(e=ce(t))return e;t=[t]}return function(t){for(var e,n,r,i,a=0;a<t.length;){for(i=ue(t[a]).split("-"),e=i.length,n=(n=ue(t[a+1]))?n.split("-"):null;e>0;){if(r=ce(i.slice(0,e).join("-")))return r;if(n&&n.length>=e&&w(i,n,!0)>=e-1)break;e--}a++}return re}(t)}function he(t){var e,n=t._a;return n&&-2===_(t).overflow&&(e=n[gt]<0||n[gt]>11?gt:n[vt]<1||n[vt]>jt(n[yt],n[gt])?vt:n[Mt]<0||n[Mt]>24||24===n[Mt]&&(0!==n[bt]||0!==n[kt]||0!==n[Lt])?Mt:n[bt]<0||n[bt]>59?bt:n[kt]<0||n[kt]>59?kt:n[Lt]<0||n[Lt]>999?Lt:-1,_(t)._overflowDayOfYear&&(e<yt||e>vt)&&(e=vt),_(t)._overflowWeeks&&-1===e&&(e=wt),_(t)._overflowWeekday&&-1===e&&(e=xt),_(t).overflow=e),t}function _e(t,e,n){return null!=t?t:null!=e?e:n}function pe(t){var e,n,r,a,o,s=[];if(!t._d){for(r=function(t){var e=new Date(i.now());return t._useUTC?[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()]:[e.getFullYear(),e.getMonth(),e.getDate()]}(t),t._w&&null==t._a[vt]&&null==t._a[gt]&&function(t){var e,n,r,i,a,o,s,u;if(null!=(e=t._w).GG||null!=e.W||null!=e.E)a=1,o=4,n=_e(e.GG,t._a[yt],Ut(Ee(),1,4).year),r=_e(e.W,1),((i=_e(e.E,1))<1||i>7)&&(u=!0);else{a=t._locale._week.dow,o=t._locale._week.doy;var c=Ut(Ee(),a,o);n=_e(e.gg,t._a[yt],c.year),r=_e(e.w,c.week),null!=e.d?((i=e.d)<0||i>6)&&(u=!0):null!=e.e?(i=e.e+a,(e.e<0||e.e>6)&&(u=!0)):i=a}r<1||r>Vt(n,a,o)?_(t)._overflowWeeks=!0:null!=u?_(t)._overflowWeekday=!0:(s=qt(n,r,i,a,o),t._a[yt]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=_e(t._a[yt],r[yt]),(t._dayOfYear>Tt(o)||0===t._dayOfYear)&&(_(t)._overflowDayOfYear=!0),n=zt(o,0,t._dayOfYear),t._a[gt]=n.getUTCMonth(),t._a[vt]=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[Mt]&&0===t._a[bt]&&0===t._a[kt]&&0===t._a[Lt]&&(t._nextDay=!0,t._a[Mt]=0),t._d=(t._useUTC?zt:function(t,e,n,r,i,a,o){var s=new Date(t,e,n,r,i,a,o);return t<100&&t>=0&&isFinite(s.getFullYear())&&s.setFullYear(t),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[Mt]=24),t._w&&void 0!==t._w.d&&t._w.d!==a&&(_(t).weekdayMismatch=!0)}}var me=/^\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)?)?$/,ye=/^\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)?)?$/,ge=/Z|[+-]\d\d(?::?\d\d)?/,ve=[["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}/]],Me=[["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/]],be=/^\/?Date\((\-?\d+)/i;function ke(t){var e,n,r,i,a,o,s=t._i,u=me.exec(s)||ye.exec(s);if(u){for(_(t).iso=!0,e=0,n=ve.length;e<n;e++)if(ve[e][1].exec(u[1])){i=ve[e][0],r=!1!==ve[e][2];break}if(null==i)return void(t._isValid=!1);if(u[3]){for(e=0,n=Me.length;e<n;e++)if(Me[e][1].exec(u[3])){a=(u[2]||" ")+Me[e][0];break}if(null==a)return void(t._isValid=!1)}if(!r&&null!=a)return void(t._isValid=!1);if(u[4]){if(!ge.exec(u[4]))return void(t._isValid=!1);o="Z"}t._f=i+(a||"")+(o||""),De(t)}else t._isValid=!1}var Le=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;function we(t,e,n,r,i,a){var o=[function(t){var e=parseInt(t,10);return e<=49?2e3+e:e<=999?1900+e:e}(t),Pt.indexOf(e),parseInt(n,10),parseInt(r,10),parseInt(i,10)];return a&&o.push(parseInt(a,10)),o}var xe={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Te(t){var e=Le.exec(t._i.replace(/\([^)]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim());if(e){var n=we(e[4],e[3],e[2],e[5],e[6],e[7]);if(!function(t,e,n){if(t){var r=Gt.indexOf(t),i=new Date(e[0],e[1],e[2]).getDay();if(r!==i)return _(n).weekdayMismatch=!0,n._isValid=!1,!1}return!0}(e[1],n,t))return;t._a=n,t._tzm=function(t,e,n){if(t)return xe[t];if(e)return 0;var r=parseInt(n,10),i=r%100,a=(r-i)/100;return 60*a+i}(e[8],e[9],e[10]),t._d=zt.apply(null,t._a),t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),_(t).rfc2822=!0}else t._isValid=!1}function De(t){if(t._f!==i.ISO_8601)if(t._f!==i.RFC_2822){t._a=[],_(t).empty=!0;var e,n,r,a,o,s=""+t._i,u=s.length,c=0;for(r=V(t._f,t._locale).match(R)||[],e=0;e<r.length;e++)a=r[e],(n=(s.match(dt(a,t))||[])[0])&&((o=s.substr(0,s.indexOf(n))).length>0&&_(t).unusedInput.push(o),s=s.slice(s.indexOf(n)+n.length),c+=n.length),W[a]?(n?_(t).empty=!1:_(t).unusedTokens.push(a),mt(a,n,t)):t._strict&&!n&&_(t).unusedTokens.push(a);_(t).charsLeftOver=u-c,s.length>0&&_(t).unusedInput.push(s),t._a[Mt]<=12&&!0===_(t).bigHour&&t._a[Mt]>0&&(_(t).bigHour=void 0),_(t).parsedDateParts=t._a.slice(0),_(t).meridiem=t._meridiem,t._a[Mt]=(l=t._locale,d=t._a[Mt],null==(f=t._meridiem)?d:null!=l.meridiemHour?l.meridiemHour(d,f):null!=l.isPM?((h=l.isPM(f))&&d<12&&(d+=12),h||12!==d||(d=0),d):d),pe(t),he(t)}else Te(t);else ke(t);var l,d,f,h}function Ye(t){var e=t._i,n=t._f;return t._locale=t._locale||fe(t._l),null===e||void 0===n&&""===e?m({nullInput:!0}):("string"==typeof e&&(t._i=e=t._locale.preparse(e)),b(e)?new M(he(e)):(c(e)?t._d=e:a(n)?function(t){var e,n,r,i,a;if(0===t._f.length)return _(t).invalidFormat=!0,void(t._d=new Date(NaN));for(i=0;i<t._f.length;i++)a=0,e=g({},t),null!=t._useUTC&&(e._useUTC=t._useUTC),e._f=t._f[i],De(e),p(e)&&(a+=_(e).charsLeftOver,a+=10*_(e).unusedTokens.length,_(e).score=a,(null==r||a<r)&&(r=a,n=e));f(t,n||e)}(t):n?De(t):function(t){var e=t._i;s(e)?t._d=new Date(i.now()):c(e)?t._d=new Date(e.valueOf()):"string"==typeof e?function(t){var e=be.exec(t._i);null===e?(ke(t),!1===t._isValid&&(delete t._isValid,Te(t),!1===t._isValid&&(delete t._isValid,i.createFromInputFallback(t)))):t._d=new Date(+e[1])}(t):a(e)?(t._a=l(e.slice(0),function(t){return parseInt(t,10)}),pe(t)):o(e)?function(t){if(!t._d){var e=P(t._i);t._a=l([e.year,e.month,e.day||e.date,e.hour,e.minute,e.second,e.millisecond],function(t){return t&&parseInt(t,10)}),pe(t)}}(t):u(e)?t._d=new Date(e):i.createFromInputFallback(t)}(t),p(t)||(t._d=null),t))}function Se(t,e,n,r,i){var s,u={};return!0!==n&&!1!==n||(r=n,n=void 0),(o(t)&&function(t){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(t).length;var e;for(e in t)if(t.hasOwnProperty(e))return!1;return!0}(t)||a(t)&&0===t.length)&&(t=void 0),u._isAMomentObject=!0,u._useUTC=u._isUTC=i,u._l=n,u._i=t,u._f=e,u._strict=r,(s=new M(he(Ye(u))))._nextDay&&(s.add(1,"d"),s._nextDay=void 0),s}function Ee(t,e,n,r){return Se(t,e,n,r,!1)}i.createFromInputFallback=T("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(t){t._d=new Date(t._i+(t._useUTC?" UTC":""))}),i.ISO_8601=function(){},i.RFC_2822=function(){};var Ae=T("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=Ee.apply(null,arguments);return this.isValid()&&t.isValid()?t<this?this:t:m()}),Ce=T("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var t=Ee.apply(null,arguments);return this.isValid()&&t.isValid()?t>this?this:t:m()});function je(t,e){var n,r;if(1===e.length&&a(e[0])&&(e=e[0]),!e.length)return Ee();for(n=e[0],r=1;r<e.length;++r)e[r].isValid()&&!e[r][t](n)||(n=e[r]);return n}var Oe=["year","quarter","month","week","day","hour","minute","second","millisecond"];function He(t){var e=P(t),n=e.year||0,r=e.quarter||0,i=e.month||0,a=e.week||0,o=e.day||0,s=e.hour||0,u=e.minute||0,c=e.second||0,l=e.millisecond||0;this._isValid=function(t){for(var e in t)if(-1===Yt.call(Oe,e)||null!=t[e]&&isNaN(t[e]))return!1;for(var n=!1,r=0;r<Oe.length;++r)if(t[Oe[r]]){if(n)return!1;parseFloat(t[Oe[r]])!==L(t[Oe[r]])&&(n=!0)}return!0}(e),this._milliseconds=+l+1e3*c+6e4*u+1e3*s*60*60,this._days=+o+7*a,this._months=+i+3*r+12*n,this._data={},this._locale=fe(),this._bubble()}function Pe(t){return t instanceof He}function Fe(t){return t<0?-1*Math.round(-1*t):Math.round(t)}function Ne(t,e){q(t,0,0,function(){var t=this.utcOffset(),n="+";return t<0&&(t=-t,n="-"),n+B(~~(t/60),2)+e+B(~~t%60,2)})}Ne("Z",":"),Ne("ZZ",""),lt("Z",st),lt("ZZ",st),_t(["Z","ZZ"],function(t,e,n){n._useUTC=!0,n._tzm=Re(st,t)});var Be=/([\+\-]|\d\d)/gi;function Re(t,e){var n=(e||"").match(t);if(null===n)return null;var r=n[n.length-1]||[],i=(r+"").match(Be)||["-",0,0],a=60*i[1]+L(i[2]);return 0===a?0:"+"===i[0]?a:-a}function Ie(t,e){var n,r;return e._isUTC?(n=e.clone(),r=(b(t)||c(t)?t.valueOf():Ee(t).valueOf())-n.valueOf(),n._d.setTime(n._d.valueOf()+r),i.updateOffset(n,!1),n):Ee(t).local()}function ze(t){return 15*-Math.round(t._d.getTimezoneOffset()/15)}function We(){return!!this.isValid()&&this._isUTC&&0===this._offset}i.updateOffset=function(){};var qe=/^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/,Ue=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Ve(t,e){var n,r,i,a,o,s,c=t,l=null;return Pe(t)?c={ms:t._milliseconds,d:t._days,M:t._months}:u(t)?(c={},e?c[e]=t:c.milliseconds=t):(l=qe.exec(t))?(n="-"===l[1]?-1:1,c={y:0,d:L(l[vt])*n,h:L(l[Mt])*n,m:L(l[bt])*n,s:L(l[kt])*n,ms:L(Fe(1e3*l[Lt]))*n}):(l=Ue.exec(t))?(n="-"===l[1]?-1:(l[1],1),c={y:$e(l[2],n),M:$e(l[3],n),w:$e(l[4],n),d:$e(l[5],n),h:$e(l[6],n),m:$e(l[7],n),s:$e(l[8],n)}):null==c?c={}:"object"==typeof c&&("from"in c||"to"in c)&&(a=Ee(c.from),o=Ee(c.to),i=a.isValid()&&o.isValid()?(o=Ie(o,a),a.isBefore(o)?s=Ge(a,o):((s=Ge(o,a)).milliseconds=-s.milliseconds,s.months=-s.months),s):{milliseconds:0,months:0},(c={}).ms=i.milliseconds,c.M=i.months),r=new He(c),Pe(t)&&d(t,"_locale")&&(r._locale=t._locale),r}function $e(t,e){var n=t&&parseFloat(t.replace(",","."));return(isNaN(n)?0:n)*e}function Ge(t,e){var n={milliseconds:0,months:0};return n.months=e.month()-t.month()+12*(e.year()-t.year()),t.clone().add(n.months,"M").isAfter(e)&&--n.months,n.milliseconds=+e-+t.clone().add(n.months,"M"),n}function Je(t,e){return function(n,r){var i;return null===r||isNaN(+r)||(S(e,"moment()."+e+"(period, number) is deprecated. Please use moment()."+e+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),i=n,n=r,r=i),Xe(this,Ve(n="string"==typeof n?+n:n,r),t),this}}function Xe(t,e,n,r){var a=e._milliseconds,o=Fe(e._days),s=Fe(e._months);t.isValid()&&(r=null==r||r,s&&Ft(t,At(t,"Month")+s*n),o&&Ct(t,"Date",At(t,"Date")+o*n),a&&t._d.setTime(t._d.valueOf()+a*n),r&&i.updateOffset(t,o||s))}Ve.fn=He.prototype,Ve.invalid=function(){return Ve(NaN)};var Ze=Je(1,"add"),Ke=Je(-1,"subtract");function Qe(t,e){var n,r,i=12*(e.year()-t.year())+(e.month()-t.month()),a=t.clone().add(i,"months");return e-a<0?(n=t.clone().add(i-1,"months"),r=(e-a)/(a-n)):(n=t.clone().add(i+1,"months"),r=(e-a)/(n-a)),-(i+r)||0}function tn(t){var e;return void 0===t?this._locale._abbr:(null!=(e=fe(t))&&(this._locale=e),this)}i.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",i.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var en=T("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(t){return void 0===t?this.localeData():this.locale(t)});function nn(){return this._locale}function rn(t,e){q(0,[t,t.length],0,e)}function an(t,e,n,r,i){var a;return null==t?Ut(this,r,i).year:(a=Vt(t,r,i),e>a&&(e=a),function(t,e,n,r,i){var a=qt(t,e,n,r,i),o=zt(a.year,0,a.dayOfYear);return this.year(o.getUTCFullYear()),this.month(o.getUTCMonth()),this.date(o.getUTCDate()),this}.call(this,t,e,n,r,i))}q(0,["gg",2],0,function(){return this.weekYear()%100}),q(0,["GG",2],0,function(){return this.isoWeekYear()%100}),rn("gggg","weekYear"),rn("ggggg","weekYear"),rn("GGGG","isoWeekYear"),rn("GGGGG","isoWeekYear"),O("weekYear","gg"),O("isoWeekYear","GG"),N("weekYear",1),N("isoWeekYear",1),lt("G",at),lt("g",at),lt("GG",K,G),lt("gg",K,G),lt("GGGG",nt,X),lt("gggg",nt,X),lt("GGGGG",rt,Z),lt("ggggg",rt,Z),pt(["gggg","ggggg","GGGG","GGGGG"],function(t,e,n,r){e[r.substr(0,2)]=L(t)}),pt(["gg","GG"],function(t,e,n,r){e[r]=i.parseTwoDigitYear(t)}),q("Q",0,"Qo","quarter"),O("quarter","Q"),N("quarter",7),lt("Q",$),_t("Q",function(t,e){e[gt]=3*(L(t)-1)}),q("D",["DD",2],"Do","date"),O("date","D"),N("date",9),lt("D",K),lt("DD",K,G),lt("Do",function(t,e){return t?e._dayOfMonthOrdinalParse||e._ordinalParse:e._dayOfMonthOrdinalParseLenient}),_t(["D","DD"],vt),_t("Do",function(t,e){e[vt]=L(t.match(K)[0])});var on=Et("Date",!0);q("DDD",["DDDD",3],"DDDo","dayOfYear"),O("dayOfYear","DDD"),N("dayOfYear",4),lt("DDD",et),lt("DDDD",J),_t(["DDD","DDDD"],function(t,e,n){n._dayOfYear=L(t)}),q("m",["mm",2],0,"minute"),O("minute","m"),N("minute",14),lt("m",K),lt("mm",K,G),_t(["m","mm"],bt);var sn=Et("Minutes",!1);q("s",["ss",2],0,"second"),O("second","s"),N("second",15),lt("s",K),lt("ss",K,G),_t(["s","ss"],kt);var un,cn=Et("Seconds",!1);for(q("S",0,0,function(){return~~(this.millisecond()/100)}),q(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),q(0,["SSS",3],0,"millisecond"),q(0,["SSSS",4],0,function(){return 10*this.millisecond()}),q(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),q(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),q(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),q(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),q(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),O("millisecond","ms"),N("millisecond",16),lt("S",et,$),lt("SS",et,G),lt("SSS",et,J),un="SSSS";un.length<=9;un+="S")lt(un,it);function ln(t,e){e[Lt]=L(1e3*("0."+t))}for(un="S";un.length<=9;un+="S")_t(un,ln);var dn=Et("Milliseconds",!1);q("z",0,0,"zoneAbbr"),q("zz",0,0,"zoneName");var fn=M.prototype;function hn(t){return t}fn.add=Ze,fn.calendar=function(t,e){var n=t||Ee(),r=Ie(n,this).startOf("day"),a=i.calendarFormat(this,r)||"sameElse",o=e&&(E(e[a])?e[a].call(this,n):e[a]);return this.format(o||this.localeData().calendar(a,this,Ee(n)))},fn.clone=function(){return new M(this)},fn.diff=function(t,e,n){var r,i,a;if(!this.isValid())return NaN;if(!(r=Ie(t,this)).isValid())return NaN;switch(i=6e4*(r.utcOffset()-this.utcOffset()),e=H(e)){case"year":a=Qe(this,r)/12;break;case"month":a=Qe(this,r);break;case"quarter":a=Qe(this,r)/3;break;case"second":a=(this-r)/1e3;break;case"minute":a=(this-r)/6e4;break;case"hour":a=(this-r)/36e5;break;case"day":a=(this-r-i)/864e5;break;case"week":a=(this-r-i)/6048e5;break;default:a=this-r}return n?a:k(a)},fn.endOf=function(t){return void 0===(t=H(t))||"millisecond"===t?this:("date"===t&&(t="day"),this.startOf(t).add(1,"isoWeek"===t?"week":t).subtract(1,"ms"))},fn.format=function(t){t||(t=this.isUtc()?i.defaultFormatUtc:i.defaultFormat);var e=U(this,t);return this.localeData().postformat(e)},fn.from=function(t,e){return this.isValid()&&(b(t)&&t.isValid()||Ee(t).isValid())?Ve({to:this,from:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},fn.fromNow=function(t){return this.from(Ee(),t)},fn.to=function(t,e){return this.isValid()&&(b(t)&&t.isValid()||Ee(t).isValid())?Ve({from:this,to:t}).locale(this.locale()).humanize(!e):this.localeData().invalidDate()},fn.toNow=function(t){return this.to(Ee(),t)},fn.get=function(t){return E(this[t=H(t)])?this[t]():this},fn.invalidAt=function(){return _(this).overflow},fn.isAfter=function(t,e){var n=b(t)?t:Ee(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=H(s(e)?"millisecond":e))?this.valueOf()>n.valueOf():n.valueOf()<this.clone().startOf(e).valueOf())},fn.isBefore=function(t,e){var n=b(t)?t:Ee(t);return!(!this.isValid()||!n.isValid())&&("millisecond"===(e=H(s(e)?"millisecond":e))?this.valueOf()<n.valueOf():this.clone().endOf(e).valueOf()<n.valueOf())},fn.isBetween=function(t,e,n,r){return("("===(r=r||"()")[0]?this.isAfter(t,n):!this.isBefore(t,n))&&(")"===r[1]?this.isBefore(e,n):!this.isAfter(e,n))},fn.isSame=function(t,e){var n,r=b(t)?t:Ee(t);return!(!this.isValid()||!r.isValid())&&("millisecond"===(e=H(e||"millisecond"))?this.valueOf()===r.valueOf():(n=r.valueOf(),this.clone().startOf(e).valueOf()<=n&&n<=this.clone().endOf(e).valueOf()))},fn.isSameOrAfter=function(t,e){return this.isSame(t,e)||this.isAfter(t,e)},fn.isSameOrBefore=function(t,e){return this.isSame(t,e)||this.isBefore(t,e)},fn.isValid=function(){return p(this)},fn.lang=en,fn.locale=tn,fn.localeData=nn,fn.max=Ce,fn.min=Ae,fn.parsingFlags=function(){return f({},_(this))},fn.set=function(t,e){if("object"==typeof t)for(var n=function(t){var e=[];for(var n in t)e.push({unit:n,priority:F[n]});return e.sort(function(t,e){return t.priority-e.priority}),e}(t=P(t)),r=0;r<n.length;r++)this[n[r].unit](t[n[r].unit]);else if(E(this[t=H(t)]))return this[t](e);return this},fn.startOf=function(t){switch(t=H(t)){case"year":this.month(0);case"quarter":case"month":this.date(1);case"week":case"isoWeek":case"day":case"date":this.hours(0);case"hour":this.minutes(0);case"minute":this.seconds(0);case"second":this.milliseconds(0)}return"week"===t&&this.weekday(0),"isoWeek"===t&&this.isoWeekday(1),"quarter"===t&&this.month(3*Math.floor(this.month()/3)),this},fn.subtract=Ke,fn.toArray=function(){var t=this;return[t.year(),t.month(),t.date(),t.hour(),t.minute(),t.second(),t.millisecond()]},fn.toObject=function(){var t=this;return{years:t.year(),months:t.month(),date:t.date(),hours:t.hours(),minutes:t.minutes(),seconds:t.seconds(),milliseconds:t.milliseconds()}},fn.toDate=function(){return new Date(this.valueOf())},fn.toISOString=function(t){if(!this.isValid())return null;var e=!0!==t,n=e?this.clone().utc():this;return n.year()<0||n.year()>9999?U(n,e?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):E(Date.prototype.toISOString)?e?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",U(n,"Z")):U(n,e?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},fn.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var t="moment",e="";this.isLocal()||(t=0===this.utcOffset()?"moment.utc":"moment.parseZone",e="Z");var n="["+t+'("]',r=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",i=e+'[")]';return this.format(n+r+"-MM-DD[T]HH:mm:ss.SSS"+i)},fn.toJSON=function(){return this.isValid()?this.toISOString():null},fn.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},fn.unix=function(){return Math.floor(this.valueOf()/1e3)},fn.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},fn.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},fn.year=St,fn.isLeapYear=function(){return Dt(this.year())},fn.weekYear=function(t){return an.call(this,t,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)},fn.isoWeekYear=function(t){return an.call(this,t,this.isoWeek(),this.isoWeekday(),1,4)},fn.quarter=fn.quarters=function(t){return null==t?Math.ceil((this.month()+1)/3):this.month(3*(t-1)+this.month()%3)},fn.month=Nt,fn.daysInMonth=function(){return jt(this.year(),this.month())},fn.week=fn.weeks=function(t){var e=this.localeData().week(this);return null==t?e:this.add(7*(t-e),"d")},fn.isoWeek=fn.isoWeeks=function(t){var e=Ut(this,1,4).week;return null==t?e:this.add(7*(t-e),"d")},fn.weeksInYear=function(){var t=this.localeData()._week;return Vt(this.year(),t.dow,t.doy)},fn.isoWeeksInYear=function(){return Vt(this.year(),1,4)},fn.date=on,fn.day=fn.days=function(t){if(!this.isValid())return null!=t?this:NaN;var e=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=t?(t=function(t,e){return"string"!=typeof t?t:isNaN(t)?"number"==typeof(t=e.weekdaysParse(t))?t:null:parseInt(t,10)}(t,this.localeData()),this.add(t-e,"d")):e},fn.weekday=function(t){if(!this.isValid())return null!=t?this:NaN;var e=(this.day()+7-this.localeData()._week.dow)%7;return null==t?e:this.add(t-e,"d")},fn.isoWeekday=function(t){if(!this.isValid())return null!=t?this:NaN;if(null!=t){var e=function(t,e){return"string"==typeof t?e.weekdaysParse(t)%7||7:isNaN(t)?null:t}(t,this.localeData());return this.day(this.day()%7?e:e-7)}return this.day()||7},fn.dayOfYear=function(t){var e=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==t?e:this.add(t-e,"d")},fn.hour=fn.hours=ie,fn.minute=fn.minutes=sn,fn.second=fn.seconds=cn,fn.millisecond=fn.milliseconds=dn,fn.utcOffset=function(t,e,n){var r,a=this._offset||0;if(!this.isValid())return null!=t?this:NaN;if(null!=t){if("string"==typeof t){if(null===(t=Re(st,t)))return this}else Math.abs(t)<16&&!n&&(t*=60);return!this._isUTC&&e&&(r=ze(this)),this._offset=t,this._isUTC=!0,null!=r&&this.add(r,"m"),a!==t&&(!e||this._changeInProgress?Xe(this,Ve(t-a,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,i.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?a:ze(this)},fn.utc=function(t){return this.utcOffset(0,t)},fn.local=function(t){return this._isUTC&&(this.utcOffset(0,t),this._isUTC=!1,t&&this.subtract(ze(this),"m")),this},fn.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var t=Re(ot,this._i);null!=t?this.utcOffset(t):this.utcOffset(0,!0)}return this},fn.hasAlignedHourOffset=function(t){return!!this.isValid()&&(t=t?Ee(t).utcOffset():0,(this.utcOffset()-t)%60==0)},fn.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},fn.isLocal=function(){return!!this.isValid()&&!this._isUTC},fn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},fn.isUtc=We,fn.isUTC=We,fn.zoneAbbr=function(){return this._isUTC?"UTC":""},fn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},fn.dates=T("dates accessor is deprecated. Use date instead.",on),fn.months=T("months accessor is deprecated. Use month instead",Nt),fn.years=T("years accessor is deprecated. Use year instead",St),fn.zone=T("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()}),fn.isDSTShifted=T("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(g(t,this),(t=Ye(t))._a){var e=t._isUTC?h(t._a):Ee(t._a);this._isDSTShifted=this.isValid()&&w(t._a,e.toArray())>0}else this._isDSTShifted=!1;return this._isDSTShifted});var _n=C.prototype;function pn(t,e,n,r){var i=fe(),a=h().set(r,e);return i[n](a,t)}function mn(t,e,n){if(u(t)&&(e=t,t=void 0),t=t||"",null!=e)return pn(t,e,n,"month");var r,i=[];for(r=0;r<12;r++)i[r]=pn(t,r,n,"month");return i}function yn(t,e,n,r){"boolean"==typeof t?(u(e)&&(n=e,e=void 0),e=e||""):(n=e=t,t=!1,u(e)&&(n=e,e=void 0),e=e||"");var i,a=fe(),o=t?a._week.dow:0;if(null!=n)return pn(e,(n+o)%7,r,"day");var s=[];for(i=0;i<7;i++)s[i]=pn(e,(i+o)%7,r,"day");return s}_n.calendar=function(t,e,n){var r=this._calendar[t]||this._calendar.sameElse;return E(r)?r.call(e,n):r},_n.longDateFormat=function(t){var e=this._longDateFormat[t],n=this._longDateFormat[t.toUpperCase()];return e||!n?e:(this._longDateFormat[t]=n.replace(/MMMM|MM|DD|dddd/g,function(t){return t.slice(1)}),this._longDateFormat[t])},_n.invalidDate=function(){return this._invalidDate},_n.ordinal=function(t){return this._ordinal.replace("%d",t)},_n.preparse=hn,_n.postformat=hn,_n.relativeTime=function(t,e,n,r){var i=this._relativeTime[n];return E(i)?i(t,e,n,r):i.replace(/%d/i,t)},_n.pastFuture=function(t,e){var n=this._relativeTime[t>0?"future":"past"];return E(n)?n(e):n.replace(/%s/i,e)},_n.set=function(t){var e,n;for(n in t)E(e=t[n])?this[n]=e:this["_"+n]=e;this._config=t,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},_n.months=function(t,e){return t?a(this._months)?this._months[t.month()]:this._months[(this._months.isFormat||Ot).test(e)?"format":"standalone"][t.month()]:a(this._months)?this._months:this._months.standalone},_n.monthsShort=function(t,e){return t?a(this._monthsShort)?this._monthsShort[t.month()]:this._monthsShort[Ot.test(e)?"format":"standalone"][t.month()]:a(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},_n.monthsParse=function(t,e,n){var r,i,a;if(this._monthsParseExact)return function(t,e,n){var r,i,a,o=t.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],r=0;r<12;++r)a=h([2e3,r]),this._shortMonthsParse[r]=this.monthsShort(a,"").toLocaleLowerCase(),this._longMonthsParse[r]=this.months(a,"").toLocaleLowerCase();return n?"MMM"===e?-1!==(i=Yt.call(this._shortMonthsParse,o))?i:null:-1!==(i=Yt.call(this._longMonthsParse,o))?i:null:"MMM"===e?-1!==(i=Yt.call(this._shortMonthsParse,o))?i:-1!==(i=Yt.call(this._longMonthsParse,o))?i:null:-1!==(i=Yt.call(this._longMonthsParse,o))?i:-1!==(i=Yt.call(this._shortMonthsParse,o))?i:null}.call(this,t,e,n);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),r=0;r<12;r++){if(i=h([2e3,r]),n&&!this._longMonthsParse[r]&&(this._longMonthsParse[r]=new RegExp("^"+this.months(i,"").replace(".","")+"$","i"),this._shortMonthsParse[r]=new RegExp("^"+this.monthsShort(i,"").replace(".","")+"$","i")),n||this._monthsParse[r]||(a="^"+this.months(i,"")+"|^"+this.monthsShort(i,""),this._monthsParse[r]=new RegExp(a.replace(".",""),"i")),n&&"MMMM"===e&&this._longMonthsParse[r].test(t))return r;if(n&&"MMM"===e&&this._shortMonthsParse[r].test(t))return r;if(!n&&this._monthsParse[r].test(t))return r}},_n.monthsRegex=function(t){return this._monthsParseExact?(d(this,"_monthsRegex")||It.call(this),t?this._monthsStrictRegex:this._monthsRegex):(d(this,"_monthsRegex")||(this._monthsRegex=Rt),this._monthsStrictRegex&&t?this._monthsStrictRegex:this._monthsRegex)},_n.monthsShortRegex=function(t){return this._monthsParseExact?(d(this,"_monthsRegex")||It.call(this),t?this._monthsShortStrictRegex:this._monthsShortRegex):(d(this,"_monthsShortRegex")||(this._monthsShortRegex=Bt),this._monthsShortStrictRegex&&t?this._monthsShortStrictRegex:this._monthsShortRegex)},_n.week=function(t){return Ut(t,this._week.dow,this._week.doy).week},_n.firstDayOfYear=function(){return this._week.doy},_n.firstDayOfWeek=function(){return this._week.dow},_n.weekdays=function(t,e){return t?a(this._weekdays)?this._weekdays[t.day()]:this._weekdays[this._weekdays.isFormat.test(e)?"format":"standalone"][t.day()]:a(this._weekdays)?this._weekdays:this._weekdays.standalone},_n.weekdaysMin=function(t){return t?this._weekdaysMin[t.day()]:this._weekdaysMin},_n.weekdaysShort=function(t){return t?this._weekdaysShort[t.day()]:this._weekdaysShort},_n.weekdaysParse=function(t,e,n){var r,i,a;if(this._weekdaysParseExact)return function(t,e,n){var r,i,a,o=t.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],r=0;r<7;++r)a=h([2e3,1]).day(r),this._minWeekdaysParse[r]=this.weekdaysMin(a,"").toLocaleLowerCase(),this._shortWeekdaysParse[r]=this.weekdaysShort(a,"").toLocaleLowerCase(),this._weekdaysParse[r]=this.weekdays(a,"").toLocaleLowerCase();return n?"dddd"===e?-1!==(i=Yt.call(this._weekdaysParse,o))?i:null:"ddd"===e?-1!==(i=Yt.call(this._shortWeekdaysParse,o))?i:null:-1!==(i=Yt.call(this._minWeekdaysParse,o))?i:null:"dddd"===e?-1!==(i=Yt.call(this._weekdaysParse,o))?i:-1!==(i=Yt.call(this._shortWeekdaysParse,o))?i:-1!==(i=Yt.call(this._minWeekdaysParse,o))?i:null:"ddd"===e?-1!==(i=Yt.call(this._shortWeekdaysParse,o))?i:-1!==(i=Yt.call(this._weekdaysParse,o))?i:-1!==(i=Yt.call(this._minWeekdaysParse,o))?i:null:-1!==(i=Yt.call(this._minWeekdaysParse,o))?i:-1!==(i=Yt.call(this._weekdaysParse,o))?i:-1!==(i=Yt.call(this._shortWeekdaysParse,o))?i:null}.call(this,t,e,n);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),r=0;r<7;r++){if(i=h([2e3,1]).day(r),n&&!this._fullWeekdaysParse[r]&&(this._fullWeekdaysParse[r]=new RegExp("^"+this.weekdays(i,"").replace(".",".?")+"$","i"),this._shortWeekdaysParse[r]=new RegExp("^"+this.weekdaysShort(i,"").replace(".",".?")+"$","i"),this._minWeekdaysParse[r]=new RegExp("^"+this.weekdaysMin(i,"").replace(".",".?")+"$","i")),this._weekdaysParse[r]||(a="^"+this.weekdays(i,"")+"|^"+this.weekdaysShort(i,"")+"|^"+this.weekdaysMin(i,""),this._weekdaysParse[r]=new RegExp(a.replace(".",""),"i")),n&&"dddd"===e&&this._fullWeekdaysParse[r].test(t))return r;if(n&&"ddd"===e&&this._shortWeekdaysParse[r].test(t))return r;if(n&&"dd"===e&&this._minWeekdaysParse[r].test(t))return r;if(!n&&this._weekdaysParse[r].test(t))return r}},_n.weekdaysRegex=function(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Qt.call(this),t?this._weekdaysStrictRegex:this._weekdaysRegex):(d(this,"_weekdaysRegex")||(this._weekdaysRegex=Xt),this._weekdaysStrictRegex&&t?this._weekdaysStrictRegex:this._weekdaysRegex)},_n.weekdaysShortRegex=function(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Qt.call(this),t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(d(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Zt),this._weekdaysShortStrictRegex&&t?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},_n.weekdaysMinRegex=function(t){return this._weekdaysParseExact?(d(this,"_weekdaysRegex")||Qt.call(this),t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(d(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Kt),this._weekdaysMinStrictRegex&&t?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},_n.isPM=function(t){return"p"===(t+"").toLowerCase().charAt(0)},_n.meridiem=function(t,e,n){return t>11?n?"pm":"PM":n?"am":"AM"},le("en",{dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,n=1===L(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}}),i.lang=T("moment.lang is deprecated. Use moment.locale instead.",le),i.langData=T("moment.langData is deprecated. Use moment.localeData instead.",fe);var gn=Math.abs;function vn(t,e,n,r){var i=Ve(e,n);return t._milliseconds+=r*i._milliseconds,t._days+=r*i._days,t._months+=r*i._months,t._bubble()}function Mn(t){return t<0?Math.floor(t):Math.ceil(t)}function bn(t){return 4800*t/146097}function kn(t){return 146097*t/4800}function Ln(t){return function(){return this.as(t)}}var wn=Ln("ms"),xn=Ln("s"),Tn=Ln("m"),Dn=Ln("h"),Yn=Ln("d"),Sn=Ln("w"),En=Ln("M"),An=Ln("y");function Cn(t){return function(){return this.isValid()?this._data[t]:NaN}}var jn=Cn("milliseconds"),On=Cn("seconds"),Hn=Cn("minutes"),Pn=Cn("hours"),Fn=Cn("days"),Nn=Cn("months"),Bn=Cn("years"),Rn=Math.round,In={ss:44,s:45,m:45,h:22,d:26,M:11},zn=Math.abs;function Wn(t){return(t>0)-(t<0)||+t}function qn(){if(!this.isValid())return this.localeData().invalidDate();var t,e,n=zn(this._milliseconds)/1e3,r=zn(this._days),i=zn(this._months);t=k(n/60),e=k(t/60),n%=60,t%=60;var a=k(i/12),o=i%=12,s=r,u=e,c=t,l=n?n.toFixed(3).replace(/\.?0+$/,""):"",d=this.asSeconds();if(!d)return"P0D";var f=d<0?"-":"",h=Wn(this._months)!==Wn(d)?"-":"",_=Wn(this._days)!==Wn(d)?"-":"",p=Wn(this._milliseconds)!==Wn(d)?"-":"";return f+"P"+(a?h+a+"Y":"")+(o?h+o+"M":"")+(s?_+s+"D":"")+(u||c||l?"T":"")+(u?p+u+"H":"")+(c?p+c+"M":"")+(l?p+l+"S":"")}var Un=He.prototype;return Un.isValid=function(){return this._isValid},Un.abs=function(){var t=this._data;return this._milliseconds=gn(this._milliseconds),this._days=gn(this._days),this._months=gn(this._months),t.milliseconds=gn(t.milliseconds),t.seconds=gn(t.seconds),t.minutes=gn(t.minutes),t.hours=gn(t.hours),t.months=gn(t.months),t.years=gn(t.years),this},Un.add=function(t,e){return vn(this,t,e,1)},Un.subtract=function(t,e){return vn(this,t,e,-1)},Un.as=function(t){if(!this.isValid())return NaN;var e,n,r=this._milliseconds;if("month"===(t=H(t))||"year"===t)return e=this._days+r/864e5,n=this._months+bn(e),"month"===t?n:n/12;switch(e=this._days+Math.round(kn(this._months)),t){case"week":return e/7+r/6048e5;case"day":return e+r/864e5;case"hour":return 24*e+r/36e5;case"minute":return 1440*e+r/6e4;case"second":return 86400*e+r/1e3;case"millisecond":return Math.floor(864e5*e)+r;default:throw new Error("Unknown unit "+t)}},Un.asMilliseconds=wn,Un.asSeconds=xn,Un.asMinutes=Tn,Un.asHours=Dn,Un.asDays=Yn,Un.asWeeks=Sn,Un.asMonths=En,Un.asYears=An,Un.valueOf=function(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*L(this._months/12):NaN},Un._bubble=function(){var t,e,n,r,i,a=this._milliseconds,o=this._days,s=this._months,u=this._data;return a>=0&&o>=0&&s>=0||a<=0&&o<=0&&s<=0||(a+=864e5*Mn(kn(s)+o),o=0,s=0),u.milliseconds=a%1e3,t=k(a/1e3),u.seconds=t%60,e=k(t/60),u.minutes=e%60,n=k(e/60),u.hours=n%24,o+=k(n/24),i=k(bn(o)),s+=i,o-=Mn(kn(i)),r=k(s/12),s%=12,u.days=o,u.months=s,u.years=r,this},Un.clone=function(){return Ve(this)},Un.get=function(t){return t=H(t),this.isValid()?this[t+"s"]():NaN},Un.milliseconds=jn,Un.seconds=On,Un.minutes=Hn,Un.hours=Pn,Un.days=Fn,Un.weeks=function(){return k(this.days()/7)},Un.months=Nn,Un.years=Bn,Un.humanize=function(t){if(!this.isValid())return this.localeData().invalidDate();var e=this.localeData(),n=function(t,e,n){var r=Ve(t).abs(),i=Rn(r.as("s")),a=Rn(r.as("m")),o=Rn(r.as("h")),s=Rn(r.as("d")),u=Rn(r.as("M")),c=Rn(r.as("y")),l=i<=In.ss&&["s",i]||i<In.s&&["ss",i]||a<=1&&["m"]||a<In.m&&["mm",a]||o<=1&&["h"]||o<In.h&&["hh",o]||s<=1&&["d"]||s<In.d&&["dd",s]||u<=1&&["M"]||u<In.M&&["MM",u]||c<=1&&["y"]||["yy",c];return l[2]=e,l[3]=+t>0,l[4]=n,function(t,e,n,r,i){return i.relativeTime(e||1,!!n,t,r)}.apply(null,l)}(this,!t,e);return t&&(n=e.pastFuture(+this,n)),e.postformat(n)},Un.toISOString=qn,Un.toString=qn,Un.toJSON=qn,Un.locale=tn,Un.localeData=nn,Un.toIsoString=T("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",qn),Un.lang=en,q("X",0,0,"unix"),q("x",0,0,"valueOf"),lt("x",at),lt("X",/[+-]?\d+(\.\d{1,3})?/),_t("X",function(t,e,n){n._d=new Date(1e3*parseFloat(t,10))}),_t("x",function(t,e,n){n._d=new Date(L(t))}),i.version="2.21.0",e=Ee,i.fn=fn,i.min=function(){return je("isBefore",[].slice.call(arguments,0))},i.max=function(){return je("isAfter",[].slice.call(arguments,0))},i.now=function(){return Date.now?Date.now():+new Date},i.utc=h,i.unix=function(t){return Ee(1e3*t)},i.months=function(t,e){return mn(t,e,"months")},i.isDate=c,i.locale=le,i.invalid=m,i.duration=Ve,i.isMoment=b,i.weekdays=function(t,e,n){return yn(t,e,n,"weekdays")},i.parseZone=function(){return Ee.apply(null,arguments).parseZone()},i.localeData=fe,i.isDuration=Pe,i.monthsShort=function(t,e){return mn(t,e,"monthsShort")},i.weekdaysMin=function(t,e,n){return yn(t,e,n,"weekdaysMin")},i.defineLocale=de,i.updateLocale=function(t,e){if(null!=e){var n,r,i=ae;null!=(r=ce(t))&&(i=r._config),e=A(i,e),(n=new C(e)).parentLocale=oe[t],oe[t]=n,le(t)}else null!=oe[t]&&(null!=oe[t].parentLocale?oe[t]=oe[t].parentLocale:null!=oe[t]&&delete oe[t]);return oe[t]},i.locales=function(){return D(oe)},i.weekdaysShort=function(t,e,n){return yn(t,e,n,"weekdaysShort")},i.normalizeUnits=H,i.relativeTimeRounding=function(t){return void 0===t?Rn:"function"==typeof t&&(Rn=t,!0)},i.relativeTimeThreshold=function(t,e){return void 0!==In[t]&&(void 0===e?In[t]:(In[t]=e,"s"===t&&(In.ss=e-1),!0))},i.calendarFormat=function(t,e){var n=t.diff(e,"days",!0);return n<-6?"sameElse":n<-1?"lastWeek":n<0?"lastDay":n<1?"sameDay":n<2?"nextDay":n<7?"nextWeek":"sameElse"},i.prototype=fn,i.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"YYYY-[W]WW",MONTH:"YYYY-MM"},i}()}).call(this,n(4)(t))},function(t,e,n){var r;try{r=n(8)}catch(t){}r||(r=window._),t.exports=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setLogLevel=e.logger=e.LEVELS=void 0;var r,i=n(0),a=(r=i)&&r.__esModule?r:{default:r};var o=e.LEVELS={debug:1,info:2,warn:3,error:4,fatal:5},s=e.logger={debug:function(){},info:function(){},warn:function(){},error:function(){},fatal:function(){}},u=(e.setLogLevel=function(t){s.debug=function(){},s.info=function(){},s.warn=function(){},s.error=function(){},s.fatal=function(){},t<=o.fatal&&(s.fatal=console.log.bind(console,"",u("FATAL"))),t<=o.error&&(s.error=console.log.bind(console,"",u("ERROR"))),t<=o.warn&&(s.warn=console.log.bind(console,"",u("WARN"))),t<=o.info&&(s.info=console.log.bind(console,"",u("INFO"))),t<=o.debug&&(s.debug=console.log.bind(console,"",u("DEBUG")))},function(t){return(0,a.default)().format("HH:mm:ss.SSS")+" : "+t+" : "})},function(t,e,n){"use strict";n.r(e);var r=function(t,e){return t<e?-1:t>e?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<i;){var a=r+i>>>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<i;){var a=r+i>>>1;t(e[a],n)>0?i=a:r=a+1}return r}}};var a=i(r),o=a.right,s=a.left,u=o,c=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);n<r;)a[n]=e(i,i=t[++n]);return a};function l(t,e){return[t,e]}var d=function(t,e,n){var r,i,a,o,s=t.length,u=e.length,c=new Array(s*u);for(null==n&&(n=l),r=a=0;r<s;++r)for(o=t[r],i=0;i<u;++i,++a)c[a]=n(o,e[i]);return c},f=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},h=function(t){return null===t?NaN:+t},_=function(t,e){var n,r,i=t.length,a=0,o=-1,s=0,u=0;if(null==e)for(;++o<i;)isNaN(n=h(t[o]))||(u+=(r=n-s)*(n-(s+=r/++a)));else for(;++o<i;)isNaN(n=h(e(t[o],o,t)))||(u+=(r=n-s)*(n-(s+=r/++a)));if(a>1)return u/(a-1)},p=function(t,e){var n=_(t,e);return n?Math.sqrt(n):n},m=function(t,e){var n,r,i,a=t.length,o=-1;if(null==e){for(;++o<a;)if(null!=(n=t[o])&&n>=n)for(r=i=n;++o<a;)null!=(n=t[o])&&(r>n&&(r=n),i<n&&(i=n))}else for(;++o<a;)if(null!=(n=e(t[o],o,t))&&n>=n)for(r=i=n;++o<a;)null!=(n=e(t[o],o,t))&&(r>n&&(r=n),i<n&&(i=n));return[r,i]},y=Array.prototype,g=y.slice,v=y.map,M=function(t){return function(){return t}},b=function(t){return t},k=function(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),a=new Array(i);++r<i;)a[r]=t+r*n;return a},L=Math.sqrt(50),w=Math.sqrt(10),x=Math.sqrt(2),T=function(t,e,n){var r,i,a,o,s=-1;if(n=+n,(t=+t)===(e=+e)&&n>0)return[t];if((r=e<t)&&(i=t,t=e,e=i),0===(o=D(t,e,n))||!isFinite(o))return[];if(o>0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++s<i;)a[s]=(t+s)*o;else for(t=Math.floor(t*o),e=Math.ceil(e*o),a=new Array(i=Math.ceil(t-e+1));++s<i;)a[s]=(t-s)/o;return r&&a.reverse(),a};function D(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),a=r/Math.pow(10,i);return i>=0?(a>=L?10:a>=w?5:a>=x?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=L?10:a>=w?5:a>=x?2:1)}function Y(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>=L?i*=10:a>=w?i*=5:a>=x&&(i*=2),e<t?-i:i}var S=function(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1},E=function(){var t=b,e=m,n=S;function r(r){var i,a,o=r.length,s=new Array(o);for(i=0;i<o;++i)s[i]=t(r[i],i,r);var c=e(s),l=c[0],d=c[1],f=n(s,l,d);Array.isArray(f)||(f=Y(l,d,f),f=k(Math.ceil(l/f)*f,Math.floor(d/f)*f,f));for(var h=f.length;f[0]<=l;)f.shift(),--h;for(;f[h-1]>d;)f.pop(),--h;var _,p=new Array(h+1);for(i=0;i<=h;++i)(_=p[i]=[]).x0=i>0?f[i-1]:l,_.x1=i<h?f[i]:d;for(i=0;i<o;++i)l<=(a=s[i])&&a<=d&&p[u(f,a,0,h)].push(r[i]);return p}return r.value=function(e){return arguments.length?(t="function"==typeof e?e:M(e),r):t},r.domain=function(t){return arguments.length?(e="function"==typeof t?t:M([t[0],t[1]]),r):e},r.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?M(g.call(t)):M(t),r):n},r},A=function(t,e,n){if(null==n&&(n=h),r=t.length){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=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)}},C=function(t,e,n){return t=v.call(t,h).sort(r),Math.ceil((n-e)/(2*(A(t,.75)-A(t,.25))*Math.pow(t.length,-1/3)))},j=function(t,e,n){return Math.ceil((n-e)/(3.5*p(t)*Math.pow(t.length,-1/3)))},O=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(n=t[a])&&n>=n)for(r=n;++a<i;)null!=(n=t[a])&&n>r&&(r=n)}else for(;++a<i;)if(null!=(n=e(t[a],a,t))&&n>=n)for(r=n;++a<i;)null!=(n=e(t[a],a,t))&&n>r&&(r=n);return r},H=function(t,e){var n,r=t.length,i=r,a=-1,o=0;if(null==e)for(;++a<r;)isNaN(n=h(t[a]))?--i:o+=n;else for(;++a<r;)isNaN(n=h(e(t[a],a,t)))?--i:o+=n;if(i)return o/i},P=function(t,e){var n,i=t.length,a=-1,o=[];if(null==e)for(;++a<i;)isNaN(n=h(t[a]))||o.push(n);else for(;++a<i;)isNaN(n=h(e(t[a],a,t)))||o.push(n);return A(o.sort(r),.5)},F=function(t){for(var e,n,r,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(n=new Array(o);--i>=0;)for(e=(r=t[i]).length;--e>=0;)n[--o]=r[e];return n},N=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(n=t[a])&&n>=n)for(r=n;++a<i;)null!=(n=t[a])&&r>n&&(r=n)}else for(;++a<i;)if(null!=(n=e(t[a],a,t))&&n>=n)for(r=n;++a<i;)null!=(n=e(t[a],a,t))&&r>n&&(r=n);return r},B=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},R=function(t,e){if(n=t.length){var n,i,a=0,o=0,s=t[o];for(null==e&&(e=r);++a<n;)(e(i=t[a],s)<0||0!==e(s,s))&&(s=i,o=a);return 0===e(s,s)?o:void 0}},I=function(t,e,n){for(var r,i,a=(null==n?t.length:n)-(e=null==e?0:+e);a;)i=Math.random()*a--|0,r=t[a+e],t[a+e]=t[i+e],t[i+e]=r;return t},z=function(t,e){var n,r=t.length,i=-1,a=0;if(null==e)for(;++i<r;)(n=+t[i])&&(a+=n);else for(;++i<r;)(n=+e(t[i],i,t))&&(a+=n);return a},W=function(t){if(!(i=t.length))return[];for(var e=-1,n=N(t,q),r=new Array(n);++e<n;)for(var i,a=-1,o=r[e]=new Array(i);++a<i;)o[a]=t[a][e];return r};function q(t){return t.length}var U=function(){return W(arguments)},V=Array.prototype.slice,$=function(t){return t},G=1,J=2,X=3,Z=4,K=1e-6;function Q(t){return"translate("+(t+.5)+",0)"}function tt(t){return"translate(0,"+(t+.5)+")"}function et(){return!this.__axis}function nt(t,e){var n=[],r=null,i=null,a=6,o=6,s=3,u=t===G||t===Z?-1:1,c=t===Z||t===J?"x":"y",l=t===G||t===X?Q:tt;function d(d){var f=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,h=null==i?e.tickFormat?e.tickFormat.apply(e,n):$:i,_=Math.max(a,0)+s,p=e.range(),m=+p[0]+.5,y=+p[p.length-1]+.5,g=(e.bandwidth?function(t){var e=Math.max(0,t.bandwidth()-1)/2;return t.round()&&(e=Math.round(e)),function(n){return+t(n)+e}}:function(t){return function(e){return+t(e)}})(e.copy()),v=d.selection?d.selection():d,M=v.selectAll(".domain").data([null]),b=v.selectAll(".tick").data(f,e).order(),k=b.exit(),L=b.enter().append("g").attr("class","tick"),w=b.select("line"),x=b.select("text");M=M.merge(M.enter().insert("path",".tick").attr("class","domain").attr("stroke","#000")),b=b.merge(L),w=w.merge(L.append("line").attr("stroke","#000").attr(c+"2",u*a)),x=x.merge(L.append("text").attr("fill","#000").attr(c,u*_).attr("dy",t===G?"0em":t===X?"0.71em":"0.32em")),d!==v&&(M=M.transition(d),b=b.transition(d),w=w.transition(d),x=x.transition(d),k=k.transition(d).attr("opacity",K).attr("transform",function(t){return isFinite(t=g(t))?l(t):this.getAttribute("transform")}),L.attr("opacity",K).attr("transform",function(t){var e=this.parentNode.__axis;return l(e&&isFinite(e=e(t))?e:g(t))})),k.remove(),M.attr("d",t===Z||t==J?"M"+u*o+","+m+"H0.5V"+y+"H"+u*o:"M"+m+","+u*o+"V0.5H"+y+"V"+u*o),b.attr("opacity",1).attr("transform",function(t){return l(g(t))}),w.attr(c+"2",u*a),x.attr(c,u*_).text(h),v.filter(et).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===J?"start":t===Z?"end":"middle"),v.each(function(){this.__axis=g})}return d.scale=function(t){return arguments.length?(e=t,d):e},d.ticks=function(){return n=V.call(arguments),d},d.tickArguments=function(t){return arguments.length?(n=null==t?[]:V.call(t),d):n.slice()},d.tickValues=function(t){return arguments.length?(r=null==t?null:V.call(t),d):r&&r.slice()},d.tickFormat=function(t){return arguments.length?(i=t,d):i},d.tickSize=function(t){return arguments.length?(a=o=+t,d):a},d.tickSizeInner=function(t){return arguments.length?(a=+t,d):a},d.tickSizeOuter=function(t){return arguments.length?(o=+t,d):o},d.tickPadding=function(t){return arguments.length?(s=+t,d):s},d}function rt(t){return nt(G,t)}function it(t){return nt(J,t)}function at(t){return nt(X,t)}function ot(t){return nt(Z,t)}var st={value:function(){}};function ut(){for(var t,e=0,n=arguments.length,r={};e<n;++e){if(!(t=arguments[e]+"")||t in r)throw new Error("illegal type: "+t);r[t]=[]}return new ct(r)}function ct(t){this._=t}function lt(t,e){for(var n,r=0,i=t.length;r<i;++r)if((n=t[r]).name===e)return n.value}function dt(t,e,n){for(var r=0,i=t.length;r<i;++r)if(t[r].name===e){t[r]=st,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=n&&t.push({name:e,value:n}),t}ct.prototype=ut.prototype={constructor:ct,on:function(t,e){var n,r,i=this._,a=(r=i,(t+"").trim().split(/^|\s+/).map(function(t){var e="",n=t.indexOf(".");if(n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})),o=-1,s=a.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++o<s;)if(n=(t=a[o]).type)i[n]=dt(i[n],t.name,e);else if(null==e)for(n in i)i[n]=dt(i[n],t.name,null);return this}for(;++o<s;)if((n=(t=a[o]).type)&&(n=lt(i[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new ct(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,r,i=new Array(n),a=0;a<n;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=0,n=(r=this._[t]).length;a<n;++a)r[a].value.apply(e,i)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,a=r.length;i<a;++i)r[i].value.apply(e,n)}};var ft=ut,ht="http://www.w3.org/1999/xhtml",_t={svg:"http://www.w3.org/2000/svg",xhtml:ht,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},pt=function(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),_t.hasOwnProperty(e)?{space:_t[e],local:t}:t};var mt=function(t){var e=pt(t);return(e.local?function(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}:function(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===ht&&e.documentElement.namespaceURI===ht?e.createElement(t):e.createElementNS(n,t)}})(e)};function yt(){}var gt=function(t){return null==t?yt:function(){return this.querySelector(t)}};function vt(){return[]}var Mt=function(t){return null==t?vt:function(){return this.querySelectorAll(t)}},bt=function(t){return function(){return this.matches(t)}};if("undefined"!=typeof document){var kt=document.documentElement;if(!kt.matches){var Lt=kt.webkitMatchesSelector||kt.msMatchesSelector||kt.mozMatchesSelector||kt.oMatchesSelector;bt=function(t){return function(){return Lt.call(this,t)}}}}var wt=bt,xt=function(t){return new Array(t.length)};function Tt(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}Tt.prototype={constructor:Tt,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var Dt="$";function Yt(t,e,n,r,i,a){for(var o,s=0,u=e.length,c=a.length;s<c;++s)(o=e[s])?(o.__data__=a[s],r[s]=o):n[s]=new Tt(t,a[s]);for(;s<u;++s)(o=e[s])&&(i[s]=o)}function St(t,e,n,r,i,a,o){var s,u,c,l={},d=e.length,f=a.length,h=new Array(d);for(s=0;s<d;++s)(u=e[s])&&(h[s]=c=Dt+o.call(u,u.__data__,s,e),c in l?i[s]=u:l[c]=u);for(s=0;s<f;++s)(u=l[c=Dt+o.call(t,a[s],s,a)])?(r[s]=u,u.__data__=a[s],l[c]=null):n[s]=new Tt(t,a[s]);for(s=0;s<d;++s)(u=e[s])&&l[h[s]]===u&&(i[s]=u)}function Et(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}var At=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function Ct(t,e){return t.style.getPropertyValue(e)||At(t).getComputedStyle(t,null).getPropertyValue(e)}function jt(t){return t.trim().split(/^|\s+/)}function Ot(t){return t.classList||new Ht(t)}function Ht(t){this._node=t,this._names=jt(t.getAttribute("class")||"")}function Pt(t,e){for(var n=Ot(t),r=-1,i=e.length;++r<i;)n.add(e[r])}function Ft(t,e){for(var n=Ot(t),r=-1,i=e.length;++r<i;)n.remove(e[r])}Ht.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};function Nt(){this.textContent=""}function Bt(){this.innerHTML=""}function Rt(){this.nextSibling&&this.parentNode.appendChild(this)}function It(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function zt(){return null}function Wt(){var t=this.parentNode;t&&t.removeChild(this)}function qt(){return this.parentNode.insertBefore(this.cloneNode(!1),this.nextSibling)}function Ut(){return this.parentNode.insertBefore(this.cloneNode(!0),this.nextSibling)}var Vt={},$t=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Vt={mouseenter:"mouseover",mouseleave:"mouseout"}));function Gt(t,e,n){return t=Jt(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function Jt(t,e,n){return function(r){var i=$t;$t=r;try{t.call(this,this.__data__,e,n)}finally{$t=i}}}function Xt(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r<a;++r)n=e[r],t.type&&n.type!==t.type||n.name!==t.name?e[++i]=n:this.removeEventListener(n.type,n.listener,n.capture);++i?e.length=i:delete this.__on}}}function Zt(t,e,n){var r=Vt.hasOwnProperty(t.type)?Gt:Jt;return function(i,a,o){var s,u=this.__on,c=r(e,a,o);if(u)for(var l=0,d=u.length;l<d;++l)if((s=u[l]).type===t.type&&s.name===t.name)return this.removeEventListener(s.type,s.listener,s.capture),this.addEventListener(s.type,s.listener=c,s.capture=n),void(s.value=e);this.addEventListener(t.type,c,n),s={type:t.type,name:t.name,value:e,listener:c,capture:n},u?u.push(s):this.__on=[s]}}function Kt(t,e,n,r){var i=$t;t.sourceEvent=$t,$t=t;try{return e.apply(n,r)}finally{$t=i}}function Qt(t,e,n){var r=At(t),i=r.CustomEvent;"function"==typeof i?i=new i(e,n):(i=r.document.createEvent("Event"),n?(i.initEvent(e,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}var te=[null];function ee(t,e){this._groups=t,this._parents=e}function ne(){return new ee([[document.documentElement]],te)}ee.prototype=ne.prototype={constructor:ee,select:function(t){"function"!=typeof t&&(t=gt(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,o,s=e[i],u=s.length,c=r[i]=new Array(u),l=0;l<u;++l)(a=s[l])&&(o=t.call(a,a.__data__,l,s))&&("__data__"in a&&(o.__data__=a.__data__),c[l]=o);return new ee(r,this._parents)},selectAll:function(t){"function"!=typeof t&&(t=Mt(t));for(var e=this._groups,n=e.length,r=[],i=[],a=0;a<n;++a)for(var o,s=e[a],u=s.length,c=0;c<u;++c)(o=s[c])&&(r.push(t.call(o,o.__data__,c,s)),i.push(o));return new ee(r,i)},filter:function(t){"function"!=typeof t&&(t=wt(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,o=e[i],s=o.length,u=r[i]=[],c=0;c<s;++c)(a=o[c])&&t.call(a,a.__data__,c,o)&&u.push(a);return new ee(r,this._parents)},data:function(t,e){if(!t)return _=new Array(this.size()),l=-1,this.each(function(t){_[++l]=t}),_;var n,r=e?St:Yt,i=this._parents,a=this._groups;"function"!=typeof t&&(n=t,t=function(){return n});for(var o=a.length,s=new Array(o),u=new Array(o),c=new Array(o),l=0;l<o;++l){var d=i[l],f=a[l],h=f.length,_=t.call(d,d&&d.__data__,l,i),p=_.length,m=u[l]=new Array(p),y=s[l]=new Array(p);r(d,f,m,y,c[l]=new Array(h),_,e);for(var g,v,M=0,b=0;M<p;++M)if(g=m[M]){for(M>=b&&(b=M+1);!(v=y[b])&&++b<p;);g._next=v||null}}return(s=new ee(s,i))._enter=u,s._exit=c,s},enter:function(){return new ee(this._enter||this._groups.map(xt),this._parents)},exit:function(){return new ee(this._exit||this._groups.map(xt),this._parents)},merge:function(t){for(var e=this._groups,n=t._groups,r=e.length,i=n.length,a=Math.min(r,i),o=new Array(r),s=0;s<a;++s)for(var u,c=e[s],l=n[s],d=c.length,f=o[s]=new Array(d),h=0;h<d;++h)(u=c[h]||l[h])&&(f[h]=u);for(;s<r;++s)o[s]=e[s];return new ee(o,this._parents)},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var r,i=t[e],a=i.length-1,o=i[a];--a>=0;)(r=i[a])&&(o&&o!==r.nextSibling&&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=Et);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a<r;++a){for(var o,s=n[a],u=s.length,c=i[a]=new Array(u),l=0;l<u;++l)(o=s[l])&&(c[l]=o);c.sort(e)}return new ee(i,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){var t=new Array(this.size()),e=-1;return this.each(function(){t[++e]=this}),t},node:function(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r=t[e],i=0,a=r.length;i<a;++i){var o=r[i];if(o)return o}return null},size:function(){var t=0;return this.each(function(){++t}),t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,n=0,r=e.length;n<r;++n)for(var i,a=e[n],o=0,s=a.length;o<s;++o)(i=a[o])&&t.call(i,i.__data__,o,a);return this},attr:function(t,e){var n=pt(t);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((null==e?n.local?function(t){return function(){this.removeAttributeNS(t.space,t.local)}}:function(t){return function(){this.removeAttribute(t)}}:"function"==typeof e?n.local?function(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)}}:function(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}:n.local?function(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}:function(t,e){return function(){this.setAttribute(t,e)}})(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?function(t){return function(){this.style.removeProperty(t)}}:"function"==typeof e?function(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}:function(t,e,n){return function(){this.style.setProperty(t,e,n)}})(t,e,null==n?"":n)):Ct(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?function(t){return function(){delete this[t]}}:"function"==typeof e?function(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}:function(t,e){return function(){this[t]=e}})(t,e)):this.node()[t]},classed:function(t,e){var n=jt(t+"");if(arguments.length<2){for(var r=Ot(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each(("function"==typeof e?function(t,e){return function(){(e.apply(this,arguments)?Pt:Ft)(this,t)}}:e?function(t){return function(){Pt(this,t)}}:function(t){return function(){Ft(this,t)}})(n,e))},text:function(t){return arguments.length?this.each(null==t?Nt:("function"==typeof t?function(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}:function(t){return function(){this.textContent=t}})(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?Bt:("function"==typeof t?function(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}:function(t){return function(){this.innerHTML=t}})(t)):this.node().innerHTML},raise:function(){return this.each(Rt)},lower:function(){return this.each(It)},append:function(t){var e="function"==typeof t?t:mt(t);return this.select(function(){return this.appendChild(e.apply(this,arguments))})},insert:function(t,e){var n="function"==typeof t?t:mt(t),r=null==e?zt:"function"==typeof e?e:gt(e);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})},remove:function(){return this.each(Wt)},clone:function(t){return this.select(t?Ut:qt)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var r,i,a=function(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}})}(t+""),o=a.length;if(!(arguments.length<2)){for(s=e?Zt:Xt,null==n&&(n=!1),r=0;r<o;++r)this.each(s(a[r],e,n));return this}var s=this.node().__on;if(s)for(var u,c=0,l=s.length;c<l;++c)for(r=0,u=s[c];r<o;++r)if((i=a[r]).type===u.type&&i.name===u.name)return u.value},dispatch:function(t,e){return this.each(("function"==typeof e?function(t,e){return function(){return Qt(this,t,e.apply(this,arguments))}}:function(t,e){return function(){return Qt(this,t,e)}})(t,e))}};var re=ne,ie=function(t){return"string"==typeof t?new ee([[document.querySelector(t)]],[document.documentElement]):new ee([[t]],te)},ae=function(t){return ie(mt(t).call(document.documentElement))},oe=0;function se(){return new ue}function ue(){this._="@"+(++oe).toString(36)}ue.prototype=se.prototype={constructor:ue,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 ce=function(){for(var t,e=$t;t=e.sourceEvent;)e=t;return e},le=function(t,e){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=e.clientX,r.y=e.clientY,[(r=r.matrixTransform(t.getScreenCTM().inverse())).x,r.y]}var i=t.getBoundingClientRect();return[e.clientX-i.left-t.clientLeft,e.clientY-i.top-t.clientTop]},de=function(t){var e=ce();return e.changedTouches&&(e=e.changedTouches[0]),le(t,e)},fe=function(t){return"string"==typeof t?new ee([document.querySelectorAll(t)],[document.documentElement]):new ee([null==t?[]:t],te)},he=function(t,e,n){arguments.length<3&&(n=e,e=ce().changedTouches);for(var r,i=0,a=e?e.length:0;i<a;++i)if((r=e[i]).identifier===n)return le(t,r);return null},_e=function(t,e){null==e&&(e=ce().touches);for(var n=0,r=e?e.length:0,i=new Array(r);n<r;++n)i[n]=le(t,e[n]);return i};function pe(){$t.stopImmediatePropagation()}var me=function(){$t.preventDefault(),$t.stopImmediatePropagation()},ye=function(t){var e=t.document.documentElement,n=ie(t).on("dragstart.drag",me,!0);"onselectstart"in e?n.on("selectstart.drag",me,!0):(e.__noselect=e.style.MozUserSelect,e.style.MozUserSelect="none")};function ge(t,e){var n=t.document.documentElement,r=ie(t).on("dragstart.drag",null);e&&(r.on("click.drag",me,!0),setTimeout(function(){r.on("click.drag",null)},0)),"onselectstart"in n?r.on("selectstart.drag",null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}var ve=function(t){return function(){return t}};function Me(t,e,n,r,i,a,o,s,u,c){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=u,this._=c}function be(){return!$t.button}function ke(){return this.parentNode}function Le(t){return null==t?{x:$t.x,y:$t.y}:t}function we(){return"ontouchstart"in this}Me.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var xe=function(){var t,e,n,r,i=be,a=ke,o=Le,s=we,u={},c=ft("start","drag","end"),l=0,d=0;function f(t){t.on("mousedown.drag",h).filter(s).on("touchstart.drag",m).on("touchmove.drag",y).on("touchend.drag touchcancel.drag",g).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function h(){if(!r&&i.apply(this,arguments)){var o=v("mouse",a.apply(this,arguments),de,this,arguments);o&&(ie($t.view).on("mousemove.drag",_,!0).on("mouseup.drag",p,!0),ye($t.view),pe(),n=!1,t=$t.clientX,e=$t.clientY,o("start"))}}function _(){if(me(),!n){var r=$t.clientX-t,i=$t.clientY-e;n=r*r+i*i>d}u.mouse("drag")}function p(){ie($t.view).on("mousemove.drag mouseup.drag",null),ge($t.view,n),me(),u.mouse("end")}function m(){if(i.apply(this,arguments)){var t,e,n=$t.changedTouches,r=a.apply(this,arguments),o=n.length;for(t=0;t<o;++t)(e=v(n[t].identifier,r,he,this,arguments))&&(pe(),e("start"))}}function y(){var t,e,n=$t.changedTouches,r=n.length;for(t=0;t<r;++t)(e=u[n[t].identifier])&&(me(),e("drag"))}function g(){var t,e,n=$t.changedTouches,i=n.length;for(r&&clearTimeout(r),r=setTimeout(function(){r=null},500),t=0;t<i;++t)(e=u[n[t].identifier])&&(pe(),e("end"))}function v(t,e,n,r,i){var a,s,d,h=n(e,t),_=c.copy();if(Kt(new Me(f,"beforestart",a,t,l,h[0],h[1],0,0,_),function(){return null!=($t.subject=a=o.apply(r,i))&&(s=a.x-h[0]||0,d=a.y-h[1]||0,!0)}))return function o(c){var p,m=h;switch(c){case"start":u[t]=o,p=l++;break;case"end":delete u[t],--l;case"drag":h=n(e,t),p=l}Kt(new Me(f,c,a,t,p,h[0]+s,h[1]+d,h[0]-m[0],h[1]-m[1],_),_.apply,_,[c,r,i])}}return f.filter=function(t){return arguments.length?(i="function"==typeof t?t:ve(!!t),f):i},f.container=function(t){return arguments.length?(a="function"==typeof t?t:ve(t),f):a},f.subject=function(t){return arguments.length?(o="function"==typeof t?t:ve(t),f):o},f.touchable=function(t){return arguments.length?(s="function"==typeof t?t:ve(!!t),f):s},f.on=function(){var t=c.on.apply(c,arguments);return t===c?f:t},f.clickDistance=function(t){return arguments.length?(d=(t=+t)*t,f):Math.sqrt(d)},f},Te=function(t,e,n){t.prototype=e.prototype=n,n.constructor=t};function De(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Ye(){}var Se="\\s*([+-]?\\d+)\\s*",Ee="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ae="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Ce=/^#([0-9a-f]{3})$/,je=/^#([0-9a-f]{6})$/,Oe=new RegExp("^rgb\\("+[Se,Se,Se]+"\\)$"),He=new RegExp("^rgb\\("+[Ae,Ae,Ae]+"\\)$"),Pe=new RegExp("^rgba\\("+[Se,Se,Se,Ee]+"\\)$"),Fe=new RegExp("^rgba\\("+[Ae,Ae,Ae,Ee]+"\\)$"),Ne=new RegExp("^hsl\\("+[Ee,Ae,Ae]+"\\)$"),Be=new RegExp("^hsla\\("+[Ee,Ae,Ae,Ee]+"\\)$"),Re={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Ie(t){var e;return t=(t+"").trim().toLowerCase(),(e=Ce.exec(t))?new Ve((e=parseInt(e[1],16))>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):(e=je.exec(t))?ze(parseInt(e[1],16)):(e=Oe.exec(t))?new Ve(e[1],e[2],e[3],1):(e=He.exec(t))?new Ve(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Pe.exec(t))?We(e[1],e[2],e[3],e[4]):(e=Fe.exec(t))?We(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=Ne.exec(t))?$e(e[1],e[2]/100,e[3]/100,1):(e=Be.exec(t))?$e(e[1],e[2]/100,e[3]/100,e[4]):Re.hasOwnProperty(t)?ze(Re[t]):"transparent"===t?new Ve(NaN,NaN,NaN,0):null}function ze(t){return new Ve(t>>16&255,t>>8&255,255&t,1)}function We(t,e,n,r){return r<=0&&(t=e=n=NaN),new Ve(t,e,n,r)}function qe(t){return t instanceof Ye||(t=Ie(t)),t?new Ve((t=t.rgb()).r,t.g,t.b,t.opacity):new Ve}function Ue(t,e,n,r){return 1===arguments.length?qe(t):new Ve(t,e,n,null==r?1:r)}function Ve(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function $e(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Je(t,e,n,r)}function Ge(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof Je)return new Je(t.h,t.s,t.l,t.opacity);if(t instanceof Ye||(t=Ie(t)),!t)return new Je;if(t instanceof Je)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,u=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n<r):n===a?(r-e)/s+2:(e-n)/s+4,s/=u<.5?a+i:2-a-i,o*=60):s=u>0&&u<1?0:o,new Je(o,s,u,t.opacity)}(t):new Je(t,e,n,null==r?1:r)}function Je(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Xe(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}Te(Ye,Ie,{displayable:function(){return this.rgb().displayable()},toString:function(){return this.rgb()+""}}),Te(Ve,Ue,De(Ye,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Ve(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Ve(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},toString:function(){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+")")}})),Te(Je,Ge,De(Ye,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Je(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Je(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 Ve(Xe(t>=240?t-240:t+120,i,r),Xe(t,i,r),Xe(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}}));var Ze=Math.PI/180,Ke=180/Math.PI,Qe=.95047,tn=1,en=1.08883,nn=4/29,rn=6/29,an=3*rn*rn,on=rn*rn*rn;function sn(t){if(t instanceof cn)return new cn(t.l,t.a,t.b,t.opacity);if(t instanceof pn){var e=t.h*Ze;return new cn(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}t instanceof Ve||(t=qe(t));var n=hn(t.r),r=hn(t.g),i=hn(t.b),a=ln((.4124564*n+.3575761*r+.1804375*i)/Qe),o=ln((.2126729*n+.7151522*r+.072175*i)/tn);return new cn(116*o-16,500*(a-o),200*(o-ln((.0193339*n+.119192*r+.9503041*i)/en)),t.opacity)}function un(t,e,n,r){return 1===arguments.length?sn(t):new cn(t,e,n,null==r?1:r)}function cn(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function ln(t){return t>on?Math.pow(t,1/3):t/an+nn}function dn(t){return t>rn?t*t*t:an*(t-nn)}function fn(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function hn(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function _n(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof pn)return new pn(t.h,t.c,t.l,t.opacity);t instanceof cn||(t=sn(t));var e=Math.atan2(t.b,t.a)*Ke;return new pn(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}(t):new pn(t,e,n,null==r?1:r)}function pn(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}Te(cn,un,De(Ye,{brighter:function(t){return new cn(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new cn(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return t=tn*dn(t),new Ve(fn(3.2404542*(e=Qe*dn(e))-1.5371385*t-.4985314*(n=en*dn(n))),fn(-.969266*e+1.8760108*t+.041556*n),fn(.0556434*e-.2040259*t+1.0572252*n),this.opacity)}})),Te(pn,_n,De(Ye,{brighter:function(t){return new pn(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new pn(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return sn(this).rgb()}}));var mn=-.29227,yn=-.90649,gn=1.97294,vn=gn*yn,Mn=1.78277*gn,bn=1.78277*mn- -.14861*yn;function kn(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof Ln)return new Ln(t.h,t.s,t.l,t.opacity);t instanceof Ve||(t=qe(t));var e=t.r/255,n=t.g/255,r=t.b/255,i=(bn*r+vn*e-Mn*n)/(bn+vn-Mn),a=r-i,o=(gn*(n-i)-mn*a)/yn,s=Math.sqrt(o*o+a*a)/(gn*i*(1-i)),u=s?Math.atan2(o,a)*Ke-120:NaN;return new Ln(u<0?u+360:u,s,i,t.opacity)}(t):new Ln(t,e,n,null==r?1:r)}function Ln(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function wn(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}Te(Ln,kn,De(Ye,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new Ln(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new Ln(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Ze,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),i=Math.sin(t);return new Ve(255*(e+n*(-.14861*r+1.78277*i)),255*(e+n*(mn*r+yn*i)),255*(e+n*(gn*r)),this.opacity)}}));var xn=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=r<e-1?t[r+2]:2*a-i;return wn((n-r/e)*e,o,i,a,s)}},Tn=function(t){var e=t.length;return function(n){var r=Math.floor(((n%=1)<0?++n:n)*e),i=t[(r+e-1)%e],a=t[r%e],o=t[(r+1)%e],s=t[(r+2)%e];return wn((n-r/e)*e,i,a,o,s)}},Dn=function(t){return function(){return t}};function Yn(t,e){return function(n){return t+n*e}}function Sn(t,e){var n=e-t;return n?Yn(t,n>180||n<-180?n-360*Math.round(n/360):n):Dn(isNaN(t)?e:t)}function En(t){return 1==(t=+t)?An: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):Dn(isNaN(e)?n:e)}}function An(t,e){var n=e-t;return n?Yn(t,n):Dn(isNaN(t)?e:t)}var Cn=function t(e){var n=En(e);function r(t,e){var r=n((t=Ue(t)).r,(e=Ue(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=An(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 jn(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;n<i;++n)r=Ue(e[n]),a[n]=r.r||0,o[n]=r.g||0,s[n]=r.b||0;return a=t(a),o=t(o),s=t(s),r.opacity=1,function(t){return r.r=a(t),r.g=o(t),r.b=s(t),r+""}}}var On=jn(xn),Hn=jn(Tn),Pn=function(t,e){var n,r=e?e.length:0,i=t?Math.min(r,t.length):0,a=new Array(i),o=new Array(r);for(n=0;n<i;++n)a[n]=$n(t[n],e[n]);for(;n<r;++n)o[n]=e[n];return function(t){for(n=0;n<i;++n)o[n]=a[n](t);return o}},Fn=function(t,e){var n=new Date;return e-=t=+t,function(r){return n.setTime(t+e*r),n}},Nn=function(t,e){return e-=t=+t,function(n){return t+e*n}},Bn=function(t,e){var n,r={},i={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?r[n]=$n(t[n],e[n]):i[n]=e[n];return function(t){for(n in r)i[n]=r[n](t);return i}},Rn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,In=new RegExp(Rn.source,"g");var zn,Wn,qn,Un,Vn=function(t,e){var n,r,i,a=Rn.lastIndex=In.lastIndex=0,o=-1,s=[],u=[];for(t+="",e+="";(n=Rn.exec(t))&&(r=In.exec(e));)(i=r.index)>a&&(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,u.push({i:o,x:Nn(n,r)})),a=In.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?u[0]?function(t){return function(e){return t(e)+""}}(u[0].x):function(t){return function(){return t}}(e):(e=u.length,function(t){for(var n,r=0;r<e;++r)s[(n=u[r]).i]=n.x(t);return s.join("")})},$n=function(t,e){var n,r=typeof e;return null==e||"boolean"===r?Dn(e):("number"===r?Nn:"string"===r?(n=Ie(e))?(e=n,Cn):Vn:e instanceof Ie?Cn:e instanceof Date?Fn:Array.isArray(e)?Pn:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?Bn:Nn)(t,e)},Gn=function(t,e){return e-=t=+t,function(n){return Math.round(t+e*n)}},Jn=180/Math.PI,Xn={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},Zn=function(t,e,n,r,i,a){var o,s,u;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(u=t*n+e*r)&&(n-=t*u,r-=e*u),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,u/=s),t*r<e*n&&(t=-t,e=-e,u=-u,o=-o),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*Jn,skewX:Math.atan(u)*Jn,scaleX:o,scaleY:s}};function Kn(t,e,n,r){function i(t){return t.length?t.pop()+" ":""}return function(a,o){var s=[],u=[];return a=t(a),o=t(o),function(t,r,i,a,o,s){if(t!==i||r!==a){var u=o.push("translate(",null,e,null,n);s.push({i:u-4,x:Nn(t,i)},{i:u-2,x:Nn(r,a)})}else(i||a)&&o.push("translate("+i+e+a+n)}(a.translateX,a.translateY,o.translateX,o.translateY,s,u),function(t,e,n,a){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:Nn(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,u),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:Nn(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,u),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:Nn(t,n)},{i:s-2,x:Nn(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,u),a=o=null,function(t){for(var e,n=-1,r=u.length;++n<r;)s[(e=u[n]).i]=e.x(t);return s.join("")}}}var Qn=Kn(function(t){return"none"===t?Xn:(zn||(zn=document.createElement("DIV"),Wn=document.documentElement,qn=document.defaultView),zn.style.transform=t,t=qn.getComputedStyle(Wn.appendChild(zn),null).getPropertyValue("transform"),Wn.removeChild(zn),t=t.slice(7,-1).split(","),Zn(+t[0],+t[1],+t[2],+t[3],+t[4],+t[5]))},"px, ","px)","deg)"),tr=Kn(function(t){return null==t?Xn:(Un||(Un=document.createElementNS("http://www.w3.org/2000/svg","g")),Un.setAttribute("transform",t),(t=Un.transform.baseVal.consolidate())?(t=t.matrix,Zn(t.a,t.b,t.c,t.d,t.e,t.f)):Xn)},", ",")",")"),er=Math.SQRT2;function nr(t){return((t=Math.exp(t))+1/t)/2}var rr=function(t,e){var n,r,i=t[0],a=t[1],o=t[2],s=e[0],u=e[1],c=e[2],l=s-i,d=u-a,f=l*l+d*d;if(f<1e-12)r=Math.log(c/o)/er,n=function(t){return[i+t*l,a+t*d,o*Math.exp(er*t*r)]};else{var h=Math.sqrt(f),_=(c*c-o*o+4*f)/(2*o*2*h),p=(c*c-o*o-4*f)/(2*c*2*h),m=Math.log(Math.sqrt(_*_+1)-_),y=Math.log(Math.sqrt(p*p+1)-p);r=(y-m)/er,n=function(t){var e,n=t*r,s=nr(m),u=o/(2*h)*(s*(e=er*n+m,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(m));return[i+u*l,a+u*d,o*s/nr(er*n+m)]}}return n.duration=1e3*r,n};function ir(t){return function(e,n){var r=t((e=Ge(e)).h,(n=Ge(n)).h),i=An(e.s,n.s),a=An(e.l,n.l),o=An(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 ar=ir(Sn),or=ir(An);function sr(t,e){var n=An((t=un(t)).l,(e=un(e)).l),r=An(t.a,e.a),i=An(t.b,e.b),a=An(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 ur(t){return function(e,n){var r=t((e=_n(e)).h,(n=_n(n)).h),i=An(e.c,n.c),a=An(e.l,n.l),o=An(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 cr=ur(Sn),lr=ur(An);function dr(t){return function e(n){function r(e,r){var i=t((e=kn(e)).h,(r=kn(r)).h),a=An(e.s,r.s),o=An(e.l,r.l),s=An(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 fr,hr,_r=dr(Sn),pr=dr(An),mr=function(t,e){for(var n=new Array(e),r=0;r<e;++r)n[r]=t(r/(e-1));return n},yr=0,gr=0,vr=0,Mr=1e3,br=0,kr=0,Lr=0,wr="object"==typeof performance&&performance.now?performance:Date,xr="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Tr(){return kr||(xr(Dr),kr=wr.now()+Lr)}function Dr(){kr=0}function Yr(){this._call=this._time=this._next=null}function Sr(t,e,n){var r=new Yr;return r.restart(t,e,n),r}function Er(){Tr(),++yr;for(var t,e=fr;e;)(t=kr-e._time)>=0&&e._call.call(null,t),e=e._next;--yr}function Ar(){kr=(br=wr.now())+Lr,yr=gr=0;try{Er()}finally{yr=0,function(){var t,e,n=fr,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:fr=e);hr=t,jr(r)}(),kr=0}}function Cr(){var t=wr.now(),e=t-br;e>Mr&&(Lr-=e,br=t)}function jr(t){yr||(gr&&(gr=clearTimeout(gr)),t-kr>24?(t<1/0&&(gr=setTimeout(Ar,t-wr.now()-Lr)),vr&&(vr=clearInterval(vr))):(vr||(br=wr.now(),vr=setInterval(Cr,Mr)),yr=1,xr(Ar)))}Yr.prototype=Sr.prototype={constructor:Yr,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Tr():+n)+(null==e?0:+e),this._next||hr===this||(hr?hr._next=this:fr=this,hr=this),this._call=t,this._time=n,jr()},stop:function(){this._call&&(this._call=null,this._time=1/0,jr())}};var Or=function(t,e,n){var r=new Yr;return e=null==e?0:+e,r.restart(function(n){r.stop(),t(n+e)},e,n),r},Hr=function(t,e,n){var r=new Yr,i=e;return null==e?(r.restart(t,e,n),r):(e=+e,n=null==n?Tr():+n,r.restart(function a(o){o+=i,r.restart(a,i+=e,n),t(o)},e,n),r)},Pr=ft("start","end","interrupt"),Fr=[],Nr=0,Br=1,Rr=2,Ir=3,zr=4,Wr=5,qr=6,Ur=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(u){var c,l,d,f;if(n.state!==Br)return s();for(c in i)if((f=i[c]).name===n.name){if(f.state===Ir)return Or(a);f.state===zr?(f.state=qr,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[c]):+c<e&&(f.state=qr,f.timer.stop(),delete i[c])}if(Or(function(){n.state===Ir&&(n.state=zr,n.timer.restart(o,n.delay,n.time),o(u))}),n.state=Rr,n.on.call("start",t,t.__data__,n.index,n.group),n.state===Rr){for(n.state=Ir,r=new Array(d=n.tween.length),c=0,l=-1;c<d;++c)(f=n.tween[c].value.call(t,t.__data__,n.index,n.group))&&(r[++l]=f);r.length=l+1}}function o(e){for(var i=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(s),n.state=Wr,1),a=-1,o=r.length;++a<o;)r[a].call(null,i);n.state===Wr&&(n.on.call("end",t,t.__data__,n.index,n.group),s())}function s(){for(var r in n.state=qr,n.timer.stop(),delete i[e],i)return;delete t.__transition}i[e]=n,n.timer=Sr(function(t){n.state=Br,n.timer.restart(a,n.delay,n.time),n.delay<=t&&a(t-n.delay)},0,n.time)}(t,n,{name:e,index:r,group:i,on:Pr,tween:Fr,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:Nr})};function Vr(t,e){var n=Gr(t,e);if(n.state>Nr)throw new Error("too late; already scheduled");return n}function $r(t,e){var n=Gr(t,e);if(n.state>Rr)throw new Error("too late; already started");return n}function Gr(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var Jr=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>Rr&&n.state<Wr,n.state=qr,n.timer.stop(),r&&n.on.call("interrupt",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}};function Xr(t,e,n){var r=t._id;return t.each(function(){var t=$r(this,r);(t.value||(t.value={}))[e]=n.apply(this,arguments)}),function(t){return Gr(t,r).value[e]}}var Zr=function(t,e){var n;return("number"==typeof e?Nn:e instanceof Ie?Cn:(n=Ie(e))?(e=n,Cn):Vn)(t,e)};var Kr=re.prototype.constructor;var Qr=0;function ti(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function ei(t){return re().transition(t)}function ni(){return++Qr}var ri=re.prototype;function ii(t){return+t}function ai(t){return t*t}function oi(t){return t*(2-t)}function si(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}function ui(t){return t*t*t}function ci(t){return--t*t*t+1}function li(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}ti.prototype=ei.prototype={constructor:ti,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=gt(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o<i;++o)for(var s,u,c=r[o],l=c.length,d=a[o]=new Array(l),f=0;f<l;++f)(s=c[f])&&(u=t.call(s,s.__data__,f,c))&&("__data__"in s&&(u.__data__=s.__data__),d[f]=u,Ur(d[f],e,n,f,d,Gr(s,n)));return new ti(a,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=Mt(t));for(var r=this._groups,i=r.length,a=[],o=[],s=0;s<i;++s)for(var u,c=r[s],l=c.length,d=0;d<l;++d)if(u=c[d]){for(var f,h=t.call(u,u.__data__,d,c),_=Gr(u,n),p=0,m=h.length;p<m;++p)(f=h[p])&&Ur(f,e,n,p,h,_);a.push(h),o.push(u)}return new ti(a,o,e,n)},filter:function(t){"function"!=typeof t&&(t=wt(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,o=e[i],s=o.length,u=r[i]=[],c=0;c<s;++c)(a=o[c])&&t.call(a,a.__data__,c,o)&&u.push(a);return new ti(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,r=e.length,i=n.length,a=Math.min(r,i),o=new Array(r),s=0;s<a;++s)for(var u,c=e[s],l=n[s],d=c.length,f=o[s]=new Array(d),h=0;h<d;++h)(u=c[h]||l[h])&&(f[h]=u);for(;s<r;++s)o[s]=e[s];return new ti(o,this._parents,this._name,this._id)},selection:function(){return new Kr(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=ni(),r=this._groups,i=r.length,a=0;a<i;++a)for(var o,s=r[a],u=s.length,c=0;c<u;++c)if(o=s[c]){var l=Gr(o,e);Ur(o,t,n,c,s,{time:l.time+l.delay+l.duration,delay:0,duration:l.duration,ease:l.ease})}return new ti(r,this._parents,t,n)},call:ri.call,nodes:ri.nodes,node:ri.node,size:ri.size,empty:ri.empty,each:ri.each,on:function(t,e){var n=this._id;return arguments.length<2?Gr(this.node(),n).on.on(t):this.each(function(t,e,n){var r,i,a=function(t){return(t+"").trim().split(/^|\s+/).every(function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t})}(e)?Vr:$r;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}(n,t,e))},attr:function(t,e){var n=pt(t),r="transform"===n?tr:Zr;return this.attrTween(t,"function"==typeof e?(n.local?function(t,e,n){var r,i,a;return function(){var o,s=n(this);if(null!=s)return(o=this.getAttributeNS(t.space,t.local))===s?null:o===r&&s===i?a:a=e(r=o,i=s);this.removeAttributeNS(t.space,t.local)}}:function(t,e,n){var r,i,a;return function(){var o,s=n(this);if(null!=s)return(o=this.getAttribute(t))===s?null:o===r&&s===i?a:a=e(r=o,i=s);this.removeAttribute(t)}})(n,r,Xr(this,"attr."+t,e)):null==e?(n.local?function(t){return function(){this.removeAttributeNS(t.space,t.local)}}:function(t){return function(){this.removeAttribute(t)}})(n):(n.local?function(t,e,n){var r,i;return function(){var a=this.getAttributeNS(t.space,t.local);return a===n?null:a===r?i:i=e(r=a,n)}}:function(t,e,n){var r,i;return function(){var a=this.getAttribute(t);return a===n?null:a===r?i:i=e(r=a,n)}})(n,r,e+""))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var r=pt(t);return this.tween(n,(r.local?function(t,e){function n(){var n=this,r=e.apply(n,arguments);return r&&function(e){n.setAttributeNS(t.space,t.local,r(e))}}return n._value=e,n}:function(t,e){function n(){var n=this,r=e.apply(n,arguments);return r&&function(e){n.setAttribute(t,r(e))}}return n._value=e,n})(r,e))},style:function(t,e,n){var r="transform"==(t+="")?Qn:Zr;return null==e?this.styleTween(t,function(t,e){var n,r,i;return function(){var a=Ct(this,t),o=(this.style.removeProperty(t),Ct(this,t));return a===o?null:a===n&&o===r?i:i=e(n=a,r=o)}}(t,r)).on("end.style."+t,function(t){return function(){this.style.removeProperty(t)}}(t)):this.styleTween(t,"function"==typeof e?function(t,e,n){var r,i,a;return function(){var o=Ct(this,t),s=n(this);return null==s&&(this.style.removeProperty(t),s=Ct(this,t)),o===s?null:o===r&&s===i?a:a=e(r=o,i=s)}}(t,r,Xr(this,"style."+t,e)):function(t,e,n){var r,i;return function(){var a=Ct(this,t);return a===n?null:a===r?i:i=e(r=a,n)}}(t,r,e+""),n)},styleTween:function(t,e,n){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,n){function r(){var r=this,i=e.apply(r,arguments);return i&&function(e){r.style.setProperty(t,i(e),n)}}return r._value=e,r}(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(Xr(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},remove:function(){return this.on("end.remove",(t=this._id,function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}));var t},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,i=Gr(this.node(),n).tween,a=0,o=i.length;a<o;++a)if((r=i[a]).name===t)return r.value;return null}return this.each((null==e?function(t,e){var n,r;return function(){var i=$r(this,t),a=i.tween;if(a!==n)for(var o=0,s=(r=n=a).length;o<s;++o)if(r[o].name===e){(r=r.slice()).splice(o,1);break}i.tween=r}}:function(t,e,n){var r,i;if("function"!=typeof n)throw new Error;return function(){var a=$r(this,t),o=a.tween;if(o!==r){i=(r=o).slice();for(var s={name:e,value:n},u=0,c=i.length;u<c;++u)if(i[u].name===e){i[u]=s;break}u===c&&i.push(s)}a.tween=i}})(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?function(t,e){return function(){Vr(this,t).delay=+e.apply(this,arguments)}}:function(t,e){return e=+e,function(){Vr(this,t).delay=e}})(e,t)):Gr(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?function(t,e){return function(){$r(this,t).duration=+e.apply(this,arguments)}}:function(t,e){return e=+e,function(){$r(this,t).duration=e}})(e,t)):Gr(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){$r(this,t).ease=e}}(e,t)):Gr(this.node(),e).ease}};var di=function t(e){function n(t){return Math.pow(t,e)}return e=+e,n.exponent=t,n}(3),fi=function t(e){function n(t){return 1-Math.pow(1-t,e)}return e=+e,n.exponent=t,n}(3),hi=function t(e){function n(t){return((t*=2)<=1?Math.pow(t,e):2-Math.pow(2-t,e))/2}return e=+e,n.exponent=t,n}(3),_i=Math.PI,pi=_i/2;function mi(t){return 1-Math.cos(t*pi)}function yi(t){return Math.sin(t*pi)}function gi(t){return(1-Math.cos(_i*t))/2}function vi(t){return Math.pow(2,10*t-10)}function Mi(t){return 1-Math.pow(2,-10*t)}function bi(t){return((t*=2)<=1?Math.pow(2,10*t-10):2-Math.pow(2,10-10*t))/2}function ki(t){return 1-Math.sqrt(1-t*t)}function Li(t){return Math.sqrt(1- --t*t)}function wi(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}var xi=4/11,Ti=6/11,Di=8/11,Yi=.75,Si=9/11,Ei=10/11,Ai=.9375,Ci=21/22,ji=63/64,Oi=1/xi/xi;function Hi(t){return 1-Pi(1-t)}function Pi(t){return(t=+t)<xi?Oi*t*t:t<Di?Oi*(t-=Ti)*t+Yi:t<Ei?Oi*(t-=Si)*t+Ai:Oi*(t-=Ci)*t+ji}function Fi(t){return((t*=2)<=1?1-Pi(1-t):Pi(t-1)+1)/2}var Ni=function t(e){function n(t){return t*t*((e+1)*t-e)}return e=+e,n.overshoot=t,n}(1.70158),Bi=function t(e){function n(t){return--t*t*((e+1)*t+e)+1}return e=+e,n.overshoot=t,n}(1.70158),Ri=function t(e){function n(t){return((t*=2)<1?t*t*((e+1)*t-e):(t-=2)*t*((e+1)*t+e)+2)/2}return e=+e,n.overshoot=t,n}(1.70158),Ii=2*Math.PI,zi=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=Ii);function i(t){return e*Math.pow(2,10*--t)*Math.sin((r-t)/n)}return i.amplitude=function(e){return t(e,n*Ii)},i.period=function(n){return t(e,n)},i}(1,.3),Wi=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=Ii);function i(t){return 1-e*Math.pow(2,-10*(t=+t))*Math.sin((t+r)/n)}return i.amplitude=function(e){return t(e,n*Ii)},i.period=function(n){return t(e,n)},i}(1,.3),qi=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=Ii);function i(t){return((t=2*t-1)<0?e*Math.pow(2,10*t)*Math.sin((r-t)/n):2-e*Math.pow(2,-10*t)*Math.sin((r+t)/n))/2}return i.amplitude=function(e){return t(e,n*Ii)},i.period=function(n){return t(e,n)},i}(1,.3),Ui={time:null,delay:0,duration:250,ease:li};function Vi(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))return Ui.time=Tr(),Ui;return n}re.prototype.interrupt=function(t){return this.each(function(){Jr(this,t)})},re.prototype.transition=function(t){var e,n;t instanceof ti?(e=t._id,t=t._name):(e=ni(),(n=Ui).time=Tr(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var o,s=r[a],u=s.length,c=0;c<u;++c)(o=s[c])&&Ur(o,t,e,c,s,n||Vi(o,e));return new ti(r,this._parents,t,e)};var $i=[null],Gi=function(t,e){var n,r,i=t.__transition;if(i)for(r in e=null==e?null:e+"",i)if((n=i[r]).state>Br&&n.name===e)return new ti([[t]],$i,e,+r);return null},Ji=function(t){return function(){return t}},Xi=function(t,e,n){this.target=t,this.type=e,this.selection=n};function Zi(){$t.stopImmediatePropagation()}var Ki=function(){$t.preventDefault(),$t.stopImmediatePropagation()},Qi={name:"drag"},ta={name:"space"},ea={name:"handle"},na={name:"center"},ra={name:"x",handles:["e","w"].map(da),input:function(t,e){return t&&[[t[0],e[0][1]],[t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},ia={name:"y",handles:["n","s"].map(da),input:function(t,e){return t&&[[e[0][0],t[0]],[e[1][0],t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},aa={name:"xy",handles:["n","e","s","w","nw","ne","se","sw"].map(da),input:function(t){return t},output:function(t){return t}},oa={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"},sa={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},ua={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},ca={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},la={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function da(t){return{type:t}}function fa(){return!$t.button}function ha(){var t=this.ownerSVGElement||this;return[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function _a(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function pa(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function ma(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function ya(){return Ma(ra)}function ga(){return Ma(ia)}var va=function(){return Ma(aa)};function Ma(t){var e,n=ha,r=fa,i=ft(o,"start","brush","end"),a=6;function o(e){var n=e.property("__brush",d).selectAll(".overlay").data([da("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",oa.overlay).merge(n).each(function(){var t=_a(this).extent;ie(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([da("selection")]).enter().append("rect").attr("class","selection").attr("cursor",oa.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 oa[t.type]}),e.each(s).attr("fill","none").attr("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush touchstart.brush",l)}function s(){var t=ie(this),e=_a(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]-a/2:e[0][0]-a/2}).attr("y",function(t){return"s"===t.type[0]?e[1][1]-a/2:e[0][1]-a/2}).attr("width",function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+a:a}).attr("height",function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+a:a})):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function u(t,e){return t.__brush.emitter||new c(t,e)}function c(t,e){this.that=t,this.args=e,this.state=t.__brush,this.active=0}function l(){if($t.touches){if($t.changedTouches.length<$t.touches.length)return Ki()}else if(e)return;if(r.apply(this,arguments)){var n,i,a,o,c,l,d,f,h,_,p,m,y,g=this,v=$t.target.__data__.type,M="selection"===($t.metaKey?v="overlay":v)?Qi:$t.altKey?na:ea,b=t===ia?null:ca[v],k=t===ra?null:la[v],L=_a(g),w=L.extent,x=L.selection,T=w[0][0],D=w[0][1],Y=w[1][0],S=w[1][1],E=b&&k&&$t.shiftKey,A=de(g),C=A,j=u(g,arguments).beforestart();"overlay"===v?L.selection=x=[[n=t===ia?T:A[0],a=t===ra?D:A[1]],[c=t===ia?Y:n,d=t===ra?S:a]]:(n=x[0][0],a=x[0][1],c=x[1][0],d=x[1][1]),i=n,o=a,l=c,f=d;var O=ie(g).attr("pointer-events","none"),H=O.selectAll(".overlay").attr("cursor",oa[v]);if($t.touches)O.on("touchmove.brush",F,!0).on("touchend.brush touchcancel.brush",B,!0);else{var P=ie($t.view).on("keydown.brush",function(){switch($t.keyCode){case 16:E=b&&k;break;case 18:M===ea&&(b&&(c=l-h*b,n=i+h*b),k&&(d=f-_*k,a=o+_*k),M=na,N());break;case 32:M!==ea&&M!==na||(b<0?c=l-h:b>0&&(n=i-h),k<0?d=f-_:k>0&&(a=o-_),M=ta,H.attr("cursor",oa.selection),N());break;default:return}Ki()},!0).on("keyup.brush",function(){switch($t.keyCode){case 16:E&&(m=y=E=!1,N());break;case 18:M===na&&(b<0?c=l:b>0&&(n=i),k<0?d=f:k>0&&(a=o),M=ea,N());break;case 32:M===ta&&($t.altKey?(b&&(c=l-h*b,n=i+h*b),k&&(d=f-_*k,a=o+_*k),M=na):(b<0?c=l:b>0&&(n=i),k<0?d=f:k>0&&(a=o),M=ea),H.attr("cursor",oa[v]),N());break;default:return}Ki()},!0).on("mousemove.brush",F,!0).on("mouseup.brush",B,!0);ye($t.view)}Zi(),Jr(g),s.call(g),j.start()}function F(){var t=de(g);!E||m||y||(Math.abs(t[0]-C[0])>Math.abs(t[1]-C[1])?y=!0:m=!0),C=t,p=!0,Ki(),N()}function N(){var t;switch(h=C[0]-A[0],_=C[1]-A[1],M){case ta:case Qi:b&&(h=Math.max(T-n,Math.min(Y-c,h)),i=n+h,l=c+h),k&&(_=Math.max(D-a,Math.min(S-d,_)),o=a+_,f=d+_);break;case ea:b<0?(h=Math.max(T-n,Math.min(Y-n,h)),i=n+h,l=c):b>0&&(h=Math.max(T-c,Math.min(Y-c,h)),i=n,l=c+h),k<0?(_=Math.max(D-a,Math.min(S-a,_)),o=a+_,f=d):k>0&&(_=Math.max(D-d,Math.min(S-d,_)),o=a,f=d+_);break;case na:b&&(i=Math.max(T,Math.min(Y,n-h*b)),l=Math.max(T,Math.min(Y,c+h*b))),k&&(o=Math.max(D,Math.min(S,a-_*k)),f=Math.max(D,Math.min(S,d+_*k)))}l<i&&(b*=-1,t=n,n=c,c=t,t=i,i=l,l=t,v in sa&&H.attr("cursor",oa[v=sa[v]])),f<o&&(k*=-1,t=a,a=d,d=t,t=o,o=f,f=t,v in ua&&H.attr("cursor",oa[v=ua[v]])),L.selection&&(x=L.selection),m&&(i=x[0][0],l=x[1][0]),y&&(o=x[0][1],f=x[1][1]),x[0][0]===i&&x[0][1]===o&&x[1][0]===l&&x[1][1]===f||(L.selection=[[i,o],[l,f]],s.call(g),j.brush())}function B(){if(Zi(),$t.touches){if($t.touches.length)return;e&&clearTimeout(e),e=setTimeout(function(){e=null},500),O.on("touchmove.brush touchend.brush touchcancel.brush",null)}else ge($t.view,p),P.on("keydown.brush keyup.brush mousemove.brush mouseup.brush",null);O.attr("pointer-events","all"),H.attr("cursor",oa.overlay),L.selection&&(x=L.selection),pa(x)&&(L.selection=null,s.call(g)),j.end()}}function d(){var e=this.__brush||{selection:null};return e.extent=n.apply(this,arguments),e.dim=t,e}return o.move=function(e,n){e.selection?e.on("start.brush",function(){u(this,arguments).beforestart().start()}).on("interrupt.brush end.brush",function(){u(this,arguments).end()}).tween("brush",function(){var e=this,r=e.__brush,i=u(e,arguments),a=r.selection,o=t.input("function"==typeof n?n.apply(this,arguments):n,r.extent),c=$n(a,o);function l(t){r.selection=1===t&&pa(o)?null:c(t),s.call(e),i.brush()}return a&&o?l:l(1)}):e.each(function(){var e=arguments,r=this.__brush,i=t.input("function"==typeof n?n.apply(this,e):n,r.extent),a=u(this,e).beforestart();Jr(this),r.selection=null==i||pa(i)?null:i,s.call(this),a.start().brush().end()})},c.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},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(e){Kt(new Xi(o,e,t.output(this.state.selection)),i.apply,i,[e,this.that,this.args])}},o.extent=function(t){return arguments.length?(n="function"==typeof t?t:Ji([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),o):n},o.filter=function(t){return arguments.length?(r="function"==typeof t?t:Ji(!!t),o):r},o.handleSize=function(t){return arguments.length?(a=+t,o):a},o.on=function(){var t=i.on.apply(i,arguments);return t===i?o:t},o}var ba=Math.cos,ka=Math.sin,La=Math.PI,wa=La/2,xa=2*La,Ta=Math.max;var Da=function(){var t=0,e=null,n=null,r=null;function i(i){var a,o,s,u,c,l,d=i.length,f=[],h=k(d),_=[],p=[],m=p.groups=new Array(d),y=new Array(d*d);for(a=0,c=-1;++c<d;){for(o=0,l=-1;++l<d;)o+=i[c][l];f.push(o),_.push(k(d)),a+=o}for(e&&h.sort(function(t,n){return e(f[t],f[n])}),n&&_.forEach(function(t,e){t.sort(function(t,r){return n(i[e][t],i[e][r])})}),u=(a=Ta(0,xa-t*d)/a)?t:xa/d,o=0,c=-1;++c<d;){for(s=o,l=-1;++l<d;){var g=h[c],v=_[g][l],M=i[g][v],b=o,L=o+=M*a;y[v*d+g]={index:g,subindex:v,startAngle:b,endAngle:L,value:M}}m[g]={index:g,startAngle:s,endAngle:o,value:f[g]},o+=u}for(c=-1;++c<d;)for(l=c-1;++l<d;){var w=y[l*d+c],x=y[c*d+l];(w.value||x.value)&&p.push(w.value<x.value?{source:x,target:w}:{source:w,target:x})}return r?p.sort(r):p}return i.padAngle=function(e){return arguments.length?(t=Ta(0,e),i):t},i.sortGroups=function(t){return arguments.length?(e=t,i):e},i.sortSubgroups=function(t){return arguments.length?(n=t,i):n},i.sortChords=function(t){return arguments.length?(null==t?r=null:(e=t,r=function(t,n){return e(t.source.value+t.target.value,n.source.value+n.target.value)})._=t,i):r&&r._;var e},i},Ya=Array.prototype.slice,Sa=function(t){return function(){return t}},Ea=Math.PI,Aa=2*Ea,Ca=Aa-1e-6;function ja(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function Oa(){return new ja}ja.prototype=Oa.prototype={constructor:ja,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,n,r){this._+="Q"+ +t+","+ +e+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(t,e,n,r,i,a){this._+="C"+ +t+","+ +e+","+ +n+","+ +r+","+(this._x1=+i)+","+(this._y1=+a)},arcTo:function(t,e,n,r,i){t=+t,e=+e,n=+n,r=+r,i=+i;var a=this._x1,o=this._y1,s=n-t,u=r-e,c=a-t,l=o-e,d=c*c+l*l;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(d>1e-6)if(Math.abs(l*s-u*c)>1e-6&&i){var f=n-a,h=r-o,_=s*s+u*u,p=f*f+h*h,m=Math.sqrt(_),y=Math.sqrt(d),g=i*Math.tan((Ea-Math.acos((_+d-p)/(2*m*y)))/2),v=g/y,M=g/m;Math.abs(v-1)>1e-6&&(this._+="L"+(t+v*c)+","+(e+v*l)),this._+="A"+i+","+i+",0,0,"+ +(l*f>c*h)+","+(this._x1=t+M*s)+","+(this._y1=e+M*u)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,i,a){t=+t,e=+e;var o=(n=+n)*Math.cos(r),s=n*Math.sin(r),u=t+o,c=e+s,l=1^a,d=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+u+","+c:(Math.abs(this._x1-u)>1e-6||Math.abs(this._y1-c)>1e-6)&&(this._+="L"+u+","+c),n&&(d<0&&(d=d%Aa+Aa),d>Ca?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-s)+"A"+n+","+n+",0,1,"+l+","+(this._x1=u)+","+(this._y1=c):d>1e-6&&(this._+="A"+n+","+n+",0,"+ +(d>=Ea)+","+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 Ha=Oa;function Pa(t){return t.source}function Fa(t){return t.target}function Na(t){return t.radius}function Ba(t){return t.startAngle}function Ra(t){return t.endAngle}var Ia=function(){var t=Pa,e=Fa,n=Na,r=Ba,i=Ra,a=null;function o(){var o,s=Ya.call(arguments),u=t.apply(this,s),c=e.apply(this,s),l=+n.apply(this,(s[0]=u,s)),d=r.apply(this,s)-wa,f=i.apply(this,s)-wa,h=l*ba(d),_=l*ka(d),p=+n.apply(this,(s[0]=c,s)),m=r.apply(this,s)-wa,y=i.apply(this,s)-wa;if(a||(a=o=Ha()),a.moveTo(h,_),a.arc(0,0,l,d,f),d===m&&f===y||(a.quadraticCurveTo(0,0,p*ba(m),p*ka(m)),a.arc(0,0,p,m,y)),a.quadraticCurveTo(0,0,h,_),a.closePath(),o)return a=null,o+""||null}return o.radius=function(t){return arguments.length?(n="function"==typeof t?t:Sa(+t),o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Sa(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Sa(+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 za(){}function Wa(t,e){var n=new za;if(t instanceof za)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<a;)n.set(i,t[i]);else for(;++i<a;)n.set(e(r=t[i],i,t),r)}else if(t)for(var o in t)n.set(o,t[o]);return n}za.prototype=Wa.prototype={constructor:za,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,e){return this["$"+t]=e,this},remove:function(t){var e="$"+t;return e in this&&delete this[e]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var e in this)"$"===e[0]&&t.push(e.slice(1));return t},values:function(){var t=[];for(var e in this)"$"===e[0]&&t.push(this[e]);return t},entries:function(){var t=[];for(var e in this)"$"===e[0]&&t.push({key:e.slice(1),value:this[e]});return t},size:function(){var t=0;for(var e in this)"$"===e[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var e in this)"$"===e[0]&&t(this[e],e.slice(1),this)}};var qa=Wa,Ua=function(){var t,e,n,r=[],i=[];function a(n,i,o,s){if(i>=r.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var u,c,l,d=-1,f=n.length,h=r[i++],_=qa(),p=o();++d<f;)(l=_.get(u=h(c=n[d])+""))?l.push(c):_.set(u,[c]);return _.each(function(t,e){s(p,e,a(t,i,o,s))}),p}return n={object:function(t){return a(t,0,Va,$a)},map:function(t){return a(t,0,Ga,Ja)},entries:function(t){return function t(n,a){if(++a>r.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,Ga,Ja),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 Va(){return{}}function $a(t,e,n){t[e]=n}function Ga(){return qa()}function Ja(t,e,n){t.set(e,n)}function Xa(){}var Za=qa.prototype;function Ka(t,e){var n=new Xa;if(t instanceof Xa)t.each(function(t){n.add(t)});else if(t){var r=-1,i=t.length;if(null==e)for(;++r<i;)n.add(t[r]);else for(;++r<i;)n.add(e(t[r],r,t))}return n}Xa.prototype=Ka.prototype={constructor:Xa,has:Za.has,add:function(t){return this["$"+(t+="")]=t,this},remove:Za.remove,clear:Za.clear,values:Za.keys,size:Za.size,empty:Za.empty,each:Za.each};var Qa=Ka,to=function(t){var e=[];for(var n in t)e.push(n);return e},eo=function(t){var e=[];for(var n in t)e.push(t[n]);return e},no=function(t){var e=[];for(var n in t)e.push({key:n,value:t[n]});return e},ro={},io={},ao=34,oo=10,so=13;function uo(t){return new Function("d","return {"+t.map(function(t,e){return JSON.stringify(t)+": d["+e+"]"}).join(",")+"}")}var co=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,u=a<=0,c=!1;function l(){if(u)return io;if(c)return c=!1,ro;var e,r,i=o;if(t.charCodeAt(i)===ao){for(;o++<a&&t.charCodeAt(o)!==ao||t.charCodeAt(++o)===ao;);return(e=o)>=a?u=!0:(r=t.charCodeAt(o++))===oo?c=!0:r===so&&(c=!0,t.charCodeAt(o)===oo&&++o),t.slice(i+1,e-1).replace(/""/g,'"')}for(;o<a;){if((r=t.charCodeAt(e=o++))===oo)c=!0;else if(r===so)c=!0,t.charCodeAt(o)===oo&&++o;else if(r!==n)continue;return t.slice(i,e)}return u=!0,t.slice(i,a)}for(t.charCodeAt(a-1)===oo&&--a,t.charCodeAt(a-1)===so&&--a;(r=l())!==io;){for(var d=[];r!==ro&&r!==io;)d.push(r),r=l();e&&null==(d=e(d,s++))||i.push(d)}return i}function i(e){return e.map(a).join(t)}function a(t){return null==t?"":e.test(t+="")?'"'+t.replace(/"/g,'""')+'"':t}return{parse:function(t,e){var n,i,a=r(t,function(t,r){if(n)return n(t,r-1);i=t,n=e?function(t,e){var n=uo(t);return function(r,i){return e(n(r),i,t)}}(t,e):uo(t)});return a.columns=i||[],a},parseRows:r,format:function(e,n){return null==n&&(n=function(t){var e=Object.create(null),n=[];return t.forEach(function(t){for(var r in t)r in e||n.push(e[r]=r)}),n}(e)),[n.map(a).join(t)].concat(e.map(function(e){return n.map(function(t){return a(e[t])}).join(t)})).join("\n")},formatRows:function(t){return t.map(i).join("\n")}}},lo=co(","),fo=lo.parse,ho=lo.parseRows,_o=lo.format,po=lo.formatRows,mo=co("\t"),yo=mo.parse,go=mo.parseRows,vo=mo.format,Mo=mo.formatRows,bo=function(t,e){var n;function r(){var r,i,a=n.length,o=0,s=0;for(r=0;r<a;++r)o+=(i=n[r]).x,s+=i.y;for(o=o/a-t,s=s/a-e,r=0;r<a;++r)(i=n[r]).x-=o,i.y-=s}return null==t&&(t=0),null==e&&(e=0),r.initialize=function(t){n=t},r.x=function(e){return arguments.length?(t=+e,r):t},r.y=function(t){return arguments.length?(e=+t,r):e},r},ko=function(t){return function(){return t}},Lo=function(){return 1e-6*(Math.random()-.5)};function wo(t,e,n,r){if(isNaN(e)||isNaN(n))return t;var i,a,o,s,u,c,l,d,f,h=t._root,_={data:r},p=t._x0,m=t._y0,y=t._x1,g=t._y1;if(!h)return t._root=_,t;for(;h.length;)if((c=e>=(a=(p+y)/2))?p=a:y=a,(l=n>=(o=(m+g)/2))?m=o:g=o,i=h,!(h=h[d=l<<1|c]))return i[d]=_,t;if(s=+t._x.call(null,h.data),u=+t._y.call(null,h.data),e===s&&n===u)return _.next=h,i?i[d]=_:t._root=_,t;do{i=i?i[d]=new Array(4):t._root=new Array(4),(c=e>=(a=(p+y)/2))?p=a:y=a,(l=n>=(o=(m+g)/2))?m=o:g=o}while((d=l<<1|c)==(f=(u>=o)<<1|s>=a));return i[f]=h,i[d]=_,t}var xo=function(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i};function To(t){return t[0]}function Do(t){return t[1]}function Yo(t,e,n){var r=new So(null==e?To:e,null==n?Do:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function So(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 Eo(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var Ao=Yo.prototype=So.prototype;function Co(t){return t.x+t.vx}function jo(t){return t.y+t.vy}Ao.copy=function(){var t,e,n=new So(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=Eo(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]=Eo(e));return n},Ao.add=function(t){var e=+this._x.call(null,t),n=+this._y.call(null,t);return wo(this.cover(e,n),e,n,t)},Ao.addAll=function(t){var e,n,r,i,a=t.length,o=new Array(a),s=new Array(a),u=1/0,c=1/0,l=-1/0,d=-1/0;for(n=0;n<a;++n)isNaN(r=+this._x.call(null,e=t[n]))||isNaN(i=+this._y.call(null,e))||(o[n]=r,s[n]=i,r<u&&(u=r),r>l&&(l=r),i<c&&(c=i),i>d&&(d=i));for(l<u&&(u=this._x0,l=this._x1),d<c&&(c=this._y0,d=this._y1),this.cover(u,c).cover(l,d),n=0;n<a;++n)wo(this,o[n],s[n],t[n]);return this},Ao.cover=function(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var n=this._x0,r=this._y0,i=this._x1,a=this._y1;if(isNaN(n))i=(n=Math.floor(t))+1,a=(r=Math.floor(e))+1;else{if(!(n>t||t>i||r>e||e>a))return this;var o,s,u=i-n,c=this._root;switch(s=(e<(r+a)/2)<<1|t<(n+i)/2){case 0:do{(o=new Array(4))[s]=c,c=o}while(a=r+(u*=2),t>(i=n+u)||e>a);break;case 1:do{(o=new Array(4))[s]=c,c=o}while(a=r+(u*=2),(n=i-u)>t||e>a);break;case 2:do{(o=new Array(4))[s]=c,c=o}while(r=a-(u*=2),t>(i=n+u)||r>e);break;case 3:do{(o=new Array(4))[s]=c,c=o}while(r=a-(u*=2),(n=i-u)>t||r>e)}this._root&&this._root.length&&(this._root=c)}return this._x0=n,this._y0=r,this._x1=i,this._y1=a,this},Ao.data=function(){var t=[];return this.visit(function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)}),t},Ao.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},Ao.find=function(t,e,n){var r,i,a,o,s,u,c,l=this._x0,d=this._y0,f=this._x1,h=this._y1,_=[],p=this._root;for(p&&_.push(new xo(p,l,d,f,h)),null==n?n=1/0:(l=t-n,d=e-n,f=t+n,h=e+n,n*=n);u=_.pop();)if(!(!(p=u.node)||(i=u.x0)>f||(a=u.y0)>h||(o=u.x1)<l||(s=u.y1)<d))if(p.length){var m=(i+o)/2,y=(a+s)/2;_.push(new xo(p[3],m,y,o,s),new xo(p[2],i,y,m,s),new xo(p[1],m,a,o,y),new xo(p[0],i,a,m,y)),(c=(e>=y)<<1|t>=m)&&(u=_[_.length-1],_[_.length-1]=_[_.length-1-c],_[_.length-1-c]=u)}else{var g=t-+this._x.call(null,p.data),v=e-+this._y.call(null,p.data),M=g*g+v*v;if(M<n){var b=Math.sqrt(n=M);l=t-b,d=e-b,f=t+b,h=e+b,r=p.data}}return r},Ao.remove=function(t){if(isNaN(a=+this._x.call(null,t))||isNaN(o=+this._y.call(null,t)))return this;var e,n,r,i,a,o,s,u,c,l,d,f,h=this._root,_=this._x0,p=this._y0,m=this._x1,y=this._y1;if(!h)return this;if(h.length)for(;;){if((c=a>=(s=(_+m)/2))?_=s:m=s,(l=o>=(u=(p+y)/2))?p=u:y=u,e=h,!(h=h[d=l<<1|c]))return this;if(!h.length)break;(e[d+1&3]||e[d+2&3]||e[d+3&3])&&(n=e,f=d)}for(;h.data!==t;)if(r=h,!(h=h.next))return this;return(i=h.next)&&delete h.next,r?(i?r.next=i:delete r.next,this):e?(i?e[d]=i:delete e[d],(h=e[0]||e[1]||e[2]||e[3])&&h===(e[3]||e[2]||e[1]||e[0])&&!h.length&&(n?n[f]=h:this._root=h),this):(this._root=i,this)},Ao.removeAll=function(t){for(var e=0,n=t.length;e<n;++e)this.remove(t[e]);return this},Ao.root=function(){return this._root},Ao.size=function(){var t=0;return this.visit(function(e){if(!e.length)do{++t}while(e=e.next)}),t},Ao.visit=function(t){var e,n,r,i,a,o,s=[],u=this._root;for(u&&s.push(new xo(u,this._x0,this._y0,this._x1,this._y1));e=s.pop();)if(!t(u=e.node,r=e.x0,i=e.y0,a=e.x1,o=e.y1)&&u.length){var c=(r+a)/2,l=(i+o)/2;(n=u[3])&&s.push(new xo(n,c,l,a,o)),(n=u[2])&&s.push(new xo(n,r,l,c,o)),(n=u[1])&&s.push(new xo(n,c,i,a,l)),(n=u[0])&&s.push(new xo(n,r,i,c,l))}return this},Ao.visitAfter=function(t){var e,n=[],r=[];for(this._root&&n.push(new xo(this._root,this._x0,this._y0,this._x1,this._y1));e=n.pop();){var i=e.node;if(i.length){var a,o=e.x0,s=e.y0,u=e.x1,c=e.y1,l=(o+u)/2,d=(s+c)/2;(a=i[0])&&n.push(new xo(a,o,s,l,d)),(a=i[1])&&n.push(new xo(a,l,s,u,d)),(a=i[2])&&n.push(new xo(a,o,d,l,c)),(a=i[3])&&n.push(new xo(a,l,d,u,c))}r.push(e)}for(;e=r.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},Ao.x=function(t){return arguments.length?(this._x=t,this):this._x},Ao.y=function(t){return arguments.length?(this._y=t,this):this._y};var Oo=function(t){var e,n,r=1,i=1;function a(){for(var t,a,s,u,c,l,d,f=e.length,h=0;h<i;++h)for(a=Yo(e,Co,jo).visitAfter(o),t=0;t<f;++t)s=e[t],l=n[s.index],d=l*l,u=s.x+s.vx,c=s.y+s.vy,a.visit(_);function _(t,e,n,i,a){var o=t.data,f=t.r,h=l+f;if(!o)return e>u+h||i<u-h||n>c+h||a<c-h;if(o.index>s.index){var _=u-o.x-o.vx,p=c-o.y-o.vy,m=_*_+p*p;m<h*h&&(0===_&&(m+=(_=Lo())*_),0===p&&(m+=(p=Lo())*p),m=(h-(m=Math.sqrt(m)))/m*r,s.vx+=(_*=m)*(h=(f*=f)/(d+f)),s.vy+=(p*=m)*h,o.vx-=_*(h=1-h),o.vy-=p*h)}}}function o(t){if(t.data)return t.r=n[t.data.index];for(var e=t.r=0;e<4;++e)t[e]&&t[e].r>t.r&&(t.r=t[e].r)}function s(){if(e){var r,i,a=e.length;for(n=new Array(a),r=0;r<a;++r)i=e[r],n[i.index]=+t(i,r,e)}}return"function"!=typeof t&&(t=ko(null==t?1:+t)),a.initialize=function(t){e=t,s()},a.iterations=function(t){return arguments.length?(i=+t,a):i},a.strength=function(t){return arguments.length?(r=+t,a):r},a.radius=function(e){return arguments.length?(t="function"==typeof e?e:ko(+e),s(),a):t},a};function Ho(t){return t.index}function Po(t,e){var n=t.get(e);if(!n)throw new Error("missing: "+e);return n}var Fo=function(t){var e,n,r,i,a,o=Ho,s=function(t){return 1/Math.min(i[t.source.index],i[t.target.index])},u=ko(30),c=1;function l(r){for(var i=0,o=t.length;i<c;++i)for(var s,u,l,d,f,h,_,p=0;p<o;++p)u=(s=t[p]).source,d=(l=s.target).x+l.vx-u.x-u.vx||Lo(),f=l.y+l.vy-u.y-u.vy||Lo(),d*=h=((h=Math.sqrt(d*d+f*f))-n[p])/h*r*e[p],f*=h,l.vx-=d*(_=a[p]),l.vy-=f*_,u.vx+=d*(_=1-_),u.vy+=f*_}function d(){if(r){var s,u,c=r.length,l=t.length,d=qa(r,o);for(s=0,i=new Array(c);s<l;++s)(u=t[s]).index=s,"object"!=typeof u.source&&(u.source=Po(d,u.source)),"object"!=typeof u.target&&(u.target=Po(d,u.target)),i[u.source.index]=(i[u.source.index]||0)+1,i[u.target.index]=(i[u.target.index]||0)+1;for(s=0,a=new Array(l);s<l;++s)u=t[s],a[s]=i[u.source.index]/(i[u.source.index]+i[u.target.index]);e=new Array(l),f(),n=new Array(l),h()}}function f(){if(r)for(var n=0,i=t.length;n<i;++n)e[n]=+s(t[n],n,t)}function h(){if(r)for(var e=0,i=t.length;e<i;++e)n[e]=+u(t[e],e,t)}return null==t&&(t=[]),l.initialize=function(t){r=t,d()},l.links=function(e){return arguments.length?(t=e,d(),l):t},l.id=function(t){return arguments.length?(o=t,l):o},l.iterations=function(t){return arguments.length?(c=+t,l):c},l.strength=function(t){return arguments.length?(s="function"==typeof t?t:ko(+t),f(),l):s},l.distance=function(t){return arguments.length?(u="function"==typeof t?t:ko(+t),h(),l):u},l};function No(t){return t.x}function Bo(t){return t.y}var Ro,Io=10,zo=Math.PI*(3-Math.sqrt(5)),Wo=function(t){var e,n=1,r=.001,i=1-Math.pow(r,1/300),a=0,o=.6,s=qa(),u=Sr(l),c=ft("tick","end");function l(){d(),c.call("tick",e),n<r&&(u.stop(),c.call("end",e))}function d(){var e,r,u=t.length;for(n+=(a-n)*i,s.each(function(t){t(n)}),e=0;e<u;++e)null==(r=t[e]).fx?r.x+=r.vx*=o:(r.x=r.fx,r.vx=0),null==r.fy?r.y+=r.vy*=o:(r.y=r.fy,r.vy=0)}function f(){for(var e,n=0,r=t.length;n<r;++n){if((e=t[n]).index=n,isNaN(e.x)||isNaN(e.y)){var i=Io*Math.sqrt(n),a=n*zo;e.x=i*Math.cos(a),e.y=i*Math.sin(a)}(isNaN(e.vx)||isNaN(e.vy))&&(e.vx=e.vy=0)}}function h(e){return e.initialize&&e.initialize(t),e}return null==t&&(t=[]),f(),e={tick:d,restart:function(){return u.restart(l),e},stop:function(){return u.stop(),e},nodes:function(n){return arguments.length?(t=n,f(),s.each(h),e):t},alpha:function(t){return arguments.length?(n=+t,e):n},alphaMin:function(t){return arguments.length?(r=+t,e):r},alphaDecay:function(t){return arguments.length?(i=+t,e):+i},alphaTarget:function(t){return arguments.length?(a=+t,e):a},velocityDecay:function(t){return arguments.length?(o=1-t,e):1-o},force:function(t,n){return arguments.length>1?(null==n?s.remove(t):s.set(t,h(n)),e):s.get(t)},find:function(e,n,r){var i,a,o,s,u,c=0,l=t.length;for(null==r?r=1/0:r*=r,c=0;c<l;++c)(o=(i=e-(s=t[c]).x)*i+(a=n-s.y)*a)<r&&(u=s,r=o);return u},on:function(t,n){return arguments.length>1?(c.on(t,n),e):c.on(t)}}},qo=function(){var t,e,n,r,i=ko(-30),a=1,o=1/0,s=.81;function u(r){var i,a=t.length,o=Yo(t,No,Bo).visitAfter(l);for(n=r,i=0;i<a;++i)e=t[i],o.visit(d)}function c(){if(t){var e,n,a=t.length;for(r=new Array(a),e=0;e<a;++e)n=t[e],r[n.index]=+i(n,e,t)}}function l(t){var e,n,i,a,o,s=0,u=0;if(t.length){for(i=a=o=0;o<4;++o)(e=t[o])&&(n=Math.abs(e.value))&&(s+=e.value,u+=n,i+=n*e.x,a+=n*e.y);t.x=i/u,t.y=a/u}else{(e=t).x=e.data.x,e.y=e.data.y;do{s+=r[e.data.index]}while(e=e.next)}t.value=s}function d(t,i,u,c){if(!t.value)return!0;var l=t.x-e.x,d=t.y-e.y,f=c-i,h=l*l+d*d;if(f*f/s<h)return h<o&&(0===l&&(h+=(l=Lo())*l),0===d&&(h+=(d=Lo())*d),h<a&&(h=Math.sqrt(a*h)),e.vx+=l*t.value*n/h,e.vy+=d*t.value*n/h),!0;if(!(t.length||h>=o)){(t.data!==e||t.next)&&(0===l&&(h+=(l=Lo())*l),0===d&&(h+=(d=Lo())*d),h<a&&(h=Math.sqrt(a*h)));do{t.data!==e&&(f=r[t.data.index]*n/h,e.vx+=l*f,e.vy+=d*f)}while(t=t.next)}}return u.initialize=function(e){t=e,c()},u.strength=function(t){return arguments.length?(i="function"==typeof t?t:ko(+t),c(),u):i},u.distanceMin=function(t){return arguments.length?(a=t*t,u):Math.sqrt(a)},u.distanceMax=function(t){return arguments.length?(o=t*t,u):Math.sqrt(o)},u.theta=function(t){return arguments.length?(s=t*t,u):Math.sqrt(s)},u},Uo=function(t,e,n){var r,i,a,o=ko(.1);function s(t){for(var o=0,s=r.length;o<s;++o){var u=r[o],c=u.x-e||1e-6,l=u.y-n||1e-6,d=Math.sqrt(c*c+l*l),f=(a[o]-d)*i[o]*t/d;u.vx+=c*f,u.vy+=l*f}}function u(){if(r){var e,n=r.length;for(i=new Array(n),a=new Array(n),e=0;e<n;++e)a[e]=+t(r[e],e,r),i[e]=isNaN(a[e])?0:+o(r[e],e,r)}}return"function"!=typeof t&&(t=ko(+t)),null==e&&(e=0),null==n&&(n=0),s.initialize=function(t){r=t,u()},s.strength=function(t){return arguments.length?(o="function"==typeof t?t:ko(+t),u(),s):o},s.radius=function(e){return arguments.length?(t="function"==typeof e?e:ko(+e),u(),s):t},s.x=function(t){return arguments.length?(e=+t,s):e},s.y=function(t){return arguments.length?(n=+t,s):n},s},Vo=function(t){var e,n,r,i=ko(.1);function a(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vx+=(r[a]-i.x)*n[a]*t}function o(){if(e){var a,o=e.length;for(n=new Array(o),r=new Array(o),a=0;a<o;++a)n[a]=isNaN(r[a]=+t(e[a],a,e))?0:+i(e[a],a,e)}}return"function"!=typeof t&&(t=ko(null==t?0:+t)),a.initialize=function(t){e=t,o()},a.strength=function(t){return arguments.length?(i="function"==typeof t?t:ko(+t),o(),a):i},a.x=function(e){return arguments.length?(t="function"==typeof e?e:ko(+e),o(),a):t},a},$o=function(t){var e,n,r,i=ko(.1);function a(t){for(var i,a=0,o=e.length;a<o;++a)(i=e[a]).vy+=(r[a]-i.y)*n[a]*t}function o(){if(e){var a,o=e.length;for(n=new Array(o),r=new Array(o),a=0;a<o;++a)n[a]=isNaN(r[a]=+t(e[a],a,e))?0:+i(e[a],a,e)}}return"function"!=typeof t&&(t=ko(null==t?0:+t)),a.initialize=function(t){e=t,o()},a.strength=function(t){return arguments.length?(i="function"==typeof t?t:ko(+t),o(),a):i},a.y=function(e){return arguments.length?(t="function"==typeof e?e:ko(+e),o(),a):t},a},Go=function(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]},Jo=function(t){return(t=Go(Math.abs(t)))?t[1]:NaN},Xo=function(t,e){var n=Go(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")},Zo={"":function(t,e){t=t.toPrecision(e);t:for(var n,r=t.length,i=1,a=-1;i<r;++i)switch(t[i]){case".":a=n=i;break;case"0":0===a&&(a=i),n=i;break;case"e":break t;default:a>0&&(a=0)}return a>0?t.slice(0,a)+t.slice(n+1):t},"%":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 Xo(100*t,e)},r:Xo,s:function(t,e){var n=Go(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Ro=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")+Go(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)}},Ko=/^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;function Qo(t){return new ts(t)}function ts(t){if(!(e=Ko.exec(t)))throw new Error("invalid format: "+t);var e,n=e[1]||" ",r=e[2]||">",i=e[3]||"-",a=e[4]||"",o=!!e[5],s=e[6]&&+e[6],u=!!e[7],c=e[8]&&+e[8].slice(1),l=e[9]||"";"n"===l?(u=!0,l="g"):Zo[l]||(l=""),(o||"0"===n&&"="===r)&&(o=!0,n="0",r="="),this.fill=n,this.align=r,this.sign=i,this.symbol=a,this.zero=o,this.width=s,this.comma=u,this.precision=c,this.type=l}Qo.prototype=ts.prototype,ts.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(null==this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(null==this.precision?"":"."+Math.max(0,0|this.precision))+this.type};var es,ns,rs,is=function(t){return t},as=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],os=function(t){var e,n,r=t.grouping&&t.thousands?(e=t.grouping,n=t.thousands,function(t,r){for(var i=t.length,a=[],o=0,s=e[0],u=0;i>0&&s>0&&(u+s+1>r&&(s=Math.max(1,r-u)),a.push(t.substring(i-=s,i+s)),!((u+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(n)}):is,i=t.currency,a=t.decimal,o=t.numerals?function(t){return function(e){return e.replace(/[0-9]/g,function(e){return t[+e]})}}(t.numerals):is,s=t.percent||"%";function u(t){var e=(t=Qo(t)).fill,n=t.align,u=t.sign,c=t.symbol,l=t.zero,d=t.width,f=t.comma,h=t.precision,_=t.type,p="$"===c?i[0]:"#"===c&&/[boxX]/.test(_)?"0"+_.toLowerCase():"",m="$"===c?i[1]:/[%p]/.test(_)?s:"",y=Zo[_],g=!_||/[defgprs%]/.test(_);function v(t){var i,s,c,v=p,M=m;if("c"===_)M=y(t)+M,t="";else{var b=(t=+t)<0;if(t=y(Math.abs(t),h),b&&0==+t&&(b=!1),v=(b?"("===u?u:"-":"-"===u||"("===u?"":u)+v,M=("s"===_?as[8+Ro/3]:"")+M+(b&&"("===u?")":""),g)for(i=-1,s=t.length;++i<s;)if(48>(c=t.charCodeAt(i))||c>57){M=(46===c?a+t.slice(i+1):t.slice(i))+M,t=t.slice(0,i);break}}f&&!l&&(t=r(t,1/0));var k=v.length+t.length+M.length,L=k<d?new Array(d-k+1).join(e):"";switch(f&&l&&(t=r(L+t,L.length?d-M.length:1/0),L=""),n){case"<":t=v+t+M+L;break;case"=":t=v+L+t+M;break;case"^":t=L.slice(0,k=L.length>>1)+v+t+M+L.slice(k);break;default:t=L+v+t+M}return o(t)}return h=null==h?_?6:12:/[gprs]/.test(_)?Math.max(1,Math.min(21,h)):Math.max(0,Math.min(20,h)),v.toString=function(){return t+""},v}return{format:u,formatPrefix:function(t,e){var n=u(((t=Qo(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Jo(e)/3))),i=Math.pow(10,-r),a=as[8+r/3];return function(t){return n(i*t)+a}}}};function ss(t){return es=os(t),ns=es.format,rs=es.formatPrefix,es}ss({decimal:".",thousands:",",grouping:[3],currency:["$",""]});var us=function(t){return Math.max(0,-Jo(Math.abs(t)))},cs=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Jo(e)/3)))-Jo(Math.abs(t)))},ls=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Jo(e)-Jo(t))+1},ds=function(){return new fs};function fs(){this.reset()}fs.prototype={constructor:fs,reset:function(){this.s=this.t=0},add:function(t){_s(hs,t,this.t),_s(this,hs.s,this.s),this.s?this.t+=hs.t:this.s=hs.t},valueOf:function(){return this.s}};var hs=new fs;function _s(t,e,n){var r=t.s=e+n,i=r-e,a=r-i;t.t=e-a+(n-i)}var ps=1e-6,ms=Math.PI,ys=ms/2,gs=ms/4,vs=2*ms,Ms=180/ms,bs=ms/180,ks=Math.abs,Ls=Math.atan,ws=Math.atan2,xs=Math.cos,Ts=Math.ceil,Ds=Math.exp,Ys=(Math.floor,Math.log),Ss=Math.pow,Es=Math.sin,As=Math.sign||function(t){return t>0?1:t<0?-1:0},Cs=Math.sqrt,js=Math.tan;function Os(t){return t>1?0:t<-1?ms:Math.acos(t)}function Hs(t){return t>1?ys:t<-1?-ys:Math.asin(t)}function Ps(t){return(t=Es(t/2))*t}function Fs(){}function Ns(t,e){t&&Rs.hasOwnProperty(t.type)&&Rs[t.type](t,e)}var Bs={Feature:function(t,e){Ns(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r<i;)Ns(n[r].geometry,e)}},Rs={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)t=n[r],e.point(t[0],t[1],t[2])},LineString:function(t,e){Is(t.coordinates,e,0)},MultiLineString:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)Is(n[r],e,0)},Polygon:function(t,e){zs(t.coordinates,e)},MultiPolygon:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)zs(n[r],e)},GeometryCollection:function(t,e){for(var n=t.geometries,r=-1,i=n.length;++r<i;)Ns(n[r],e)}};function Is(t,e,n){var r,i=-1,a=t.length-n;for(e.lineStart();++i<a;)r=t[i],e.point(r[0],r[1],r[2]);e.lineEnd()}function zs(t,e){var n=-1,r=t.length;for(e.polygonStart();++n<r;)Is(t[n],e,1);e.polygonEnd()}var Ws,qs,Us,Vs,$s,Gs=function(t,e){t&&Bs.hasOwnProperty(t.type)?Bs[t.type](t,e):Ns(t,e)},Js=ds(),Xs=ds(),Zs={point:Fs,lineStart:Fs,lineEnd:Fs,polygonStart:function(){Js.reset(),Zs.lineStart=Ks,Zs.lineEnd=Qs},polygonEnd:function(){var t=+Js;Xs.add(t<0?vs+t:t),this.lineStart=this.lineEnd=this.point=Fs},sphere:function(){Xs.add(vs)}};function Ks(){Zs.point=tu}function Qs(){eu(Ws,qs)}function tu(t,e){Zs.point=eu,Ws=t,qs=e,Us=t*=bs,Vs=xs(e=(e*=bs)/2+gs),$s=Es(e)}function eu(t,e){e=(e*=bs)/2+gs;var n=(t*=bs)-Us,r=n>=0?1:-1,i=r*n,a=xs(e),o=Es(e),s=$s*o,u=Vs*a+s*xs(i),c=s*r*Es(i);Js.add(ws(c,u)),Us=t,Vs=a,$s=o}var nu=function(t){return Xs.reset(),Gs(t,Zs),2*Xs};function ru(t){return[ws(t[1],t[0]),Hs(t[2])]}function iu(t){var e=t[0],n=t[1],r=xs(n);return[r*xs(e),r*Es(e),Es(n)]}function au(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function ou(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 su(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function uu(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function cu(t){var e=Cs(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var lu,du,fu,hu,_u,pu,mu,yu,gu,vu,Mu=ds(),bu={point:ku,lineStart:wu,lineEnd:xu,polygonStart:function(){bu.point=Tu,bu.lineStart=Du,bu.lineEnd=Yu,Mu.reset(),Zs.polygonStart()},polygonEnd:function(){Zs.polygonEnd(),bu.point=ku,bu.lineStart=wu,bu.lineEnd=xu,Js<0?(lu=-(fu=180),du=-(hu=90)):Mu>ps?hu=90:Mu<-ps&&(du=-90),vu[0]=lu,vu[1]=fu}};function ku(t,e){gu.push(vu=[lu=t,fu=t]),e<du&&(du=e),e>hu&&(hu=e)}function Lu(t,e){var n=iu([t*bs,e*bs]);if(yu){var r=ou(yu,n),i=ou([r[1],-r[0],0],r);cu(i),i=ru(i);var a,o=t-_u,s=o>0?1:-1,u=i[0]*Ms*s,c=ks(o)>180;c^(s*_u<u&&u<s*t)?(a=i[1]*Ms)>hu&&(hu=a):c^(s*_u<(u=(u+360)%360-180)&&u<s*t)?(a=-i[1]*Ms)<du&&(du=a):(e<du&&(du=e),e>hu&&(hu=e)),c?t<_u?Su(lu,t)>Su(lu,fu)&&(fu=t):Su(t,fu)>Su(lu,fu)&&(lu=t):fu>=lu?(t<lu&&(lu=t),t>fu&&(fu=t)):t>_u?Su(lu,t)>Su(lu,fu)&&(fu=t):Su(t,fu)>Su(lu,fu)&&(lu=t)}else gu.push(vu=[lu=t,fu=t]);e<du&&(du=e),e>hu&&(hu=e),yu=n,_u=t}function wu(){bu.point=Lu}function xu(){vu[0]=lu,vu[1]=fu,bu.point=ku,yu=null}function Tu(t,e){if(yu){var n=t-_u;Mu.add(ks(n)>180?n+(n>0?360:-360):n)}else pu=t,mu=e;Zs.point(t,e),Lu(t,e)}function Du(){Zs.lineStart()}function Yu(){Tu(pu,mu),Zs.lineEnd(),ks(Mu)>ps&&(lu=-(fu=180)),vu[0]=lu,vu[1]=fu,yu=null}function Su(t,e){return(e-=t)<0?e+360:e}function Eu(t,e){return t[0]-e[0]}function Au(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:e<t[0]||t[1]<e}var Cu,ju,Ou,Hu,Pu,Fu,Nu,Bu,Ru,Iu,zu,Wu,qu,Uu,Vu,$u,Gu=function(t){var e,n,r,i,a,o,s;if(hu=fu=-(lu=du=1/0),gu=[],Gs(t,bu),n=gu.length){for(gu.sort(Eu),e=1,a=[r=gu[0]];e<n;++e)Au(r,(i=gu[e])[0])||Au(r,i[1])?(Su(r[0],i[1])>Su(r[0],r[1])&&(r[1]=i[1]),Su(i[0],r[1])>Su(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=Su(r[1],i[0]))>o&&(o=s,lu=i[0],fu=r[1])}return gu=vu=null,lu===1/0||du===1/0?[[NaN,NaN],[NaN,NaN]]:[[lu,du],[fu,hu]]},Ju={sphere:Fs,point:Xu,lineStart:Ku,lineEnd:ec,polygonStart:function(){Ju.lineStart=nc,Ju.lineEnd=rc},polygonEnd:function(){Ju.lineStart=Ku,Ju.lineEnd=ec}};function Xu(t,e){t*=bs;var n=xs(e*=bs);Zu(n*xs(t),n*Es(t),Es(e))}function Zu(t,e,n){Ou+=(t-Ou)/++Cu,Hu+=(e-Hu)/Cu,Pu+=(n-Pu)/Cu}function Ku(){Ju.point=Qu}function Qu(t,e){t*=bs;var n=xs(e*=bs);Uu=n*xs(t),Vu=n*Es(t),$u=Es(e),Ju.point=tc,Zu(Uu,Vu,$u)}function tc(t,e){t*=bs;var n=xs(e*=bs),r=n*xs(t),i=n*Es(t),a=Es(e),o=ws(Cs((o=Vu*a-$u*i)*o+(o=$u*r-Uu*a)*o+(o=Uu*i-Vu*r)*o),Uu*r+Vu*i+$u*a);ju+=o,Fu+=o*(Uu+(Uu=r)),Nu+=o*(Vu+(Vu=i)),Bu+=o*($u+($u=a)),Zu(Uu,Vu,$u)}function ec(){Ju.point=Xu}function nc(){Ju.point=ic}function rc(){ac(Wu,qu),Ju.point=Xu}function ic(t,e){Wu=t,qu=e,t*=bs,e*=bs,Ju.point=ac;var n=xs(e);Uu=n*xs(t),Vu=n*Es(t),$u=Es(e),Zu(Uu,Vu,$u)}function ac(t,e){t*=bs;var n=xs(e*=bs),r=n*xs(t),i=n*Es(t),a=Es(e),o=Vu*a-$u*i,s=$u*r-Uu*a,u=Uu*i-Vu*r,c=Cs(o*o+s*s+u*u),l=Hs(c),d=c&&-l/c;Ru+=d*o,Iu+=d*s,zu+=d*u,ju+=l,Fu+=l*(Uu+(Uu=r)),Nu+=l*(Vu+(Vu=i)),Bu+=l*($u+($u=a)),Zu(Uu,Vu,$u)}var oc=function(t){Cu=ju=Ou=Hu=Pu=Fu=Nu=Bu=Ru=Iu=zu=0,Gs(t,Ju);var e=Ru,n=Iu,r=zu,i=e*e+n*n+r*r;return i<1e-12&&(e=Fu,n=Nu,r=Bu,ju<ps&&(e=Ou,n=Hu,r=Pu),(i=e*e+n*n+r*r)<1e-12)?[NaN,NaN]:[ws(n,e)*Ms,Hs(r/Cs(i))*Ms]},sc=function(t){return function(){return t}},uc=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 cc(t,e){return[t>ms?t-vs:t<-ms?t+vs:t,e]}function lc(t,e,n){return(t%=vs)?e||n?uc(fc(t),hc(e,n)):fc(t):e||n?hc(e,n):cc}function dc(t){return function(e,n){return[(e+=t)>ms?e-vs:e<-ms?e+vs:e,n]}}function fc(t){var e=dc(t);return e.invert=dc(-t),e}function hc(t,e){var n=xs(t),r=Es(t),i=xs(e),a=Es(e);function o(t,e){var o=xs(e),s=xs(t)*o,u=Es(t)*o,c=Es(e),l=c*n+s*r;return[ws(u*i-l*a,s*n-c*r),Hs(l*i+u*a)]}return o.invert=function(t,e){var o=xs(e),s=xs(t)*o,u=Es(t)*o,c=Es(e),l=c*i-u*a;return[ws(u*i+c*a,s*n+l*r),Hs(l*n-s*r)]},o}cc.invert=cc;var _c=function(t){function e(e){return(e=t(e[0]*bs,e[1]*bs))[0]*=Ms,e[1]*=Ms,e}return t=lc(t[0]*bs,t[1]*bs,t.length>2?t[2]*bs:0),e.invert=function(e){return(e=t.invert(e[0]*bs,e[1]*bs))[0]*=Ms,e[1]*=Ms,e},e};function pc(t,e,n,r,i,a){if(n){var o=xs(e),s=Es(e),u=r*n;null==i?(i=e+r*vs,a=e-u/2):(i=mc(o,i),a=mc(o,a),(r>0?i<a:i>a)&&(i+=r*vs));for(var c,l=i;r>0?l>a:l<a;l-=u)c=ru([o,-s*xs(l),-s*Es(l)]),t.point(c[0],c[1])}}function mc(t,e){(e=iu(e))[0]-=t,cu(e);var n=Os(-e[1]);return((-e[2]<0?-n:n)+vs-ps)%vs}var yc=function(){var t,e,n=sc([0,0]),r=sc(90),i=sc(6),a={point:function(n,r){t.push(n=e(n,r)),n[0]*=Ms,n[1]*=Ms}};function o(){var o=n.apply(this,arguments),s=r.apply(this,arguments)*bs,u=i.apply(this,arguments)*bs;return t=[],e=lc(-o[0]*bs,-o[1]*bs,0).invert,pc(a,s,u,1),o={type:"Polygon",coordinates:[t]},t=e=null,o}return o.center=function(t){return arguments.length?(n="function"==typeof t?t:sc([+t[0],+t[1]]),o):n},o.radius=function(t){return arguments.length?(r="function"==typeof t?t:sc(+t),o):r},o.precision=function(t){return arguments.length?(i="function"==typeof t?t:sc(+t),o):i},o},gc=function(){var t,e=[];return{point:function(e,n){t.push([e,n])},lineStart:function(){e.push(t=[])},lineEnd:Fs,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}},vc=function(t,e){return ks(t[0]-e[0])<ps&&ks(t[1]-e[1])<ps};function Mc(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 bc=function(t,e,n,r,i){var a,o,s=[],u=[];if(t.forEach(function(t){if(!((e=t.length-1)<=0)){var e,n,r=t[0],o=t[e];if(vc(r,o)){for(i.lineStart(),a=0;a<e;++a)i.point((r=t[a])[0],r[1]);i.lineEnd()}else s.push(n=new Mc(r,t,null,!0)),u.push(n.o=new Mc(r,null,n,!1)),s.push(n=new Mc(o,t,null,!1)),u.push(n.o=new Mc(o,null,n,!0))}}),s.length){for(u.sort(e),kc(s),kc(u),a=0,o=u.length;a<o;++a)u[a].e=n=!n;for(var c,l,d=s[0];;){for(var f=d,h=!0;f.v;)if((f=f.n)===d)return;c=f.z,i.lineStart();do{if(f.v=f.o.v=!0,f.e){if(h)for(a=0,o=c.length;a<o;++a)i.point((l=c[a])[0],l[1]);else r(f.x,f.n.x,1,i);f=f.n}else{if(h)for(c=f.p.z,a=c.length-1;a>=0;--a)i.point((l=c[a])[0],l[1]);else r(f.x,f.p.x,-1,i);f=f.p}c=(f=f.o).z,h=!h}while(!f.v);i.lineEnd()}}};function kc(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r<e;)i.n=n=t[r],n.p=i,i=n;i.n=n=t[0],n.p=i}}var Lc=ds(),wc=function(t,e){var n=e[0],r=e[1],i=[Es(n),-xs(n),0],a=0,o=0;Lc.reset();for(var s=0,u=t.length;s<u;++s)if(l=(c=t[s]).length)for(var c,l,d=c[l-1],f=d[0],h=d[1]/2+gs,_=Es(h),p=xs(h),m=0;m<l;++m,f=g,_=M,p=b,d=y){var y=c[m],g=y[0],v=y[1]/2+gs,M=Es(v),b=xs(v),k=g-f,L=k>=0?1:-1,w=L*k,x=w>ms,T=_*M;if(Lc.add(ws(T*L*Es(w),p*b+T*xs(w))),a+=x?k+L*vs:k,x^f>=n^g>=n){var D=ou(iu(d),iu(y));cu(D);var Y=ou(i,D);cu(Y);var S=(x^k>=0?-1:1)*Hs(Y[2]);(r>S||r===S&&(D[0]||D[1]))&&(o+=x^k>=0?1:-1)}}return(a<-ps||a<ps&&Lc<-ps)^1&o},xc=function(t,e,n,r){return function(i){var a,o,s,u=e(i),c=gc(),l=e(c),d=!1,f={point:h,lineStart:p,lineEnd:m,polygonStart:function(){f.point=y,f.lineStart=g,f.lineEnd=v,o=[],a=[]},polygonEnd:function(){f.point=h,f.lineStart=p,f.lineEnd=m,o=F(o);var t=wc(a,r);o.length?(d||(i.polygonStart(),d=!0),bc(o,Dc,t,n,i)):t&&(d||(i.polygonStart(),d=!0),i.lineStart(),n(null,null,1,i),i.lineEnd()),d&&(i.polygonEnd(),d=!1),o=a=null},sphere:function(){i.polygonStart(),i.lineStart(),n(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function h(e,n){t(e,n)&&i.point(e,n)}function _(t,e){u.point(t,e)}function p(){f.point=_,u.lineStart()}function m(){f.point=h,u.lineEnd()}function y(t,e){s.push([t,e]),l.point(t,e)}function g(){l.lineStart(),s=[]}function v(){y(s[0][0],s[0][1]),l.lineEnd();var t,e,n,r,u=l.clean(),f=c.result(),h=f.length;if(s.pop(),a.push(s),s=null,h)if(1&u){if((e=(n=f[0]).length-1)>0){for(d||(i.polygonStart(),d=!0),i.lineStart(),t=0;t<e;++t)i.point((r=n[t])[0],r[1]);i.lineEnd()}}else h>1&&2&u&&f.push(f.pop().concat(f.shift())),o.push(f.filter(Tc))}return f}};function Tc(t){return t.length>1}function Dc(t,e){return((t=t.x)[0]<0?t[1]-ys-ps:ys-t[1])-((e=e.x)[0]<0?e[1]-ys-ps:ys-e[1])}var Yc=xc(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?ms:-ms,u=ks(a-n);ks(u-ms)<ps?(t.point(n,r=(r+o)/2>0?ys:-ys),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),t.point(a,r),e=0):i!==s&&u>=ms&&(ks(n-i)<ps&&(n-=i*ps),ks(a-s)<ps&&(a-=s*ps),r=function(t,e,n,r){var i,a,o=Es(t-n);return ks(o)>ps?Ls((Es(e)*(a=xs(r))*Es(n)-Es(r)*(i=xs(e))*Es(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*ys,r.point(-ms,i),r.point(0,i),r.point(ms,i),r.point(ms,0),r.point(ms,-i),r.point(0,-i),r.point(-ms,-i),r.point(-ms,0),r.point(-ms,i);else if(ks(t[0]-e[0])>ps){var a=t[0]<e[0]?ms:-ms;i=n*a/2,r.point(-a,i),r.point(0,i),r.point(a,i)}else r.point(e[0],e[1])},[-ms,-ys]);var Sc=function(t){var e=xs(t),n=6*bs,r=e>0,i=ks(e)>ps;function a(t,n){return xs(t)*xs(n)>e}function o(t,n,r){var i=[1,0,0],a=ou(iu(t),iu(n)),o=au(a,a),s=a[0],u=o-s*s;if(!u)return!r&&t;var c=e*o/u,l=-e*s/u,d=ou(i,a),f=uu(i,c);su(f,uu(a,l));var h=d,_=au(f,h),p=au(h,h),m=_*_-p*(au(f,f)-1);if(!(m<0)){var y=Cs(m),g=uu(h,(-_-y)/p);if(su(g,f),g=ru(g),!r)return g;var v,M=t[0],b=n[0],k=t[1],L=n[1];b<M&&(v=M,M=b,b=v);var w=b-M,x=ks(w-ms)<ps;if(!x&&L<k&&(v=k,k=L,L=v),x||w<ps?x?k+L>0^g[1]<(ks(g[0]-M)<ps?k:L):k<=g[1]&&g[1]<=L:w>ms^(M<=g[0]&&g[0]<=b)){var T=uu(h,(-_+y)/p);return su(T,f),[g,ru(T)]}}}function s(e,n){var i=r?t:ms-t,a=0;return e<-i?a|=1:e>i&&(a|=2),n<-i?a|=4:n>i&&(a|=8),a}return xc(a,function(t){var e,n,u,c,l;return{lineStart:function(){c=u=!1,l=1},point:function(d,f){var h,_=[d,f],p=a(d,f),m=r?p?0:s(d,f):p?s(d+(d<0?ms:-ms),f):0;if(!e&&(c=u=p)&&t.lineStart(),p!==u&&(!(h=o(e,_))||vc(e,h)||vc(_,h))&&(_[0]+=ps,_[1]+=ps,p=a(_[0],_[1])),p!==u)l=0,p?(t.lineStart(),h=o(_,e),t.point(h[0],h[1])):(h=o(e,_),t.point(h[0],h[1]),t.lineEnd()),e=h;else if(i&&e&&r^p){var y;m&n||!(y=o(_,e,!0))||(l=0,r?(t.lineStart(),t.point(y[0][0],y[0][1]),t.point(y[1][0],y[1][1]),t.lineEnd()):(t.point(y[1][0],y[1][1]),t.lineEnd(),t.lineStart(),t.point(y[0][0],y[0][1])))}!p||e&&vc(e,_)||t.point(_[0],_[1]),e=_,u=p,n=m},lineEnd:function(){u&&t.lineEnd(),e=null},clean:function(){return l|(c&&u)<<1}}},function(e,r,i,a){pc(a,t,n,i,e,r)},r?[0,-t]:[-ms,t-ms])},Ec=function(t,e,n,r,i,a){var o,s=t[0],u=t[1],c=0,l=1,d=e[0]-s,f=e[1]-u;if(o=n-s,d||!(o>0)){if(o/=d,d<0){if(o<c)return;o<l&&(l=o)}else if(d>0){if(o>l)return;o>c&&(c=o)}if(o=i-s,d||!(o<0)){if(o/=d,d<0){if(o>l)return;o>c&&(c=o)}else if(d>0){if(o<c)return;o<l&&(l=o)}if(o=r-u,f||!(o>0)){if(o/=f,f<0){if(o<c)return;o<l&&(l=o)}else if(f>0){if(o>l)return;o>c&&(c=o)}if(o=a-u,f||!(o<0)){if(o/=f,f<0){if(o>l)return;o>c&&(c=o)}else if(f>0){if(o<c)return;o<l&&(l=o)}return c>0&&(t[0]=s+c*d,t[1]=u+c*f),l<1&&(e[0]=s+l*d,e[1]=u+l*f),!0}}}}},Ac=1e9,Cc=-Ac;function jc(t,e,n,r){function i(i,a){return t<=i&&i<=n&&e<=a&&a<=r}function a(i,a,s,c){var l=0,d=0;if(null==i||(l=o(i,s))!==(d=o(a,s))||u(i,a)<0^s>0)do{c.point(0===l||3===l?t:n,l>1?r:e)}while((l=(l+s+4)%4)!==d);else c.point(a[0],a[1])}function o(r,i){return ks(r[0]-t)<ps?i>0?0:3:ks(r[0]-n)<ps?i>0?2:1:ks(r[1]-e)<ps?i>0?1:0:i>0?3:2}function s(t,e){return u(t.x,e.x)}function u(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 u,c,l,d,f,h,_,p,m,y,g,v=o,M=gc(),b={point:k,lineStart:function(){b.point=L,c&&c.push(l=[]);y=!0,m=!1,_=p=NaN},lineEnd:function(){u&&(L(d,f),h&&m&&M.rejoin(),u.push(M.result()));b.point=k,m&&v.lineEnd()},polygonStart:function(){v=M,u=[],c=[],g=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=c.length;n<i;++n)for(var a,o,s=c[n],u=1,l=s.length,d=s[0],f=d[0],h=d[1];u<l;++u)a=f,o=h,d=s[u],f=d[0],h=d[1],o<=r?h>r&&(f-a)*(r-o)>(h-o)*(t-a)&&++e:h<=r&&(f-a)*(r-o)<(h-o)*(t-a)&&--e;return e}(),n=g&&e,i=(u=F(u)).length;(n||i)&&(o.polygonStart(),n&&(o.lineStart(),a(null,null,1,o),o.lineEnd()),i&&bc(u,s,e,a,o),o.polygonEnd());v=o,u=c=l=null}};function k(t,e){i(t,e)&&v.point(t,e)}function L(a,o){var s=i(a,o);if(c&&l.push([a,o]),y)d=a,f=o,h=s,y=!1,s&&(v.lineStart(),v.point(a,o));else if(s&&m)v.point(a,o);else{var u=[_=Math.max(Cc,Math.min(Ac,_)),p=Math.max(Cc,Math.min(Ac,p))],M=[a=Math.max(Cc,Math.min(Ac,a)),o=Math.max(Cc,Math.min(Ac,o))];Ec(u,M,t,e,n,r)?(m||(v.lineStart(),v.point(u[0],u[1])),v.point(M[0],M[1]),s||v.lineEnd(),g=!1):s&&(v.lineStart(),v.point(a,o),g=!1)}_=a,p=o,m=s}return b}}var Oc,Hc,Pc,Fc=function(){var t,e,n,r=0,i=0,a=960,o=500;return n={stream:function(n){return t&&e===n?t:t=jc(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]]}}},Nc=ds(),Bc={sphere:Fs,point:Fs,lineStart:function(){Bc.point=Ic,Bc.lineEnd=Rc},lineEnd:Fs,polygonStart:Fs,polygonEnd:Fs};function Rc(){Bc.point=Bc.lineEnd=Fs}function Ic(t,e){Oc=t*=bs,Hc=Es(e*=bs),Pc=xs(e),Bc.point=zc}function zc(t,e){t*=bs;var n=Es(e*=bs),r=xs(e),i=ks(t-Oc),a=xs(i),o=r*Es(i),s=Pc*n-Hc*r*a,u=Hc*n+Pc*r*a;Nc.add(ws(Cs(o*o+s*s),u)),Oc=t,Hc=n,Pc=r}var Wc=function(t){return Nc.reset(),Gs(t,Bc),+Nc},qc=[null,null],Uc={type:"LineString",coordinates:qc},Vc=function(t,e){return qc[0]=t,qc[1]=e,Wc(Uc)},$c={Feature:function(t,e){return Jc(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r<i;)if(Jc(n[r].geometry,e))return!0;return!1}},Gc={Sphere:function(){return!0},Point:function(t,e){return Xc(t.coordinates,e)},MultiPoint:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)if(Xc(n[r],e))return!0;return!1},LineString:function(t,e){return Zc(t.coordinates,e)},MultiLineString:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)if(Zc(n[r],e))return!0;return!1},Polygon:function(t,e){return Kc(t.coordinates,e)},MultiPolygon:function(t,e){for(var n=t.coordinates,r=-1,i=n.length;++r<i;)if(Kc(n[r],e))return!0;return!1},GeometryCollection:function(t,e){for(var n=t.geometries,r=-1,i=n.length;++r<i;)if(Jc(n[r],e))return!0;return!1}};function Jc(t,e){return!(!t||!Gc.hasOwnProperty(t.type))&&Gc[t.type](t,e)}function Xc(t,e){return 0===Vc(t,e)}function Zc(t,e){var n=Vc(t[0],t[1]);return Vc(t[0],e)+Vc(e,t[1])<=n+ps}function Kc(t,e){return!!wc(t.map(Qc),tl(e))}function Qc(t){return(t=t.map(tl)).pop(),t}function tl(t){return[t[0]*bs,t[1]*bs]}var el=function(t,e){return(t&&$c.hasOwnProperty(t.type)?$c[t.type]:Jc)(t,e)};function nl(t,e,n){var r=k(t,e-ps,n).concat(e);return function(t){return r.map(function(e){return[t,e]})}}function rl(t,e,n){var r=k(t,e-ps,n).concat(e);return function(t){return r.map(function(e){return[e,t]})}}function il(){var t,e,n,r,i,a,o,s,u,c,l,d,f=10,h=f,_=90,p=360,m=2.5;function y(){return{type:"MultiLineString",coordinates:g()}}function g(){return k(Ts(r/_)*_,n,_).map(l).concat(k(Ts(s/p)*p,o,p).map(d)).concat(k(Ts(e/f)*f,t,f).filter(function(t){return ks(t%_)>ps}).map(u)).concat(k(Ts(a/h)*h,i,h).filter(function(t){return ks(t%p)>ps}).map(c))}return y.lines=function(){return g().map(function(t){return{type:"LineString",coordinates:t}})},y.outline=function(){return{type:"Polygon",coordinates:[l(r).concat(d(o).slice(1),l(n).reverse().slice(1),d(s).reverse().slice(1))]}},y.extent=function(t){return arguments.length?y.extentMajor(t).extentMinor(t):y.extentMinor()},y.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),y.precision(m)):[[r,s],[n,o]]},y.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),y.precision(m)):[[e,a],[t,i]]},y.step=function(t){return arguments.length?y.stepMajor(t).stepMinor(t):y.stepMinor()},y.stepMajor=function(t){return arguments.length?(_=+t[0],p=+t[1],y):[_,p]},y.stepMinor=function(t){return arguments.length?(f=+t[0],h=+t[1],y):[f,h]},y.precision=function(f){return arguments.length?(m=+f,u=nl(a,i,90),c=rl(e,t,m),l=nl(s,o,90),d=rl(r,n,m),y):m},y.extentMajor([[-180,-90+ps],[180,90-ps]]).extentMinor([[-180,-80-ps],[180,80+ps]])}function al(){return il()()}var ol,sl,ul,cl,ll=function(t,e){var n=t[0]*bs,r=t[1]*bs,i=e[0]*bs,a=e[1]*bs,o=xs(r),s=Es(r),u=xs(a),c=Es(a),l=o*xs(n),d=o*Es(n),f=u*xs(i),h=u*Es(i),_=2*Hs(Cs(Ps(a-r)+o*u*Ps(i-n))),p=Es(_),m=_?function(t){var e=Es(t*=_)/p,n=Es(_-t)/p,r=n*l+e*f,i=n*d+e*h,a=n*s+e*c;return[ws(i,r)*Ms,ws(a,Cs(r*r+i*i))*Ms]}:function(){return[n*Ms,r*Ms]};return m.distance=_,m},dl=function(t){return t},fl=ds(),hl=ds(),_l={point:Fs,lineStart:Fs,lineEnd:Fs,polygonStart:function(){_l.lineStart=pl,_l.lineEnd=gl},polygonEnd:function(){_l.lineStart=_l.lineEnd=_l.point=Fs,fl.add(ks(hl)),hl.reset()},result:function(){var t=fl/2;return fl.reset(),t}};function pl(){_l.point=ml}function ml(t,e){_l.point=yl,ol=ul=t,sl=cl=e}function yl(t,e){hl.add(cl*t-ul*e),ul=t,cl=e}function gl(){yl(ol,sl)}var vl=_l,Ml=1/0,bl=Ml,kl=-Ml,Ll=kl;var wl,xl,Tl,Dl,Yl={point:function(t,e){t<Ml&&(Ml=t);t>kl&&(kl=t);e<bl&&(bl=e);e>Ll&&(Ll=e)},lineStart:Fs,lineEnd:Fs,polygonStart:Fs,polygonEnd:Fs,result:function(){var t=[[Ml,bl],[kl,Ll]];return kl=Ll=-(bl=Ml=1/0),t}},Sl=0,El=0,Al=0,Cl=0,jl=0,Ol=0,Hl=0,Pl=0,Fl=0,Nl={point:Bl,lineStart:Rl,lineEnd:Wl,polygonStart:function(){Nl.lineStart=ql,Nl.lineEnd=Ul},polygonEnd:function(){Nl.point=Bl,Nl.lineStart=Rl,Nl.lineEnd=Wl},result:function(){var t=Fl?[Hl/Fl,Pl/Fl]:Ol?[Cl/Ol,jl/Ol]:Al?[Sl/Al,El/Al]:[NaN,NaN];return Sl=El=Al=Cl=jl=Ol=Hl=Pl=Fl=0,t}};function Bl(t,e){Sl+=t,El+=e,++Al}function Rl(){Nl.point=Il}function Il(t,e){Nl.point=zl,Bl(Tl=t,Dl=e)}function zl(t,e){var n=t-Tl,r=e-Dl,i=Cs(n*n+r*r);Cl+=i*(Tl+t)/2,jl+=i*(Dl+e)/2,Ol+=i,Bl(Tl=t,Dl=e)}function Wl(){Nl.point=Bl}function ql(){Nl.point=Vl}function Ul(){$l(wl,xl)}function Vl(t,e){Nl.point=$l,Bl(wl=Tl=t,xl=Dl=e)}function $l(t,e){var n=t-Tl,r=e-Dl,i=Cs(n*n+r*r);Cl+=i*(Tl+t)/2,jl+=i*(Dl+e)/2,Ol+=i,Hl+=(i=Dl*t-Tl*e)*(Tl+t),Pl+=i*(Dl+e),Fl+=3*i,Bl(Tl=t,Dl=e)}var Gl=Nl;function Jl(t){this._context=t}Jl.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,vs)}},result:Fs};var Xl,Zl,Kl,Ql,td,ed=ds(),nd={point:Fs,lineStart:function(){nd.point=rd},lineEnd:function(){Xl&&id(Zl,Kl),nd.point=Fs},polygonStart:function(){Xl=!0},polygonEnd:function(){Xl=null},result:function(){var t=+ed;return ed.reset(),t}};function rd(t,e){nd.point=id,Zl=Ql=t,Kl=td=e}function id(t,e){Ql-=t,td-=e,ed.add(Cs(Ql*Ql+td*td)),Ql=t,td=e}var ad=nd;function od(){this._string=[]}function sd(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}od.prototype={_radius:4.5,_circle:sd(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=sd(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 ud=function(t,e){var n,r,i=4.5;function a(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),Gs(t,n(r))),r.result()}return a.area=function(t){return Gs(t,n(vl)),vl.result()},a.measure=function(t){return Gs(t,n(ad)),ad.result()},a.bounds=function(t){return Gs(t,n(Yl)),Yl.result()},a.centroid=function(t){return Gs(t,n(Gl)),Gl.result()},a.projection=function(e){return arguments.length?(n=null==e?(t=null,dl):(t=e).stream,a):t},a.context=function(t){return arguments.length?(r=null==t?(e=null,new od):new Jl(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)},cd=function(t){return{stream:ld(t)}};function ld(t){return function(e){var n=new dd;for(var r in t)n[r]=t[r];return n.stream=e,n}}function dd(){}function fd(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),Gs(n,t.stream(Yl)),e(Yl.result()),null!=r&&t.clipExtent(r),t}function hd(t,e,n){return fd(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 _d(t,e,n){return hd(t,[[0,0],e],n)}function pd(t,e,n){return fd(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 md(t,e,n){return fd(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)}dd.prototype={constructor:dd,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 yd=16,gd=xs(30*bs),vd=function(t,e){return+e?function(t,e){function n(r,i,a,o,s,u,c,l,d,f,h,_,p,m){var y=c-r,g=l-i,v=y*y+g*g;if(v>4*e&&p--){var M=o+f,b=s+h,k=u+_,L=Cs(M*M+b*b+k*k),w=Hs(k/=L),x=ks(ks(k)-1)<ps||ks(a-d)<ps?(a+d)/2:ws(b,M),T=t(x,w),D=T[0],Y=T[1],S=D-r,E=Y-i,A=g*S-y*E;(A*A/v>e||ks((y*S+g*E)/v-.5)>.3||o*f+s*h+u*_<gd)&&(n(r,i,a,o,s,u,D,Y,x,M/=L,b/=L,k,p,m),m.point(D,Y),n(D,Y,x,M,b,k,c,l,d,f,h,_,p,m))}}return function(e){var r,i,a,o,s,u,c,l,d,f,h,_,p={point:m,lineStart:y,lineEnd:v,polygonStart:function(){e.polygonStart(),p.lineStart=M},polygonEnd:function(){e.polygonEnd(),p.lineStart=y}};function m(n,r){n=t(n,r),e.point(n[0],n[1])}function y(){l=NaN,p.point=g,e.lineStart()}function g(r,i){var a=iu([r,i]),o=t(r,i);n(l,d,c,f,h,_,l=o[0],d=o[1],c=r,f=a[0],h=a[1],_=a[2],yd,e),e.point(l,d)}function v(){p.point=m,e.lineEnd()}function M(){y(),p.point=b,p.lineEnd=k}function b(t,e){g(r=t,e),i=l,a=d,o=f,s=h,u=_,p.point=g}function k(){n(l,d,c,f,h,_,i,a,r,o,s,u,yd,e),p.lineEnd=v,v()}return p}}(t,e):function(t){return ld({point:function(e,n){e=t(e,n),this.stream.point(e[0],e[1])}})}(t)};var Md=ld({point:function(t,e){this.stream.point(t*bs,e*bs)}});function bd(t){return kd(function(){return t})()}function kd(t){var e,n,r,i,a,o,s,u,c,l,d=150,f=480,h=250,_=0,p=0,m=0,y=0,g=0,v=null,M=Yc,b=null,k=dl,L=.5,w=vd(D,L);function x(t){return[(t=a(t[0]*bs,t[1]*bs))[0]*d+n,r-t[1]*d]}function T(t){return(t=a.invert((t[0]-n)/d,(r-t[1])/d))&&[t[0]*Ms,t[1]*Ms]}function D(t,i){return[(t=e(t,i))[0]*d+n,r-t[1]*d]}function Y(){a=uc(i=lc(m,y,g),e);var t=e(_,p);return n=f-t[0]*d,r=h+t[1]*d,S()}function S(){return c=l=null,x}return x.stream=function(t){return c&&l===t?c:c=Md(function(t){return ld({point:function(e,n){var r=t(e,n);return this.stream.point(r[0],r[1])}})}(i)(M(w(k(l=t)))))},x.preclip=function(t){return arguments.length?(M=t,v=void 0,S()):M},x.postclip=function(t){return arguments.length?(k=t,b=o=s=u=null,S()):k},x.clipAngle=function(t){return arguments.length?(M=+t?Sc(v=t*bs):(v=null,Yc),S()):v*Ms},x.clipExtent=function(t){return arguments.length?(k=null==t?(b=o=s=u=null,dl):jc(b=+t[0][0],o=+t[0][1],s=+t[1][0],u=+t[1][1]),S()):null==b?null:[[b,o],[s,u]]},x.scale=function(t){return arguments.length?(d=+t,Y()):d},x.translate=function(t){return arguments.length?(f=+t[0],h=+t[1],Y()):[f,h]},x.center=function(t){return arguments.length?(_=t[0]%360*bs,p=t[1]%360*bs,Y()):[_*Ms,p*Ms]},x.rotate=function(t){return arguments.length?(m=t[0]%360*bs,y=t[1]%360*bs,g=t.length>2?t[2]%360*bs:0,Y()):[m*Ms,y*Ms,g*Ms]},x.precision=function(t){return arguments.length?(w=vd(D,L=t*t),S()):Cs(L)},x.fitExtent=function(t,e){return hd(x,t,e)},x.fitSize=function(t,e){return _d(x,t,e)},x.fitWidth=function(t,e){return pd(x,t,e)},x.fitHeight=function(t,e){return md(x,t,e)},function(){return e=t.apply(this,arguments),x.invert=e.invert&&T,Y()}}function Ld(t){var e=0,n=ms/3,r=kd(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*bs,n=t[1]*bs):[e*Ms,n*Ms]},i}function wd(t,e){var n=Es(t),r=(n+Es(e))/2;if(ks(r)<ps)return function(t){var e=xs(t);function n(t,n){return[t*e,Es(n)/e]}return n.invert=function(t,n){return[t/e,Hs(n*e)]},n}(t);var i=1+n*(2*r-n),a=Cs(i)/r;function o(t,e){var n=Cs(i-2*r*Es(e))/r;return[n*Es(t*=r),a-n*xs(t)]}return o.invert=function(t,e){var n=a-e;return[ws(t,ks(n))/r*As(n),Hs((i-(t*t+n*n)*r*r)/(2*r))]},o}var xd=function(){return Ld(wd).scale(155.424).center([0,33.6442])},Td=function(){return xd().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])};var Dd=function(){var t,e,n,r,i,a,o=Td(),s=xd().rotate([154,0]).center([-2,58.5]).parallels([55,65]),u=xd().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={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 d(){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?u:o).invert(t)},l.stream=function(n){return t&&e===n?t:(r=[o.stream(e=n),s.stream(n),u.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n<i;)r[n].point(t,e)},sphere:function(){for(var t=-1;++t<i;)r[t].sphere()},lineStart:function(){for(var t=-1;++t<i;)r[t].lineStart()},lineEnd:function(){for(var t=-1;++t<i;)r[t].lineEnd()},polygonStart:function(){for(var t=-1;++t<i;)r[t].polygonStart()},polygonEnd:function(){for(var t=-1;++t<i;)r[t].polygonEnd()}});var r,i},l.precision=function(t){return arguments.length?(o.precision(t),s.precision(t),u.precision(t),d()):o.precision()},l.scale=function(t){return arguments.length?(o.scale(t),s.scale(.35*t),u.scale(t),l.translate(o.translate())):o.scale()},l.translate=function(t){if(!arguments.length)return o.translate();var e=o.scale(),a=+t[0],l=+t[1];return n=o.translate(t).clipExtent([[a-.455*e,l-.238*e],[a+.455*e,l+.238*e]]).stream(c),r=s.translate([a-.307*e,l+.201*e]).clipExtent([[a-.425*e+ps,l+.12*e+ps],[a-.214*e-ps,l+.234*e-ps]]).stream(c),i=u.translate([a-.205*e,l+.212*e]).clipExtent([[a-.214*e+ps,l+.166*e+ps],[a-.115*e-ps,l+.234*e-ps]]).stream(c),d()},l.fitExtent=function(t,e){return hd(l,t,e)},l.fitSize=function(t,e){return _d(l,t,e)},l.fitWidth=function(t,e){return pd(l,t,e)},l.fitHeight=function(t,e){return md(l,t,e)},l.scale(1070)};function Yd(t){return function(e,n){var r=xs(e),i=xs(n),a=t(r*i);return[a*i*Es(e),a*Es(n)]}}function Sd(t){return function(e,n){var r=Cs(e*e+n*n),i=t(r),a=Es(i),o=xs(i);return[ws(e*a,r*o),Hs(r&&n*a/r)]}}var Ed=Yd(function(t){return Cs(2/(1+t))});Ed.invert=Sd(function(t){return 2*Hs(t/2)});var Ad=function(){return bd(Ed).scale(124.75).clipAngle(179.999)},Cd=Yd(function(t){return(t=Os(t))&&t/Es(t)});Cd.invert=Sd(function(t){return t});var jd=function(){return bd(Cd).scale(79.4188).clipAngle(179.999)};function Od(t,e){return[t,Ys(js((ys+e)/2))]}Od.invert=function(t,e){return[t,2*Ls(Ds(e))-ys]};var Hd=function(){return Pd(Od).scale(961/vs)};function Pd(t){var e,n,r,i=bd(t),a=i.center,o=i.scale,s=i.translate,u=i.clipExtent,c=null;function l(){var a=ms*o(),s=i(_c(i.rotate()).invert([0,0]));return u(null==c?[[s[0]-a,s[1]-a],[s[0]+a,s[1]+a]]:t===Od?[[Math.max(s[0]-a,c),e],[Math.min(s[0]+a,n),r]]:[[c,Math.max(s[1]-a,e)],[n,Math.min(s[1]+a,r)]])}return i.scale=function(t){return arguments.length?(o(t),l()):o()},i.translate=function(t){return arguments.length?(s(t),l()):s()},i.center=function(t){return arguments.length?(a(t),l()):a()},i.clipExtent=function(t){return arguments.length?(null==t?c=e=n=r=null:(c=+t[0][0],e=+t[0][1],n=+t[1][0],r=+t[1][1]),l()):null==c?null:[[c,e],[n,r]]},l()}function Fd(t){return js((ys+t)/2)}function Nd(t,e){var n=xs(t),r=t===e?Es(t):Ys(n/xs(e))/Ys(Fd(e)/Fd(t)),i=n*Ss(Fd(t),r)/r;if(!r)return Od;function a(t,e){i>0?e<-ys+ps&&(e=-ys+ps):e>ys-ps&&(e=ys-ps);var n=i/Ss(Fd(e),r);return[n*Es(r*t),i-n*xs(r*t)]}return a.invert=function(t,e){var n=i-e,a=As(r)*Cs(t*t+n*n);return[ws(t,ks(n))/r*As(n),2*Ls(Ss(i/a,1/r))-ys]},a}var Bd=function(){return Ld(Nd).scale(109.5).parallels([30,30])};function Rd(t,e){return[t,e]}Rd.invert=Rd;var Id=function(){return bd(Rd).scale(152.63)};function zd(t,e){var n=xs(t),r=t===e?Es(t):(n-xs(e))/(e-t),i=n/r+t;if(ks(r)<ps)return Rd;function a(t,e){var n=i-e,a=r*t;return[n*Es(a),i-n*xs(a)]}return a.invert=function(t,e){var n=i-e;return[ws(t,ks(n))/r*As(n),i-As(r)*Cs(t*t+n*n)]},a}var Wd=function(){return Ld(zd).scale(131.154).center([0,13.9389])};function qd(t,e){var n=xs(e),r=xs(t)*n;return[n*Es(t)/r,Es(e)/r]}qd.invert=Sd(Ls);var Ud=function(){return bd(qd).scale(144.049).clipAngle(60)};function Vd(t,e,n,r){return 1===t&&1===e&&0===n&&0===r?dl:ld({point:function(i,a){this.stream.point(i*t+n,a*e+r)}})}var $d=function(){var t,e,n,r,i,a,o=1,s=0,u=0,c=1,l=1,d=dl,f=null,h=dl;function _(){return r=i=null,a}return a={stream:function(t){return r&&i===t?r:r=d(h(i=t))},postclip:function(r){return arguments.length?(h=r,f=t=e=n=null,_()):h},clipExtent:function(r){return arguments.length?(h=null==r?(f=t=e=n=null,dl):jc(f=+r[0][0],t=+r[0][1],e=+r[1][0],n=+r[1][1]),_()):null==f?null:[[f,t],[e,n]]},scale:function(t){return arguments.length?(d=Vd((o=+t)*c,o*l,s,u),_()):o},translate:function(t){return arguments.length?(d=Vd(o*c,o*l,s=+t[0],u=+t[1]),_()):[s,u]},reflectX:function(t){return arguments.length?(d=Vd(o*(c=t?-1:1),o*l,s,u),_()):c<0},reflectY:function(t){return arguments.length?(d=Vd(o*c,o*(l=t?-1:1),s,u),_()):l<0},fitExtent:function(t,e){return hd(a,t,e)},fitSize:function(t,e){return _d(a,t,e)},fitWidth:function(t,e){return pd(a,t,e)},fitHeight:function(t,e){return md(a,t,e)}}};function Gd(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)))]}Gd.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(ks(n)>ps&&--i>0);return[t/(.8707+(a=r*r)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),r]};var Jd=function(){return bd(Gd).scale(175.295)};function Xd(t,e){return[xs(e)*Es(t),Es(e)]}Xd.invert=Sd(Hs);var Zd=function(){return bd(Xd).scale(249.5).clipAngle(90+ps)};function Kd(t,e){var n=xs(e),r=1+xs(t)*n;return[n*Es(t)/r,Es(e)/r]}Kd.invert=Sd(function(t){return 2*Ls(t)});var Qd=function(){return bd(Kd).scale(250).clipAngle(142)};function tf(t,e){return[Ys(js((ys+e)/2)),-t]}tf.invert=function(t,e){return[-e,2*Ls(Ds(t))-ys]};var ef=function(){var t=Pd(tf),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 nf(t,e){return t.parent===e.parent?1:2}function rf(t,e){return t+e.x}function af(t,e){return Math.max(t,e.y)}var of=function(){var t=nf,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(rf,0)/t.length}(n),e.y=function(t){return 1+t.reduce(af,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),u=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),c=s.x-t(s,u)/2,l=u.x+t(u,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-c)/(l-c)*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 sf(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 uf(t,e){var n,r,i,a,o,s=new ff(t),u=+t.value&&(s.value=t.value),c=[s];for(null==e&&(e=cf);n=c.pop();)if(u&&(n.value=+n.data.value),(i=e(n.data))&&(o=i.length))for(n.children=new Array(o),a=o-1;a>=0;--a)c.push(r=n.children[a]=new ff(i[a])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(df)}function cf(t){return t.children}function lf(t){t.data=t.data.data}function df(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function ff(t){this.data=t,this.depth=this.height=0,this.parent=null}ff.prototype=uf.prototype={constructor:ff,count:function(){return this.eachAfter(sf)},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<i;++r)o.push(n[r])}while(o.length);return this},eachAfter:function(t){for(var e,n,r,i=this,a=[i],o=[];i=a.pop();)if(o.push(i),e=i.children)for(n=0,r=e.length;n<r;++n)a.push(e[n]);for(;i=o.pop();)t(i);return this},eachBefore:function(t){for(var e,n,r=this,i=[r];r=i.pop();)if(t(r),e=r.children)for(n=e.length-1;n>=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;for(t=n.pop(),e=r.pop();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 uf(this).eachBefore(lf)}};var hf=Array.prototype.slice;var _f=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}(hf.call(t))).length,a=[];r<i;)e=t[r],n&&yf(n,e)?++r:(n=vf(a=pf(a,e)),r=0);return n};function pf(t,e){var n,r;if(gf(e,t))return[e];for(n=0;n<t.length;++n)if(mf(e,t[n])&&gf(Mf(t[n],e),t))return[t[n],e];for(n=0;n<t.length-1;++n)for(r=n+1;r<t.length;++r)if(mf(Mf(t[n],t[r]),e)&&mf(Mf(t[n],e),t[r])&&mf(Mf(t[r],e),t[n])&&gf(bf(t[n],t[r],e),t))return[t[n],t[r],e];throw new Error}function mf(t,e){var n=t.r-e.r,r=e.x-t.x,i=e.y-t.y;return n<0||n*n<r*r+i*i}function yf(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 gf(t,e){for(var n=0;n<e.length;++n)if(!yf(t,e[n]))return!1;return!0}function vf(t){switch(t.length){case 1:return{x:(e=t[0]).x,y:e.y,r:e.r};case 2:return Mf(t[0],t[1]);case 3:return bf(t[0],t[1],t[2])}var e}function Mf(t,e){var n=t.x,r=t.y,i=t.r,a=e.x,o=e.y,s=e.r,u=a-n,c=o-r,l=s-i,d=Math.sqrt(u*u+c*c);return{x:(n+a+u/d*l)/2,y:(r+o+c/d*l)/2,r:(d+i+s)/2}}function bf(t,e,n){var r=t.x,i=t.y,a=t.r,o=e.x,s=e.y,u=e.r,c=n.x,l=n.y,d=n.r,f=r-o,h=r-c,_=i-s,p=i-l,m=u-a,y=d-a,g=r*r+i*i-a*a,v=g-o*o-s*s+u*u,M=g-c*c-l*l+d*d,b=h*_-f*p,k=(_*M-p*v)/(2*b)-r,L=(p*m-_*y)/b,w=(h*v-f*M)/(2*b)-i,x=(f*y-h*m)/b,T=L*L+x*x-1,D=2*(a+k*L+w*x),Y=k*k+w*w-a*a,S=-(T?(D+Math.sqrt(D*D-4*T*Y))/(2*T):Y/D);return{x:r+k+L*S,y:i+w+x*S,r:S}}function kf(t,e,n){var r=t.x,i=t.y,a=e.r+n.r,o=t.r+n.r,s=e.x-r,u=e.y-i,c=s*s+u*u;if(c){var l=.5+((o*=o)-(a*=a))/(2*c),d=Math.sqrt(Math.max(0,2*a*(o+c)-(o-=c)*o-a*a))/(2*c);n.x=r+l*s+d*u,n.y=i+l*u-d*s}else n.x=r+o,n.y=i}function Lf(t,e){var n=e.x-t.x,r=e.y-t.y,i=t.r+e.r;return i*i-1e-6>n*n+r*r}function wf(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 xf(t){this._=t,this.next=null,this.previous=null}function Tf(t){if(!(i=t.length))return 0;var e,n,r,i,a,o,s,u,c,l,d;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;kf(n,e,r=t[2]),e=new xf(e),n=new xf(n),r=new xf(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(s=3;s<i;++s){kf(e._,n._,r=t[s]),r=new xf(r),u=n.next,c=e.previous,l=n._.r,d=e._.r;do{if(l<=d){if(Lf(u._,r._)){n=u,e.next=n,n.previous=e,--s;continue t}l+=u._.r,u=u.next}else{if(Lf(c._,r._)){(e=c).next=n,n.previous=e,--s;continue t}d+=c._.r,c=c.previous}}while(u!==c.next);for(r.previous=e,r.next=n,e.next=n.previous=n=r,a=wf(e);(r=r.next)!==n;)(o=wf(r))<a&&(e=r,a=o);n=e.next}for(e=[n._],r=n;(r=r.next)!==n;)e.push(r._);for(r=_f(e),s=0;s<i;++s)(e=t[s]).x-=r.x,e.y-=r.y;return r.r}var Df=function(t){return Tf(t),t};function Yf(t){if("function"!=typeof t)throw new Error;return t}function Sf(){return 0}var Ef=function(t){return function(){return t}};function Af(t){return Math.sqrt(t.value)}var Cf=function(){var t=null,e=1,n=1,r=Sf;function i(i){return i.x=e/2,i.y=n/2,t?i.eachBefore(jf(t)).eachAfter(Of(r,.5)).eachBefore(Hf(1)):i.eachBefore(jf(Af)).eachAfter(Of(Sf,1)).eachAfter(Of(r,i.r/Math.min(e,n))).eachBefore(Hf(Math.min(e,n)/(2*i.r))),i}return i.radius=function(e){return arguments.length?(t=null==(n=e)?null:Yf(n),i):t;var n},i.size=function(t){return arguments.length?(e=+t[0],n=+t[1],i):[e,n]},i.padding=function(t){return arguments.length?(r="function"==typeof t?t:Ef(+t),i):r},i};function jf(t){return function(e){e.children||(e.r=Math.max(0,+t(e)||0))}}function Of(t,e){return function(n){if(r=n.children){var r,i,a,o=r.length,s=t(n)*e||0;if(s)for(i=0;i<o;++i)r[i].r+=s;if(a=Tf(r),s)for(i=0;i<o;++i)r[i].r-=s;n.r=a+s}}}function Hf(t){return function(e){var n=e.parent;e.r*=t,n&&(e.x=n.x+t*e.x,e.y=n.y+t*e.y)}}var Pf=function(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)},Ff=function(t,e,n,r,i){for(var a,o=t.children,s=-1,u=o.length,c=t.value&&(r-e)/t.value;++s<u;)(a=o[s]).y0=n,a.y1=i,a.x0=e,a.x1=e+=a.value*c},Nf=function(){var t=1,e=1,n=0,r=!1;function i(i){var a=i.height+1;return i.x0=i.y0=n,i.x1=t,i.y1=e/a,i.eachBefore(function(t,e){return function(r){r.children&&Ff(r,r.x0,t*(r.depth+1)/e,r.x1,t*(r.depth+2)/e);var i=r.x0,a=r.y0,o=r.x1-n,s=r.y1-n;o<i&&(i=o=(i+o)/2),s<a&&(a=s=(a+s)/2),r.x0=i,r.y0=a,r.x1=o,r.y1=s}}(e,a)),r&&i.eachBefore(Pf),i}return i.round=function(t){return arguments.length?(r=!!t,i):r},i.size=function(n){return arguments.length?(t=+n[0],e=+n[1],i):[t,e]},i.padding=function(t){return arguments.length?(n=+t,i):n},i},Bf="$",Rf={depth:-1},If={};function zf(t){return t.id}function Wf(t){return t.parentId}var qf=function(){var t=zf,e=Wf;function n(n){var r,i,a,o,s,u,c,l=n.length,d=new Array(l),f={};for(i=0;i<l;++i)r=n[i],s=d[i]=new ff(r),null!=(u=t(r,i,n))&&(u+="")&&(f[c=Bf+(s.id=u)]=c in f?If:s);for(i=0;i<l;++i)if(s=d[i],null!=(u=e(n[i],i,n))&&(u+="")){if(!(o=f[Bf+u]))throw new Error("missing: "+u);if(o===If)throw new Error("ambiguous: "+u);o.children?o.children.push(s):o.children=[s],s.parent=o}else{if(a)throw new Error("multiple roots");a=s}if(!a)throw new Error("no root");if(a.parent=Rf,a.eachBefore(function(t){t.depth=t.parent.depth+1,--l}).eachBefore(df),a.parent=null,l>0)throw new Error("cycle");return a}return n.id=function(e){return arguments.length?(t=Yf(e),n):t},n.parentId=function(t){return arguments.length?(e=Yf(t),n):e},n};function Uf(t,e){return t.parent===e.parent?1:2}function Vf(t){var e=t.children;return e?e[0]:t.t}function $f(t){var e=t.children;return e?e[e.length-1]:t.t}function Gf(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 Jf(t,e,n){return t.a.parent===e.parent?t.a:n}function Xf(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}Xf.prototype=Object.create(ff.prototype);var Zf=function(){var t=Uf,e=1,n=1,r=null;function i(i){var u=function(t){for(var e,n,r,i,a,o=new Xf(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 Xf(r[i],i)),n.parent=e;return(o.parent=new Xf(null,0)).children=[o],o}(i);if(u.eachAfter(a),u.parent.m=-u.z,u.eachBefore(o),r)i.eachBefore(s);else{var c=i,l=i,d=i;i.eachBefore(function(t){t.x<c.x&&(c=t),t.x>l.x&&(l=t),t.depth>d.depth&&(d=t)});var f=c===l?1:t(c,l)/2,h=f-c.x,_=e/(l.x+f+h),p=n/(d.depth||1);i.eachBefore(function(t){t.x=(t.x+h)*_,t.y=t.depth*p})}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,u=a.parent.children[0],c=a.m,l=o.m,d=s.m,f=u.m;s=$f(s),a=Vf(a),s&&a;)u=Vf(u),(o=$f(o)).a=e,(i=s.z+d-a.z-c+t(s._,a._))>0&&(Gf(Jf(s,e,r),e,i),c+=i,l+=i),d+=s.m,c+=a.m,f+=u.m,l+=o.m;s&&!$f(o)&&(o.t=s,o.m+=d-l),a&&!Vf(u)&&(u.t=a,u.m+=c-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},Kf=function(t,e,n,r,i){for(var a,o=t.children,s=-1,u=o.length,c=t.value&&(i-n)/t.value;++s<u;)(a=o[s]).x0=e,a.x1=r,a.y0=n,a.y1=n+=a.value*c},Qf=(1+Math.sqrt(5))/2;function th(t,e,n,r,i,a){for(var o,s,u,c,l,d,f,h,_,p,m,y=[],g=e.children,v=0,M=0,b=g.length,k=e.value;v<b;){u=i-n,c=a-r;do{l=g[M++].value}while(!l&&M<b);for(d=f=l,m=l*l*(p=Math.max(c/u,u/c)/(k*t)),_=Math.max(f/m,m/d);M<b;++M){if(l+=s=g[M].value,s<d&&(d=s),s>f&&(f=s),m=l*l*p,(h=Math.max(f/m,m/d))>_){l-=s;break}_=h}y.push(o={value:l,dice:u<c,children:g.slice(v,M)}),o.dice?Ff(o,n,r,i,k?r+=c*l/k:a):Kf(o,n,r,k?n+=u*l/k:i,a),k-=l,v=M}return y}var eh=function t(e){function n(t,n,r,i,a){th(e,t,n,r,i,a)}return n.ratio=function(e){return t((e=+e)>1?e:1)},n}(Qf),nh=function(){var t=eh,e=!1,n=1,r=1,i=[0],a=Sf,o=Sf,s=Sf,u=Sf,c=Sf;function l(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(d),i=[0],e&&t.eachBefore(Pf),t}function d(e){var n=i[e.depth],r=e.x0+n,l=e.y0+n,d=e.x1-n,f=e.y1-n;d<r&&(r=d=(r+d)/2),f<l&&(l=f=(l+f)/2),e.x0=r,e.y0=l,e.x1=d,e.y1=f,e.children&&(n=i[e.depth+1]=a(e)/2,r+=c(e)-n,l+=o(e)-n,d-=s(e)-n,f-=u(e)-n,d<r&&(r=d=(r+d)/2),f<l&&(l=f=(l+f)/2),t(e,r,l,d,f))}return l.round=function(t){return arguments.length?(e=!!t,l):e},l.size=function(t){return arguments.length?(n=+t[0],r=+t[1],l):[n,r]},l.tile=function(e){return arguments.length?(t=Yf(e),l):t},l.padding=function(t){return arguments.length?l.paddingInner(t).paddingOuter(t):l.paddingInner()},l.paddingInner=function(t){return arguments.length?(a="function"==typeof t?t:Ef(+t),l):a},l.paddingOuter=function(t){return arguments.length?l.paddingTop(t).paddingRight(t).paddingBottom(t).paddingLeft(t):l.paddingTop()},l.paddingTop=function(t){return arguments.length?(o="function"==typeof t?t:Ef(+t),l):o},l.paddingRight=function(t){return arguments.length?(s="function"==typeof t?t:Ef(+t),l):s},l.paddingBottom=function(t){return arguments.length?(u="function"==typeof t?t:Ef(+t),l):u},l.paddingLeft=function(t){return arguments.length?(c="function"==typeof t?t:Ef(+t),l):c},l},rh=function(t,e,n,r,i){var a,o,s=t.children,u=s.length,c=new Array(u+1);for(c[0]=o=a=0;a<u;++a)c[a+1]=o+=s[a].value;!function t(e,n,r,i,a,o,u){if(e>=n-1){var l=s[e];return l.x0=i,l.y0=a,l.x1=o,void(l.y1=u)}var d=c[e],f=r/2+d,h=e+1,_=n-1;for(;h<_;){var p=h+_>>>1;c[p]<f?h=p+1:_=p}f-c[h-1]<c[h]-f&&e+1<h&&--h;var m=c[h]-d,y=r-m;if(o-i>u-a){var g=(i*y+o*m)/r;t(e,h,m,i,a,g,u),t(h,n,y,g,a,o,u)}else{var v=(a*y+u*m)/r;t(e,h,m,i,a,o,v),t(h,n,y,i,v,o,u)}}(0,u,t.value,e,n,r,i)},ih=function(t,e,n,r,i){(1&t.depth?Kf:Ff)(t,e,n,r,i)},ah=function t(e){function n(t,n,r,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,u,c,l,d=-1,f=o.length,h=t.value;++d<f;){for(u=(s=o[d]).children,c=s.value=0,l=u.length;c<l;++c)s.value+=u[c].value;s.dice?Ff(s,n,r,i,r+=(a-r)*s.value/h):Kf(s,n,r,n+=(i-n)*s.value/h,a),h-=s.value}else t._squarify=o=th(e,t,n,r,i,a),o.ratio=e}return n.ratio=function(e){return t((e=+e)>1?e:1)},n}(Qf),oh=function(t){for(var e,n=-1,r=t.length,i=t[r-1],a=0;++n<r;)e=i,i=t[n],a+=e[1]*i[0]-e[0]*i[1];return a/2},sh=function(t){for(var e,n,r=-1,i=t.length,a=0,o=0,s=t[i-1],u=0;++r<i;)e=s,s=t[r],u+=n=e[0]*s[1]-s[0]*e[1],a+=(e[0]+s[0])*n,o+=(e[1]+s[1])*n;return[a/(u*=3),o/u]},uh=function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])-(e[1]-t[1])*(n[0]-t[0])};function ch(t,e){return t[0]-e[0]||t[1]-e[1]}function lh(t){for(var e=t.length,n=[0,1],r=2,i=2;i<e;++i){for(;r>1&&uh(t[n[r-2]],t[n[r-1]],t[i])<=0;)--r;n[r++]=i}return n.slice(0,r)}var dh=function(t){if((n=t.length)<3)return null;var e,n,r=new Array(n),i=new Array(n);for(e=0;e<n;++e)r[e]=[+t[e][0],+t[e][1],e];for(r.sort(ch),e=0;e<n;++e)i[e]=[r[e][0],-r[e][1]];var a=lh(r),o=lh(i),s=o[0]===a[0],u=o[o.length-1]===a[a.length-1],c=[];for(e=a.length-1;e>=0;--e)c.push(t[r[a[e]][2]]);for(e=+s;e<o.length-u;++e)c.push(t[r[o[e]][2]]);return c},fh=function(t,e){for(var n,r,i=t.length,a=t[i-1],o=e[0],s=e[1],u=a[0],c=a[1],l=!1,d=0;d<i;++d)n=(a=t[d])[0],(r=a[1])>s!=c>s&&o<(u-n)*(s-r)/(c-r)+n&&(l=!l),u=n,c=r;return l},hh=function(t){for(var e,n,r=-1,i=t.length,a=t[i-1],o=a[0],s=a[1],u=0;++r<i;)e=o,n=s,e-=o=(a=t[r])[0],n-=s=a[1],u+=Math.sqrt(e*e+n*n);return u},_h=[].slice,ph={};function mh(t){this._size=t,this._call=this._error=null,this._tasks=[],this._data=[],this._waiting=this._active=this._ended=this._start=0}function yh(t){if(!t._start)try{!function(t){for(;t._start=t._waiting&&t._active<t._size;){var e=t._ended+t._active,n=t._tasks[e],r=n.length-1,i=n[r];n[r]=gh(t,e),--t._waiting,++t._active,n=i.apply(null,n),t._tasks[e]&&(t._tasks[e]=n||ph)}}(t)}catch(e){if(t._tasks[t._ended+t._active-1])vh(t,e);else if(!t._data)throw e}}function gh(t,e){return function(n,r){t._tasks[e]&&(--t._active,++t._ended,t._tasks[e]=null,null==t._error&&(null!=n?vh(t,n):(t._data[e]=r,t._waiting?yh(t):Mh(t))))}}function vh(t,e){var n,r=t._tasks.length;for(t._error=e,t._data=void 0,t._waiting=NaN;--r>=0;)if((n=t._tasks[r])&&(t._tasks[r]=null,n.abort))try{n.abort()}catch(e){}t._active=NaN,Mh(t)}function Mh(t){if(!t._active&&t._call){var e=t._data;t._data=void 0,t._call(t._error,e)}}function bh(t){if(null==t)t=1/0;else if(!((t=+t)>=1))throw new Error("invalid concurrency");return new mh(t)}mh.prototype=bh.prototype={constructor:mh,defer:function(t){if("function"!=typeof t)throw new Error("invalid callback");if(this._call)throw new Error("defer after await");if(null!=this._error)return this;var e=_h.call(arguments,1);return e.push(t),++this._waiting,this._tasks.push(e),yh(this),this},abort:function(){return null==this._error&&vh(this,new Error("abort")),this},await:function(t){if("function"!=typeof t)throw new Error("invalid callback");if(this._call)throw new Error("multiple await");return this._call=function(e,n){t.apply(null,[e].concat(n))},Mh(this),this},awaitAll:function(t){if("function"!=typeof t)throw new Error("invalid callback");if(this._call)throw new Error("multiple await");return this._call=t,Mh(this),this}};var kh=function(){return Math.random()},Lh=function t(e){function n(t,n){return t=null==t?0:+t,n=null==n?1:+n,1===arguments.length?(n=t,t=0):n-=t,function(){return e()*n+t}}return n.source=t,n}(kh),wh=function t(e){function n(t,n){var r,i;return t=null==t?0:+t,n=null==n?1:+n,function(){var a;if(null!=r)a=r,r=null;else do{r=2*e()-1,a=2*e()-1,i=r*r+a*a}while(!i||i>1);return t+n*a*Math.sqrt(-2*Math.log(i)/i)}}return n.source=t,n}(kh),xh=function t(e){function n(){var t=wh.source(e).apply(this,arguments);return function(){return Math.exp(t())}}return n.source=t,n}(kh),Th=function t(e){function n(t){return function(){for(var n=0,r=0;r<t;++r)n+=e();return n}}return n.source=t,n}(kh),Dh=function t(e){function n(t){var n=Th.source(e)(t);return function(){return n()/t}}return n.source=t,n}(kh),Yh=function t(e){function n(t){return function(){return-Math.log(1-e())/t}}return n.source=t,n}(kh),Sh=function(t,e){var n,r,i,a,o=ft("beforesend","progress","load","error"),s=qa(),u=new XMLHttpRequest,c=null,l=null,d=0;function f(t){var e,r=u.status;if(!r&&function(t){var e=t.responseType;return e&&"text"!==e?t.response:t.responseText}(u)||r>=200&&r<300||304===r){if(i)try{e=i.call(n,u)}catch(t){return void o.call("error",n,t)}else e=u;o.call("load",n,e)}else o.call("error",n,t)}if("undefined"==typeof XDomainRequest||"withCredentials"in u||!/^(http(s)?:)?\/\//.test(t)||(u=new XDomainRequest),"onload"in u?u.onload=u.onerror=u.ontimeout=f:u.onreadystatechange=function(t){u.readyState>3&&f(t)},u.onprogress=function(t){o.call("progress",n,t)},n={header:function(t,e){return t=(t+"").toLowerCase(),arguments.length<2?s.get(t):(null==e?s.remove(t):s.set(t,e+""),n)},mimeType:function(t){return arguments.length?(r=null==t?null:t+"",n):r},responseType:function(t){return arguments.length?(a=t,n):a},timeout:function(t){return arguments.length?(d=+t,n):d},user:function(t){return arguments.length<1?c:(c=null==t?null:t+"",n)},password:function(t){return arguments.length<1?l:(l=null==t?null:t+"",n)},response:function(t){return i=t,n},get:function(t,e){return n.send("GET",t,e)},post:function(t,e){return n.send("POST",t,e)},send:function(e,i,f){return u.open(e,t,!0,c,l),null==r||s.has("accept")||s.set("accept",r+",*/*"),u.setRequestHeader&&s.each(function(t,e){u.setRequestHeader(e,t)}),null!=r&&u.overrideMimeType&&u.overrideMimeType(r),null!=a&&(u.responseType=a),d>0&&(u.timeout=d),null==f&&"function"==typeof i&&(f=i,i=null),null!=f&&1===f.length&&(f=function(t){return function(e,n){t(null==e?n:null)}}(f)),null!=f&&n.on("error",f).on("load",function(t){f(null,t)}),o.call("beforesend",n,u),u.send(null==i?null:i),n},abort:function(){return u.abort(),n},on:function(){var t=o.on.apply(o,arguments);return t===o?n:t}},null!=e){if("function"!=typeof e)throw new Error("invalid callback: "+e);return n.get(e)}return n};var Eh=function(t,e){return function(n,r){var i=Sh(n).mimeType(t).response(e);if(null!=r){if("function"!=typeof r)throw new Error("invalid callback: "+r);return i.get(r)}return i}},Ah=Eh("text/html",function(t){return document.createRange().createContextualFragment(t.responseText)}),Ch=Eh("application/json",function(t){return JSON.parse(t.responseText)}),jh=Eh("text/plain",function(t){return t.responseText}),Oh=Eh("application/xml",function(t){var e=t.responseXML;if(!e)throw new Error("parse error");return e}),Hh=function(t,e){return function(n,r,i){arguments.length<3&&(i=r,r=null);var a=Sh(n).mimeType(t);return a.row=function(t){return arguments.length?a.response(function(t,e){return function(n){return t(n.responseText,e)}}(e,r=t)):r},a.row(r),i?a.get(i):a}};var Ph=Hh("text/csv",fo),Fh=Hh("text/tab-separated-values",yo),Nh=Array.prototype,Bh=Nh.map,Rh=Nh.slice,Ih={name:"implicit"};function zh(t){var e=qa(),n=[],r=Ih;function i(i){var a=i+"",o=e.get(a);if(!o){if(r!==Ih)return r;e.set(a,o=n.push(i))}return t[(o-1)%t.length]}return t=null==t?[]:Rh.call(t),i.domain=function(t){if(!arguments.length)return n.slice();n=[],e=qa();for(var r,a,o=-1,s=t.length;++o<s;)e.has(a=(r=t[o])+"")||e.set(a,n.push(r));return i},i.range=function(e){return arguments.length?(t=Rh.call(e),i):t.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return zh().domain(n).range(t).unknown(r)},i}function Wh(){var t,e,n=zh().unknown(void 0),r=n.domain,i=n.range,a=[0,1],o=!1,s=0,u=0,c=.5;function l(){var n=r().length,l=a[1]<a[0],d=a[l-0],f=a[1-l];t=(f-d)/Math.max(1,n-s+2*u),o&&(t=Math.floor(t)),d+=(f-d-t*(n-s))*c,e=t*(1-s),o&&(d=Math.round(d),e=Math.round(e));var h=k(n).map(function(e){return d+t*e});return i(l?h.reverse():h)}return delete n.unknown,n.domain=function(t){return arguments.length?(r(t),l()):r()},n.range=function(t){return arguments.length?(a=[+t[0],+t[1]],l()):a.slice()},n.rangeRound=function(t){return a=[+t[0],+t[1]],o=!0,l()},n.bandwidth=function(){return e},n.step=function(){return t},n.round=function(t){return arguments.length?(o=!!t,l()):o},n.padding=function(t){return arguments.length?(s=u=Math.max(0,Math.min(1,t)),l()):s},n.paddingInner=function(t){return arguments.length?(s=Math.max(0,Math.min(1,t)),l()):s},n.paddingOuter=function(t){return arguments.length?(u=Math.max(0,Math.min(1,t)),l()):u},n.align=function(t){return arguments.length?(c=Math.max(0,Math.min(1,t)),l()):c},n.copy=function(){return Wh().domain(r()).range(a).round(o).paddingInner(s).paddingOuter(u).align(c)},l()}function qh(){return function t(e){var n=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,delete e.paddingOuter,e.copy=function(){return t(n())},e}(Wh().paddingInner(1))}var Uh=function(t){return function(){return t}},Vh=function(t){return+t},$h=[0,1];function Gh(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:Uh(e)}function Jh(t,e,n,r){var i=t[0],a=t[1],o=e[0],s=e[1];return a<i?(i=n(a,i),o=r(s,o)):(i=n(i,a),o=r(o,s)),function(t){return o(i(t))}}function Xh(t,e,n,r){var i=Math.min(t.length,e.length)-1,a=new Array(i),o=new Array(i),s=-1;for(t[i]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<i;)a[s]=n(t[s],t[s+1]),o[s]=r(e[s],e[s+1]);return function(e){var n=u(t,e,1,i)-1;return o[n](a[n](e))}}function Zh(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp())}function Kh(t,e){var n,r,i,a=$h,o=$h,s=$n,u=!1;function c(){return n=Math.min(a.length,o.length)>2?Xh:Jh,r=i=null,l}function l(e){return(r||(r=n(a,o,u?function(t){return function(e,n){var r=t(e=+e,n=+n);return function(t){return t<=e?0:t>=n?1:r(t)}}}(t):t,s)))(+e)}return l.invert=function(t){return(i||(i=n(o,a,Gh,u?function(t){return function(e,n){var r=t(e=+e,n=+n);return function(t){return t<=0?e:t>=1?n:r(t)}}}(e):e)))(+t)},l.domain=function(t){return arguments.length?(a=Bh.call(t,Vh),c()):a.slice()},l.range=function(t){return arguments.length?(o=Rh.call(t),c()):o.slice()},l.rangeRound=function(t){return o=Rh.call(t),s=Gn,c()},l.clamp=function(t){return arguments.length?(u=!!t,c()):u},l.interpolate=function(t){return arguments.length?(s=t,c()):s},c()}var Qh=function(t,e,n){var r,i=t[0],a=t[t.length-1],o=Y(i,a,null==e?10:e);switch((n=Qo(null==n?",f":n)).type){case"s":var s=Math.max(Math.abs(i),Math.abs(a));return null!=n.precision||isNaN(r=cs(o,s))||(n.precision=r),rs(n,s);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(r=ls(o,Math.max(Math.abs(i),Math.abs(a))))||(n.precision=r-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(r=us(o))||(n.precision=r-2*("%"===n.type))}return ns(n)};function t_(t){var e=t.domain;return t.ticks=function(t){var n=e();return T(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){return Qh(e(),t,n)},t.nice=function(n){null==n&&(n=10);var r,i=e(),a=0,o=i.length-1,s=i[a],u=i[o];return u<s&&(r=s,s=u,u=r,r=a,a=o,o=r),(r=D(s,u,n))>0?r=D(s=Math.floor(s/r)*r,u=Math.ceil(u/r)*r,n):r<0&&(r=D(s=Math.ceil(s*r)/r,u=Math.floor(u*r)/r,n)),r>0?(i[a]=Math.floor(s/r)*r,i[o]=Math.ceil(u/r)*r,e(i)):r<0&&(i[a]=Math.ceil(s*r)/r,i[o]=Math.floor(u*r)/r,e(i)),t},t}function e_(){var t=Kh(Gh,Nn);return t.copy=function(){return Zh(t,e_())},t_(t)}function n_(){var t=[0,1];function e(t){return+t}return e.invert=e,e.domain=e.range=function(n){return arguments.length?(t=Bh.call(n,Vh),e):t.slice()},e.copy=function(){return n_().domain(t)},t_(e)}var r_=function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],o=t[i];return o<a&&(n=r,r=i,i=n,n=a,a=o,o=n),t[r]=e.floor(a),t[i]=e.ceil(o),t};function i_(t,e){return(e=Math.log(e/t))?function(n){return Math.log(n/t)/e}:Uh(e)}function a_(t,e){return t<0?function(n){return-Math.pow(-e,n)*Math.pow(-t,1-n)}:function(n){return Math.pow(e,n)*Math.pow(t,1-n)}}function o_(t){return isFinite(t)?+("1e"+t):t<0?0:t}function s_(t){return 10===t?o_:t===Math.E?Math.exp:function(e){return Math.pow(t,e)}}function u_(t){return t===Math.E?Math.log:10===t&&Math.log10||2===t&&Math.log2||(t=Math.log(t),function(e){return Math.log(e)/t})}function c_(t){return function(e){return-t(-e)}}function l_(){var t=Kh(i_,a_).domain([1,10]),e=t.domain,n=10,r=u_(10),i=s_(10);function a(){return r=u_(n),i=s_(n),e()[0]<0&&(r=c_(r),i=c_(i)),t}return t.base=function(t){return arguments.length?(n=+t,a()):n},t.domain=function(t){return arguments.length?(e(t),a()):e()},t.ticks=function(t){var a,o=e(),s=o[0],u=o[o.length-1];(a=u<s)&&(f=s,s=u,u=f);var c,l,d,f=r(s),h=r(u),_=null==t?10:+t,p=[];if(!(n%1)&&h-f<_){if(f=Math.round(f)-1,h=Math.round(h)+1,s>0){for(;f<h;++f)for(l=1,c=i(f);l<n;++l)if(!((d=c*l)<s)){if(d>u)break;p.push(d)}}else for(;f<h;++f)for(l=n-1,c=i(f);l>=1;--l)if(!((d=c*l)<s)){if(d>u)break;p.push(d)}}else p=T(f,h,Math.min(h-f,_)).map(i);return a?p.reverse():p},t.tickFormat=function(e,a){if(null==a&&(a=10===n?".0e":","),"function"!=typeof a&&(a=ns(a)),e===1/0)return a;null==e&&(e=10);var o=Math.max(1,n*e/t.ticks().length);return function(t){var e=t/i(Math.round(r(t)));return e*n<n-.5&&(e*=n),e<=o?a(t):""}},t.nice=function(){return e(r_(e(),{floor:function(t){return i(Math.floor(r(t)))},ceil:function(t){return i(Math.ceil(r(t)))}}))},t.copy=function(){return Zh(t,l_().base(n))},t}function d_(t,e){return t<0?-Math.pow(-t,e):Math.pow(t,e)}function f_(){var t=1,e=Kh(function(e,n){return(n=d_(n,t)-(e=d_(e,t)))?function(r){return(d_(r,t)-e)/n}:Uh(n)},function(e,n){return n=d_(n,t)-(e=d_(e,t)),function(r){return d_(e+n*r,1/t)}}),n=e.domain;return e.exponent=function(e){return arguments.length?(t=+e,n(n())):t},e.copy=function(){return Zh(e,f_().exponent(t))},t_(e)}function h_(){return f_().exponent(.5)}function __(){var t=[],e=[],n=[];function i(){var r=0,i=Math.max(1,e.length);for(n=new Array(i-1);++r<i;)n[r-1]=A(t,r/i);return a}function a(t){if(!isNaN(t=+t))return e[u(n,t)]}return a.invertExtent=function(r){var i=e.indexOf(r);return i<0?[NaN,NaN]:[i>0?n[i-1]:t[0],i<n.length?n[i]:t[t.length-1]]},a.domain=function(e){if(!arguments.length)return t.slice();t=[];for(var n,a=0,o=e.length;a<o;++a)null==(n=e[a])||isNaN(n=+n)||t.push(n);return t.sort(r),i()},a.range=function(t){return arguments.length?(e=Rh.call(t),i()):e.slice()},a.quantiles=function(){return n.slice()},a.copy=function(){return __().domain(t).range(e)},a}function p_(){var t=0,e=1,n=1,r=[.5],i=[0,1];function a(t){if(t<=t)return i[u(r,t,0,n)]}function o(){var i=-1;for(r=new Array(n);++i<n;)r[i]=((i+1)*e-(i-n)*t)/(n+1);return a}return a.domain=function(n){return arguments.length?(t=+n[0],e=+n[1],o()):[t,e]},a.range=function(t){return arguments.length?(n=(i=Rh.call(t)).length-1,o()):i.slice()},a.invertExtent=function(a){var o=i.indexOf(a);return o<0?[NaN,NaN]:o<1?[t,r[0]]:o>=n?[r[n-1],e]:[r[o-1],r[o]]},a.copy=function(){return p_().domain([t,e]).range(i)},t_(a)}function m_(){var t=[.5],e=[0,1],n=1;function r(r){if(r<=r)return e[u(t,r,0,n)]}return r.domain=function(i){return arguments.length?(t=Rh.call(i),n=Math.min(t.length,e.length-1),r):t.slice()},r.range=function(i){return arguments.length?(e=Rh.call(i),n=Math.min(t.length,e.length-1),r):e.slice()},r.invertExtent=function(n){var r=e.indexOf(n);return[t[r-1],t[r]]},r.copy=function(){return m_().domain(t).range(e)},r}var y_=new Date,g_=new Date;function v_(t,e,n,r){function i(e){return t(e=new Date(+e)),e}return i.floor=i,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-e<n-t?e:n},i.offset=function(t,n){return e(t=new Date(+t),null==n?1:Math.floor(n)),t},i.range=function(n,r,a){var o,s=[];if(n=i.ceil(n),a=null==a?1:Math.floor(a),!(n<r&&a>0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o<n&&n<r);return s},i.filter=function(n){return v_(function(e){if(e>=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 y_.setTime(+e),g_.setTime(+r),t(y_),t(g_),Math.floor(n(y_,g_))},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 M_=v_(function(){},function(t,e){t.setTime(+t+e)},function(t,e){return e-t});M_.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?v_(function(e){e.setTime(Math.floor(e/t)*t)},function(e,n){e.setTime(+e+n*t)},function(e,n){return(n-e)/t}):M_:null};var b_=M_,k_=M_.range,L_=6e4,w_=6048e5,x_=v_(function(t){t.setTime(1e3*Math.floor(t/1e3))},function(t,e){t.setTime(+t+1e3*e)},function(t,e){return(e-t)/1e3},function(t){return t.getUTCSeconds()}),T_=x_,D_=x_.range,Y_=v_(function(t){t.setTime(Math.floor(t/L_)*L_)},function(t,e){t.setTime(+t+e*L_)},function(t,e){return(e-t)/L_},function(t){return t.getMinutes()}),S_=Y_,E_=Y_.range,A_=v_(function(t){var e=t.getTimezoneOffset()*L_%36e5;e<0&&(e+=36e5),t.setTime(36e5*Math.floor((+t-e)/36e5)+e)},function(t,e){t.setTime(+t+36e5*e)},function(t,e){return(e-t)/36e5},function(t){return t.getHours()}),C_=A_,j_=A_.range,O_=v_(function(t){t.setHours(0,0,0,0)},function(t,e){t.setDate(t.getDate()+e)},function(t,e){return(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*L_)/864e5},function(t){return t.getDate()-1}),H_=O_,P_=O_.range;function F_(t){return v_(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-(e.getTimezoneOffset()-t.getTimezoneOffset())*L_)/w_})}var N_=F_(0),B_=F_(1),R_=F_(2),I_=F_(3),z_=F_(4),W_=F_(5),q_=F_(6),U_=N_.range,V_=B_.range,$_=R_.range,G_=I_.range,J_=z_.range,X_=W_.range,Z_=q_.range,K_=v_(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()}),Q_=K_,tp=K_.range,ep=v_(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()});ep.every=function(t){return isFinite(t=Math.floor(t))&&t>0?v_(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 np=ep,rp=ep.range,ip=v_(function(t){t.setUTCSeconds(0,0)},function(t,e){t.setTime(+t+e*L_)},function(t,e){return(e-t)/L_},function(t){return t.getUTCMinutes()}),ap=ip,op=ip.range,sp=v_(function(t){t.setUTCMinutes(0,0,0)},function(t,e){t.setTime(+t+36e5*e)},function(t,e){return(e-t)/36e5},function(t){return t.getUTCHours()}),up=sp,cp=sp.range,lp=v_(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}),dp=lp,fp=lp.range;function hp(t){return v_(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)/w_})}var _p=hp(0),pp=hp(1),mp=hp(2),yp=hp(3),gp=hp(4),vp=hp(5),Mp=hp(6),bp=_p.range,kp=pp.range,Lp=mp.range,wp=yp.range,xp=gp.range,Tp=vp.range,Dp=Mp.range,Yp=v_(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCMonth(t.getUTCMonth()+e)},function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())},function(t){return t.getUTCMonth()}),Sp=Yp,Ep=Yp.range,Ap=v_(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()});Ap.every=function(t){return isFinite(t=Math.floor(t))&&t>0?v_(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 Cp=Ap,jp=Ap.range;function Op(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 Hp(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 Pp(t){return{y:t,m:0,d:1,H:0,M:0,S:0,L:0}}function Fp(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,s=t.months,u=t.shortMonths,c=Jp(i),l=Xp(i),d=Jp(a),f=Xp(a),h=Jp(o),_=Xp(o),p=Jp(s),m=Xp(s),y=Jp(u),g=Xp(u),v={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return u[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:mm,e:mm,f:bm,H:ym,I:gm,j:vm,L:Mm,m:km,M:Lm,p:function(t){return i[+(t.getHours()>=12)]},Q:Zm,s:Km,S:wm,u:xm,U:Tm,V:Dm,w:Ym,W:Sm,x:null,X:null,y:Em,Y:Am,Z:Cm,"%":Xm},M={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return u[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:jm,e:jm,f:Nm,H:Om,I:Hm,j:Pm,L:Fm,m:Bm,M:Rm,p:function(t){return i[+(t.getUTCHours()>=12)]},Q:Zm,s:Km,S:Im,u:zm,U:Wm,V:qm,w:Um,W:Vm,x:null,X:null,y:$m,Y:Gm,Z:Jm,"%":Xm},b={a:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=_[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=f[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},B:function(t,e,n){var r=p.exec(e.slice(n));return r?(t.m=m[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,n,r){return w(t,e,n,r)},d:om,e:om,f:fm,H:um,I:um,j:sm,L:dm,m:am,M:cm,p:function(t,e,n){var r=c.exec(e.slice(n));return r?(t.p=l[r[0].toLowerCase()],n+r[0].length):-1},Q:_m,s:pm,S:lm,u:Kp,U:Qp,V:tm,w:Zp,W:em,x:function(t,e,r){return w(t,n,e,r)},X:function(t,e,n){return w(t,r,e,n)},y:rm,Y:nm,Z:im,"%":hm};function k(t,e){return function(n){var r,i,a,o=[],s=-1,u=0,c=t.length;for(n instanceof Date||(n=new Date(+n));++s<c;)37===t.charCodeAt(s)&&(o.push(t.slice(u,s)),null!=(i=Wp[r=t.charAt(++s)])?r=t.charAt(++s):i="e"===r?" ":"0",(a=e[r])&&(r=a(n,i)),o.push(r),u=s+1);return o.push(t.slice(u,s)),o.join("")}}function L(t,e){return function(n){var r,i,a=Pp(1900);if(w(a,t,n+="",0)!=n.length)return null;if("Q"in a)return new Date(a.Q);if("p"in a&&(a.H=a.H%12+12*a.p),"V"in a){if(a.V<1||a.V>53)return null;"w"in a||(a.w=1),"Z"in a?(r=(i=(r=Hp(Pp(a.y))).getUTCDay())>4||0===i?pp.ceil(r):pp(r),r=dp.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(i=(r=e(Pp(a.y))).getDay())>4||0===i?B_.ceil(r):B_(r),r=H_.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?Hp(Pp(a.y)).getUTCDay():e(Pp(a.y)).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,Hp(a)):e(a)}}function w(t,e,n,r){for(var i,a,o=0,s=e.length,u=n.length;o<s;){if(r>=u)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=b[i in Wp?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return v.x=k(n,v),v.X=k(r,v),v.c=k(e,v),M.x=k(n,M),M.X=k(r,M),M.c=k(e,M),{format:function(t){var e=k(t+="",v);return e.toString=function(){return t},e},parse:function(t){var e=L(t+="",Op);return e.toString=function(){return t},e},utcFormat:function(t){var e=k(t+="",M);return e.toString=function(){return t},e},utcParse:function(t){var e=L(t,Hp);return e.toString=function(){return t},e}}}var Np,Bp,Rp,Ip,zp,Wp={"-":"",_:" ",0:"0"},qp=/^\s*\d+/,Up=/^%/,Vp=/[\\^$*+?|[\]().{}]/g;function $p(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a<n?new Array(n-a+1).join(e)+i:i)}function Gp(t){return t.replace(Vp,"\\$&")}function Jp(t){return new RegExp("^(?:"+t.map(Gp).join("|")+")","i")}function Xp(t){for(var e={},n=-1,r=t.length;++n<r;)e[t[n].toLowerCase()]=n;return e}function Zp(t,e,n){var r=qp.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Kp(t,e,n){var r=qp.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Qp(t,e,n){var r=qp.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function tm(t,e,n){var r=qp.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function em(t,e,n){var r=qp.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function nm(t,e,n){var r=qp.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function rm(t,e,n){var r=qp.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function im(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 am(t,e,n){var r=qp.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function om(t,e,n){var r=qp.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function sm(t,e,n){var r=qp.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function um(t,e,n){var r=qp.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function cm(t,e,n){var r=qp.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function lm(t,e,n){var r=qp.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function dm(t,e,n){var r=qp.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function fm(t,e,n){var r=qp.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function hm(t,e,n){var r=Up.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function _m(t,e,n){var r=qp.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function pm(t,e,n){var r=qp.exec(e.slice(n));return r?(t.Q=1e3*+r[0],n+r[0].length):-1}function mm(t,e){return $p(t.getDate(),e,2)}function ym(t,e){return $p(t.getHours(),e,2)}function gm(t,e){return $p(t.getHours()%12||12,e,2)}function vm(t,e){return $p(1+H_.count(np(t),t),e,3)}function Mm(t,e){return $p(t.getMilliseconds(),e,3)}function bm(t,e){return Mm(t,e)+"000"}function km(t,e){return $p(t.getMonth()+1,e,2)}function Lm(t,e){return $p(t.getMinutes(),e,2)}function wm(t,e){return $p(t.getSeconds(),e,2)}function xm(t){var e=t.getDay();return 0===e?7:e}function Tm(t,e){return $p(N_.count(np(t),t),e,2)}function Dm(t,e){var n=t.getDay();return t=n>=4||0===n?z_(t):z_.ceil(t),$p(z_.count(np(t),t)+(4===np(t).getDay()),e,2)}function Ym(t){return t.getDay()}function Sm(t,e){return $p(B_.count(np(t),t),e,2)}function Em(t,e){return $p(t.getFullYear()%100,e,2)}function Am(t,e){return $p(t.getFullYear()%1e4,e,4)}function Cm(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+$p(e/60|0,"0",2)+$p(e%60,"0",2)}function jm(t,e){return $p(t.getUTCDate(),e,2)}function Om(t,e){return $p(t.getUTCHours(),e,2)}function Hm(t,e){return $p(t.getUTCHours()%12||12,e,2)}function Pm(t,e){return $p(1+dp.count(Cp(t),t),e,3)}function Fm(t,e){return $p(t.getUTCMilliseconds(),e,3)}function Nm(t,e){return Fm(t,e)+"000"}function Bm(t,e){return $p(t.getUTCMonth()+1,e,2)}function Rm(t,e){return $p(t.getUTCMinutes(),e,2)}function Im(t,e){return $p(t.getUTCSeconds(),e,2)}function zm(t){var e=t.getUTCDay();return 0===e?7:e}function Wm(t,e){return $p(_p.count(Cp(t),t),e,2)}function qm(t,e){var n=t.getUTCDay();return t=n>=4||0===n?gp(t):gp.ceil(t),$p(gp.count(Cp(t),t)+(4===Cp(t).getUTCDay()),e,2)}function Um(t){return t.getUTCDay()}function Vm(t,e){return $p(pp.count(Cp(t),t),e,2)}function $m(t,e){return $p(t.getUTCFullYear()%100,e,2)}function Gm(t,e){return $p(t.getUTCFullYear()%1e4,e,4)}function Jm(){return"+0000"}function Xm(){return"%"}function Zm(t){return+t}function Km(t){return Math.floor(+t/1e3)}function Qm(t){return Np=Fp(t),Bp=Np.format,Rp=Np.parse,Ip=Np.utcFormat,zp=Np.utcParse,Np}Qm({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"]});var ty=Date.prototype.toISOString?function(t){return t.toISOString()}:Ip("%Y-%m-%dT%H:%M:%S.%LZ");var ey=+new Date("2000-01-01T00:00:00.000Z")?function(t){var e=new Date(t);return isNaN(e)?null:e}:zp("%Y-%m-%dT%H:%M:%S.%LZ"),ny=1e3,ry=60*ny,iy=60*ry,ay=24*iy,oy=7*ay,sy=30*ay,uy=365*ay;function cy(t){return new Date(t)}function ly(t){return t instanceof Date?+t:+new Date(+t)}function dy(t,e,n,r,a,o,s,u,c){var l=Kh(Gh,Nn),d=l.invert,f=l.domain,h=c(".%L"),_=c(":%S"),p=c("%I:%M"),m=c("%I %p"),y=c("%a %d"),g=c("%b %d"),v=c("%B"),M=c("%Y"),b=[[s,1,ny],[s,5,5*ny],[s,15,15*ny],[s,30,30*ny],[o,1,ry],[o,5,5*ry],[o,15,15*ry],[o,30,30*ry],[a,1,iy],[a,3,3*iy],[a,6,6*iy],[a,12,12*iy],[r,1,ay],[r,2,2*ay],[n,1,oy],[e,1,sy],[e,3,3*sy],[t,1,uy]];function k(i){return(s(i)<i?h:o(i)<i?_:a(i)<i?p:r(i)<i?m:e(i)<i?n(i)<i?y:g:t(i)<i?v:M)(i)}function L(e,n,r,a){if(null==e&&(e=10),"number"==typeof e){var o=Math.abs(r-n)/e,s=i(function(t){return t[2]}).right(b,o);s===b.length?(a=Y(n/uy,r/uy,e),e=t):s?(a=(s=b[o/b[s-1][2]<b[s][2]/o?s-1:s])[1],e=s[0]):(a=Math.max(Y(n,r,e),1),e=u)}return null==a?e:e.every(a)}return l.invert=function(t){return new Date(d(t))},l.domain=function(t){return arguments.length?f(Bh.call(t,ly)):f().map(cy)},l.ticks=function(t,e){var n,r=f(),i=r[0],a=r[r.length-1],o=a<i;return o&&(n=i,i=a,a=n),n=(n=L(t,i,a,e))?n.range(i,a+1):[],o?n.reverse():n},l.tickFormat=function(t,e){return null==e?k:c(e)},l.nice=function(t,e){var n=f();return(t=L(t,n[0],n[n.length-1],e))?f(r_(n,t)):l},l.copy=function(){return Zh(l,dy(t,e,n,r,a,o,s,u,c))},l}var fy=function(){return dy(np,Q_,N_,H_,C_,S_,T_,b_,Bp).domain([new Date(2e3,0,1),new Date(2e3,0,2)])},hy=function(){return dy(Cp,Sp,_p,dp,up,ap,T_,b_,Ip).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)])},_y=function(t){return t.match(/.{6}/g).map(function(t){return"#"+t})},py=_y("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf"),my=_y("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6"),yy=_y("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9"),gy=_y("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5"),vy=pr(kn(300,.5,0),kn(-240,.5,1)),My=pr(kn(-100,.75,.35),kn(80,1.5,.8)),by=pr(kn(260,.75,.35),kn(80,1.5,.8)),ky=kn(),Ly=function(t){(t<0||t>1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return ky.h=360*t-100,ky.s=1.5-1.5*e,ky.l=.8-.9*e,ky+""};function wy(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}var xy=wy(_y("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),Ty=wy(_y("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),Dy=wy(_y("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),Yy=wy(_y("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));function Sy(t){var e=0,n=1,r=!1;function i(i){var a=(i-e)/(n-e);return t(r?Math.max(0,Math.min(1,a)):a)}return i.domain=function(t){return arguments.length?(e=+t[0],n=+t[1],i):[e,n]},i.clamp=function(t){return arguments.length?(r=!!t,i):r},i.interpolator=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return Sy(t).domain([e,n]).clamp(r)},t_(i)}var Ey=function(t){return function(){return t}},Ay=Math.abs,Cy=Math.atan2,jy=Math.cos,Oy=Math.max,Hy=Math.min,Py=Math.sin,Fy=Math.sqrt,Ny=1e-12,By=Math.PI,Ry=By/2,Iy=2*By;function zy(t){return t>=1?Ry:t<=-1?-Ry:Math.asin(t)}function Wy(t){return t.innerRadius}function qy(t){return t.outerRadius}function Uy(t){return t.startAngle}function Vy(t){return t.endAngle}function $y(t){return t&&t.padAngle}function Gy(t,e,n,r,i,a,o){var s=t-n,u=e-r,c=(o?a:-a)/Fy(s*s+u*u),l=c*u,d=-c*s,f=t+l,h=e+d,_=n+l,p=r+d,m=(f+_)/2,y=(h+p)/2,g=_-f,v=p-h,M=g*g+v*v,b=i-a,k=f*p-_*h,L=(v<0?-1:1)*Fy(Oy(0,b*b*M-k*k)),w=(k*v-g*L)/M,x=(-k*g-v*L)/M,T=(k*v+g*L)/M,D=(-k*g+v*L)/M,Y=w-m,S=x-y,E=T-m,A=D-y;return Y*Y+S*S>E*E+A*A&&(w=T,x=D),{cx:w,cy:x,x01:-l,y01:-d,x11:w*(i/b-1),y11:x*(i/b-1)}}var Jy=function(){var t=Wy,e=qy,n=Ey(0),r=null,i=Uy,a=Vy,o=$y,s=null;function u(){var u,c,l,d=+t.apply(this,arguments),f=+e.apply(this,arguments),h=i.apply(this,arguments)-Ry,_=a.apply(this,arguments)-Ry,p=Ay(_-h),m=_>h;if(s||(s=u=Ha()),f<d&&(c=f,f=d,d=c),f>Ny)if(p>Iy-Ny)s.moveTo(f*jy(h),f*Py(h)),s.arc(0,0,f,h,_,!m),d>Ny&&(s.moveTo(d*jy(_),d*Py(_)),s.arc(0,0,d,_,h,m));else{var y,g,v=h,M=_,b=h,k=_,L=p,w=p,x=o.apply(this,arguments)/2,T=x>Ny&&(r?+r.apply(this,arguments):Fy(d*d+f*f)),D=Hy(Ay(f-d)/2,+n.apply(this,arguments)),Y=D,S=D;if(T>Ny){var E=zy(T/d*Py(x)),A=zy(T/f*Py(x));(L-=2*E)>Ny?(b+=E*=m?1:-1,k-=E):(L=0,b=k=(h+_)/2),(w-=2*A)>Ny?(v+=A*=m?1:-1,M-=A):(w=0,v=M=(h+_)/2)}var C=f*jy(v),j=f*Py(v),O=d*jy(k),H=d*Py(k);if(D>Ny){var P=f*jy(M),F=f*Py(M),N=d*jy(b),B=d*Py(b);if(p<By){var R=L>Ny?function(t,e,n,r,i,a,o,s){var u=n-t,c=r-e,l=o-i,d=s-a,f=(l*(e-a)-d*(t-i))/(d*u-l*c);return[t+f*u,e+f*c]}(C,j,N,B,P,F,O,H):[O,H],I=C-R[0],z=j-R[1],W=P-R[0],q=F-R[1],U=1/Py(((l=(I*W+z*q)/(Fy(I*I+z*z)*Fy(W*W+q*q)))>1?0:l<-1?By:Math.acos(l))/2),V=Fy(R[0]*R[0]+R[1]*R[1]);Y=Hy(D,(d-V)/(U-1)),S=Hy(D,(f-V)/(U+1))}}w>Ny?S>Ny?(y=Gy(N,B,C,j,f,S,m),g=Gy(P,F,O,H,f,S,m),s.moveTo(y.cx+y.x01,y.cy+y.y01),S<D?s.arc(y.cx,y.cy,S,Cy(y.y01,y.x01),Cy(g.y01,g.x01),!m):(s.arc(y.cx,y.cy,S,Cy(y.y01,y.x01),Cy(y.y11,y.x11),!m),s.arc(0,0,f,Cy(y.cy+y.y11,y.cx+y.x11),Cy(g.cy+g.y11,g.cx+g.x11),!m),s.arc(g.cx,g.cy,S,Cy(g.y11,g.x11),Cy(g.y01,g.x01),!m))):(s.moveTo(C,j),s.arc(0,0,f,v,M,!m)):s.moveTo(C,j),d>Ny&&L>Ny?Y>Ny?(y=Gy(O,H,P,F,d,-Y,m),g=Gy(C,j,N,B,d,-Y,m),s.lineTo(y.cx+y.x01,y.cy+y.y01),Y<D?s.arc(y.cx,y.cy,Y,Cy(y.y01,y.x01),Cy(g.y01,g.x01),!m):(s.arc(y.cx,y.cy,Y,Cy(y.y01,y.x01),Cy(y.y11,y.x11),!m),s.arc(0,0,d,Cy(y.cy+y.y11,y.cx+y.x11),Cy(g.cy+g.y11,g.cx+g.x11),m),s.arc(g.cx,g.cy,Y,Cy(g.y11,g.x11),Cy(g.y01,g.x01),!m))):s.arc(0,0,d,k,b,m):s.lineTo(O,H)}else s.moveTo(0,0);if(s.closePath(),u)return s=null,u+""||null}return u.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-By/2;return[jy(r)*n,Py(r)*n]},u.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Ey(+e),u):t},u.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Ey(+t),u):e},u.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:Ey(+t),u):n},u.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Ey(+t),u):r},u.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:Ey(+t),u):i},u.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:Ey(+t),u):a},u.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:Ey(+t),u):o},u.context=function(t){return arguments.length?(s=null==t?null:t,u):s},u};function Xy(t){this._context=t}Xy.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(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;default:this._context.lineTo(t,e)}}};var Zy=function(t){return new Xy(t)};function Ky(t){return t[0]}function Qy(t){return t[1]}var tg=function(){var t=Ky,e=Qy,n=Ey(!0),r=null,i=Zy,a=null;function o(o){var s,u,c,l=o.length,d=!1;for(null==r&&(a=i(c=Ha())),s=0;s<=l;++s)!(s<l&&n(u=o[s],s,o))===d&&((d=!d)?a.lineStart():a.lineEnd()),d&&a.point(+t(u,s,o),+e(u,s,o));if(c)return a=null,c+""||null}return o.x=function(e){return arguments.length?(t="function"==typeof e?e:Ey(+e),o):t},o.y=function(t){return arguments.length?(e="function"==typeof t?t:Ey(+t),o):e},o.defined=function(t){return arguments.length?(n="function"==typeof t?t:Ey(!!t),o):n},o.curve=function(t){return arguments.length?(i=t,null!=r&&(a=i(r)),o):i},o.context=function(t){return arguments.length?(null==t?r=a=null:a=i(r=t),o):r},o},eg=function(){var t=Ky,e=null,n=Ey(0),r=Qy,i=Ey(!0),a=null,o=Zy,s=null;function u(u){var c,l,d,f,h,_=u.length,p=!1,m=new Array(_),y=new Array(_);for(null==a&&(s=o(h=Ha())),c=0;c<=_;++c){if(!(c<_&&i(f=u[c],c,u))===p)if(p=!p)l=c,s.areaStart(),s.lineStart();else{for(s.lineEnd(),s.lineStart(),d=c-1;d>=l;--d)s.point(m[d],y[d]);s.lineEnd(),s.areaEnd()}p&&(m[c]=+t(f,c,u),y[c]=+n(f,c,u),s.point(e?+e(f,c,u):m[c],r?+r(f,c,u):y[c]))}if(h)return s=null,h+""||null}function c(){return tg().defined(i).curve(o).context(a)}return u.x=function(n){return arguments.length?(t="function"==typeof n?n:Ey(+n),e=null,u):t},u.x0=function(e){return arguments.length?(t="function"==typeof e?e:Ey(+e),u):t},u.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:Ey(+t),u):e},u.y=function(t){return arguments.length?(n="function"==typeof t?t:Ey(+t),r=null,u):n},u.y0=function(t){return arguments.length?(n="function"==typeof t?t:Ey(+t),u):n},u.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Ey(+t),u):r},u.lineX0=u.lineY0=function(){return c().x(t).y(n)},u.lineY1=function(){return c().x(t).y(r)},u.lineX1=function(){return c().x(e).y(n)},u.defined=function(t){return arguments.length?(i="function"==typeof t?t:Ey(!!t),u):i},u.curve=function(t){return arguments.length?(o=t,null!=a&&(s=o(a)),u):o},u.context=function(t){return arguments.length?(null==t?a=s=null:s=o(a=t),u):a},u},ng=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},rg=function(t){return t},ig=function(){var t=rg,e=ng,n=null,r=Ey(0),i=Ey(Iy),a=Ey(0);function o(o){var s,u,c,l,d,f=o.length,h=0,_=new Array(f),p=new Array(f),m=+r.apply(this,arguments),y=Math.min(Iy,Math.max(-Iy,i.apply(this,arguments)-m)),g=Math.min(Math.abs(y)/f,a.apply(this,arguments)),v=g*(y<0?-1:1);for(s=0;s<f;++s)(d=p[_[s]=s]=+t(o[s],s,o))>0&&(h+=d);for(null!=e?_.sort(function(t,n){return e(p[t],p[n])}):null!=n&&_.sort(function(t,e){return n(o[t],o[e])}),s=0,c=h?(y-f*v)/h:0;s<f;++s,m=l)u=_[s],l=m+((d=p[u])>0?d*c:0)+v,p[u]={data:o[u],index:s,value:d,startAngle:m,endAngle:l,padAngle:g};return p}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:Ey(+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:Ey(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Ey(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:Ey(+t),o):a},o},ag=sg(Zy);function og(t){this._curve=t}function sg(t){function e(e){return new og(t(e))}return e._curve=t,e}function ug(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(sg(t)):e()._curve},t}og.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 cg=function(){return ug(tg().curve(ag))},lg=function(){var t=eg().curve(ag),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 ug(n())},delete t.lineX0,t.lineEndAngle=function(){return ug(r())},delete t.lineX1,t.lineInnerRadius=function(){return ug(i())},delete t.lineY0,t.lineOuterRadius=function(){return ug(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(sg(t)):e()._curve},t},dg=function(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]},fg=Array.prototype.slice;function hg(t){return t.source}function _g(t){return t.target}function pg(t){var e=hg,n=_g,r=Ky,i=Qy,a=null;function o(){var o,s=fg.call(arguments),u=e.apply(this,s),c=n.apply(this,s);if(a||(a=o=Ha()),t(a,+r.apply(this,(s[0]=u,s)),+i.apply(this,s),+r.apply(this,(s[0]=c,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:Ey(+t),o):r},o.y=function(t){return arguments.length?(i="function"==typeof t?t:Ey(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}function mg(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function yg(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function gg(t,e,n,r,i){var a=dg(e,n),o=dg(e,n=(n+i)/2),s=dg(r,n),u=dg(r,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],u[0],u[1])}function vg(){return pg(mg)}function Mg(){return pg(yg)}function bg(){var t=pg(gg);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}var kg={draw:function(t,e){var n=Math.sqrt(e/By);t.moveTo(n,0),t.arc(0,0,n,0,Iy)}},Lg={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()}},wg=Math.sqrt(1/3),xg=2*wg,Tg={draw:function(t,e){var n=Math.sqrt(e/xg),r=n*wg;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},Dg=Math.sin(By/10)/Math.sin(7*By/10),Yg=Math.sin(Iy/10)*Dg,Sg=-Math.cos(Iy/10)*Dg,Eg={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=Yg*n,i=Sg*n;t.moveTo(0,-n),t.lineTo(r,i);for(var a=1;a<5;++a){var o=Iy*a/5,s=Math.cos(o),u=Math.sin(o);t.lineTo(u*n,-s*n),t.lineTo(s*r-u*i,u*r+s*i)}t.closePath()}},Ag={draw:function(t,e){var n=Math.sqrt(e),r=-n/2;t.rect(r,r,n,n)}},Cg=Math.sqrt(3),jg={draw:function(t,e){var n=-Math.sqrt(e/(3*Cg));t.moveTo(0,2*n),t.lineTo(-Cg*n,-n),t.lineTo(Cg*n,-n),t.closePath()}},Og=Math.sqrt(3)/2,Hg=1/Math.sqrt(12),Pg=3*(Hg/2+1),Fg={draw:function(t,e){var n=Math.sqrt(e/Pg),r=n/2,i=n*Hg,a=r,o=n*Hg+n,s=-a,u=o;t.moveTo(r,i),t.lineTo(a,o),t.lineTo(s,u),t.lineTo(-.5*r-Og*i,Og*r+-.5*i),t.lineTo(-.5*a-Og*o,Og*a+-.5*o),t.lineTo(-.5*s-Og*u,Og*s+-.5*u),t.lineTo(-.5*r+Og*i,-.5*i-Og*r),t.lineTo(-.5*a+Og*o,-.5*o-Og*a),t.lineTo(-.5*s+Og*u,-.5*u-Og*s),t.closePath()}},Ng=[kg,Lg,Tg,Ag,Eg,jg,Fg],Bg=function(){var t=Ey(kg),e=Ey(64),n=null;function r(){var r;if(n||(n=r=Ha()),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:Ey(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:Ey(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r},Rg=function(){};function Ig(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 zg(t){this._context=t}zg.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:Ig(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:Ig(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var Wg=function(t){return new zg(t)};function qg(t){this._context=t}qg.prototype={areaStart:Rg,areaEnd:Rg,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:Ig(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var Ug=function(t){return new qg(t)};function Vg(t){this._context=t}Vg.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:Ig(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var $g=function(t){return new Vg(t)};function Gg(t,e){this._basis=new zg(t),this._beta=e}Gg.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,u=-1;++u<=n;)r=u/n,this._basis.point(this._beta*t[u]+(1-this._beta)*(i+r*o),this._beta*e[u]+(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 Jg=function t(e){function n(t){return 1===e?new zg(t):new Gg(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function Xg(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 Zg(t,e){this._context=t,this._k=(1-e)/6}Zg.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:Xg(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:Xg(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 Kg=function t(e){function n(t){return new Zg(t,e)}return n.tension=function(e){return t(+e)},n}(0);function Qg(t,e){this._context=t,this._k=(1-e)/6}Qg.prototype={areaStart:Rg,areaEnd:Rg,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:Xg(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 tv=function t(e){function n(t){return new Qg(t,e)}return n.tension=function(e){return t(+e)},n}(0);function ev(t,e){this._context=t,this._k=(1-e)/6}ev.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:Xg(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 nv=function t(e){function n(t){return new ev(t,e)}return n.tension=function(e){return t(+e)},n}(0);function rv(t,e,n){var r=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>Ny){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,u=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/u,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/u}if(t._l23_a>Ny){var c=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*c+t._x1*t._l23_2a-e*t._l12_2a)/l,o=(o*c+t._y1*t._l23_2a-n*t._l12_2a)/l}t._context.bezierCurveTo(r,i,a,o,t._x2,t._y2)}function iv(t,e){this._context=t,this._alpha=e}iv.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:rv(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 av=function t(e){function n(t){return e?new iv(t,e):new Zg(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function ov(t,e){this._context=t,this._alpha=e}ov.prototype={areaStart:Rg,areaEnd:Rg,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:rv(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 sv=function t(e){function n(t){return e?new ov(t,e):new Qg(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function uv(t,e){this._context=t,this._alpha=e}uv.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:rv(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 cv=function t(e){function n(t){return e?new uv(t,e):new ev(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function lv(t){this._context=t}lv.prototype={areaStart:Rg,areaEnd:Rg,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 dv=function(t){return new lv(t)};function fv(t){return t<0?-1:1}function hv(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(fv(a)+fv(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function _v(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function pv(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 mv(t){this._context=t}function yv(t){this._context=new gv(t)}function gv(t){this._context=t}function vv(t){return new mv(t)}function Mv(t){return new yv(t)}function bv(t){this._context=t}function kv(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<r-1;++e)i[e]=1,a[e]=4,o[e]=4*t[e]+2*t[e+1];for(i[r-1]=2,a[r-1]=7,o[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)n=i[e]/a[e-1],a[e]-=n,o[e]-=n*o[e-1];for(i[r-1]=o[r-1]/a[r-1],e=r-2;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<r-1;++e)a[e]=2*t[e+1]-i[e+1];return[i,a]}mv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:pv(this,this._t0,_v(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var n=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){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,pv(this,_v(this,n=hv(this,t,e)),n);break;default:pv(this,this._t0,n=hv(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=n}}},(yv.prototype=Object.create(mv.prototype)).point=function(t,e){mv.prototype.point.call(this,e,t)},gv.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,n,r,i,a){this._context.bezierCurveTo(e,t,r,n,a,i)}},bv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,n=t.length;if(n)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===n)this._context.lineTo(t[1],e[1]);else for(var r=kv(t),i=kv(e),a=0,o=1;o<n;++a,++o)this._context.bezierCurveTo(r[0][a],i[0][a],r[1][a],i[1][a],t[o],e[o]);(this._line||0!==this._line&&1===n)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var Lv=function(t){return new bv(t)};function wv(t,e){this._context=t,this._t=e}wv.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=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 xv=function(t){return new wv(t,.5)};function Tv(t){return new wv(t,0)}function Dv(t){return new wv(t,1)}var Yv=function(t,e){if((i=t.length)>1)for(var n,r,i,a=1,o=t[e[0]],s=o.length;a<i;++a)for(r=o,o=t[e[a]],n=0;n<s;++n)o[n][1]+=o[n][0]=isNaN(r[n][1])?r[n][0]:r[n][1]},Sv=function(t){for(var e=t.length,n=new Array(e);--e>=0;)n[e]=e;return n};function Ev(t,e){return t[e]}var Av=function(){var t=Ey([]),e=Sv,n=Yv,r=Ev;function i(i){var a,o,s=t.apply(this,arguments),u=i.length,c=s.length,l=new Array(c);for(a=0;a<c;++a){for(var d,f=s[a],h=l[a]=new Array(u),_=0;_<u;++_)h[_]=d=[0,+r(i[_],f,_,i)],d.data=i[_];h.key=f}for(a=0,o=e(l);a<c;++a)l[o[a]].index=a;return n(l,o),l}return i.keys=function(e){return arguments.length?(t="function"==typeof e?e:Ey(fg.call(e)),i):t},i.value=function(t){return arguments.length?(r="function"==typeof t?t:Ey(+t),i):r},i.order=function(t){return arguments.length?(e=null==t?Sv:"function"==typeof t?t:Ey(fg.call(t)),i):e},i.offset=function(t){return arguments.length?(n=null==t?Yv:t,i):n},i},Cv=function(t,e){if((r=t.length)>0){for(var n,r,i,a=0,o=t[0].length;a<o;++a){for(i=n=0;n<r;++n)i+=t[n][a][1]||0;if(i)for(n=0;n<r;++n)t[n][a][1]/=i}Yv(t,e)}},jv=function(t,e){if((s=t.length)>1)for(var n,r,i,a,o,s,u=0,c=t[e[0]].length;u<c;++u)for(a=o=0,n=0;n<s;++n)(i=(r=t[e[n]][u])[1]-r[0])>=0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):r[0]=a},Ov=function(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],a=i.length;r<a;++r){for(var o=0,s=0;o<n;++o)s+=t[o][r][1]||0;i[r][1]+=i[r][0]=-s/2}Yv(t,e)}},Hv=function(t,e){if((i=t.length)>0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,a=0,o=1;o<r;++o){for(var s=0,u=0,c=0;s<i;++s){for(var l=t[e[s]],d=l[o][1]||0,f=(d-(l[o-1][1]||0))/2,h=0;h<s;++h){var _=t[e[h]];f+=(_[o][1]||0)-(_[o-1][1]||0)}u+=d,c+=f*d}n[o-1][1]+=n[o-1][0]=a,u&&(a-=c/u)}n[o-1][1]+=n[o-1][0]=a,Yv(t,e)}},Pv=function(t){var e=t.map(Fv);return Sv(t).sort(function(t,n){return e[t]-e[n]})};function Fv(t){for(var e,n=0,r=-1,i=t.length;++r<i;)(e=+t[r][1])&&(n+=e);return n}var Nv=function(t){return Pv(t).reverse()},Bv=function(t){var e,n,r=t.length,i=t.map(Fv),a=Sv(t).sort(function(t,e){return i[e]-i[t]}),o=0,s=0,u=[],c=[];for(e=0;e<r;++e)n=a[e],o<s?(o+=i[n],u.push(n)):(s+=i[n],c.push(n));return c.reverse().concat(u)},Rv=function(t){return Sv(t).reverse()},Iv=function(t){return function(){return t}};function zv(t){return t[0]}function Wv(t){return t[1]}function qv(){this._=null}function Uv(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function Vv(t,e){var n=e,r=e.R,i=n.U;i?i.L===n?i.L=r:i.R=r:t._=r,r.U=i,n.U=r,n.R=r.L,n.R&&(n.R.U=n),r.L=n}function $v(t,e){var n=e,r=e.L,i=n.U;i?i.L===n?i.L=r:i.R=r:t._=r,r.U=i,n.U=r,n.L=r.R,n.L&&(n.L.U=n),r.R=n}function Gv(t){for(;t.L;)t=t.L;return t}qv.prototype={constructor:qv,insert:function(t,e){var n,r,i;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;n=t}else this._?(t=Gv(this._),e.P=null,e.N=t,t.P=t.L=e,n=t):(e.P=e.N=null,this._=e,n=null);for(e.L=e.R=null,e.U=n,e.C=!0,t=e;n&&n.C;)n===(r=n.U).L?(i=r.R)&&i.C?(n.C=i.C=!1,r.C=!0,t=r):(t===n.R&&(Vv(this,n),n=(t=n).U),n.C=!1,r.C=!0,$v(this,r)):(i=r.L)&&i.C?(n.C=i.C=!1,r.C=!0,t=r):(t===n.L&&($v(this,n),n=(t=n).U),n.C=!1,r.C=!0,Vv(this,r)),n=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,n,r,i=t.U,a=t.L,o=t.R;if(n=a?o?Gv(o):a:o,i?i.L===t?i.L=n:i.R=n:this._=n,a&&o?(r=n.C,n.C=t.C,n.L=a,a.U=n,n!==o?(i=n.U,n.U=t.U,t=n.R,i.L=t,n.R=o,o.U=n):(n.U=i,i=n,t=n.R)):(r=t.C,t=n),t&&(t.U=i),!r)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===i.L){if((e=i.R).C&&(e.C=!1,i.C=!0,Vv(this,i),e=i.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,$v(this,e),e=i.R),e.C=i.C,i.C=e.R.C=!1,Vv(this,i),t=this._;break}}else if((e=i.L).C&&(e.C=!1,i.C=!0,$v(this,i),e=i.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,Vv(this,e),e=i.L),e.C=i.C,i.C=e.L.C=!1,$v(this,i),t=this._;break}e.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}};var Jv=qv;function Xv(t,e,n,r){var i=[null,null],a=gM.push(i)-1;return i.left=t,i.right=e,n&&Kv(i,t,e,n),r&&Kv(i,e,t,r),mM[t.index].halfedges.push(a),mM[e.index].halfedges.push(a),i}function Zv(t,e,n){var r=[e,n];return r.left=t,r}function Kv(t,e,n,r){t[0]||t[1]?t.left===n?t[1]=r:t[0]=r:(t[0]=r,t.left=e,t.right=n)}function Qv(t,e,n,r,i){var a,o=t[0],s=t[1],u=o[0],c=o[1],l=0,d=1,f=s[0]-u,h=s[1]-c;if(a=e-u,f||!(a>0)){if(a/=f,f<0){if(a<l)return;a<d&&(d=a)}else if(f>0){if(a>d)return;a>l&&(l=a)}if(a=r-u,f||!(a<0)){if(a/=f,f<0){if(a>d)return;a>l&&(l=a)}else if(f>0){if(a<l)return;a<d&&(d=a)}if(a=n-c,h||!(a>0)){if(a/=h,h<0){if(a<l)return;a<d&&(d=a)}else if(h>0){if(a>d)return;a>l&&(l=a)}if(a=i-c,h||!(a<0)){if(a/=h,h<0){if(a>d)return;a>l&&(l=a)}else if(h>0){if(a<l)return;a<d&&(d=a)}return!(l>0||d<1)||(l>0&&(t[0]=[u+l*f,c+l*h]),d<1&&(t[1]=[u+d*f,c+d*h]),!0)}}}}}function tM(t,e,n,r,i){var a=t[1];if(a)return!0;var o,s,u=t[0],c=t.left,l=t.right,d=c[0],f=c[1],h=l[0],_=l[1],p=(d+h)/2,m=(f+_)/2;if(_===f){if(p<e||p>=r)return;if(d>h){if(u){if(u[1]>=i)return}else u=[p,n];a=[p,i]}else{if(u){if(u[1]<n)return}else u=[p,i];a=[p,n]}}else if(s=m-(o=(d-h)/(_-f))*p,o<-1||o>1)if(d>h){if(u){if(u[1]>=i)return}else u=[(n-s)/o,n];a=[(i-s)/o,i]}else{if(u){if(u[1]<n)return}else u=[(i-s)/o,i];a=[(n-s)/o,n]}else if(f<_){if(u){if(u[0]>=r)return}else u=[e,o*e+s];a=[r,o*r+s]}else{if(u){if(u[0]<e)return}else u=[r,o*r+s];a=[e,o*e+s]}return t[0]=u,t[1]=a,!0}function eM(t,e){var n=t.site,r=e.left,i=e.right;return n===i&&(i=r,r=n),i?Math.atan2(i[1]-r[1],i[0]-r[0]):(n===r?(r=e[1],i=e[0]):(r=e[0],i=e[1]),Math.atan2(r[0]-i[0],i[1]-r[1]))}function nM(t,e){return e[+(e.left!==t.site)]}function rM(t,e){return e[+(e.left===t.site)]}var iM,aM=[];function oM(t){var e=t.P,n=t.N;if(e&&n){var r=e.site,i=t.site,a=n.site;if(r!==a){var o=i[0],s=i[1],u=r[0]-o,c=r[1]-s,l=a[0]-o,d=a[1]-s,f=2*(u*d-c*l);if(!(f>=-MM)){var h=u*u+c*c,_=l*l+d*d,p=(d*h-c*_)/f,m=(u*_-l*h)/f,y=aM.pop()||new function(){Uv(this),this.x=this.y=this.arc=this.site=this.cy=null};y.arc=t,y.site=i,y.x=p+o,y.y=(y.cy=m+s)+Math.sqrt(p*p+m*m),t.circle=y;for(var g=null,v=yM._;v;)if(y.y<v.y||y.y===v.y&&y.x<=v.x){if(!v.L){g=v.P;break}v=v.L}else{if(!v.R){g=v;break}v=v.R}yM.insert(g,y),g||(iM=y)}}}}function sM(t){var e=t.circle;e&&(e.P||(iM=e.N),yM.remove(e),aM.push(e),Uv(e),t.circle=null)}var uM=[];function cM(t){var e=uM.pop()||new function(){Uv(this),this.edge=this.site=this.circle=null};return e.site=t,e}function lM(t){sM(t),pM.remove(t),uM.push(t),Uv(t)}function dM(t){var e=t.circle,n=e.x,r=e.cy,i=[n,r],a=t.P,o=t.N,s=[t];lM(t);for(var u=a;u.circle&&Math.abs(n-u.circle.x)<vM&&Math.abs(r-u.circle.cy)<vM;)a=u.P,s.unshift(u),lM(u),u=a;s.unshift(u),sM(u);for(var c=o;c.circle&&Math.abs(n-c.circle.x)<vM&&Math.abs(r-c.circle.cy)<vM;)o=c.N,s.push(c),lM(c),c=o;s.push(c),sM(c);var l,d=s.length;for(l=1;l<d;++l)c=s[l],u=s[l-1],Kv(c.edge,u.site,c.site,i);u=s[0],(c=s[d-1]).edge=Xv(u.site,c.site,null,i),oM(u),oM(c)}function fM(t){for(var e,n,r,i,a=t[0],o=t[1],s=pM._;s;)if((r=hM(s,o)-a)>vM)s=s.L;else{if(!((i=a-_M(s,o))>vM)){r>-vM?(e=s.P,n=s):i>-vM?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}!function(t){mM[t.index]={site:t,halfedges:[]}}(t);var u=cM(t);if(pM.insert(e,u),e||n){if(e===n)return sM(e),n=cM(e.site),pM.insert(u,n),u.edge=n.edge=Xv(e.site,u.site),oM(e),void oM(n);if(n){sM(e),sM(n);var c=e.site,l=c[0],d=c[1],f=t[0]-l,h=t[1]-d,_=n.site,p=_[0]-l,m=_[1]-d,y=2*(f*m-h*p),g=f*f+h*h,v=p*p+m*m,M=[(m*g-h*v)/y+l,(f*v-p*g)/y+d];Kv(n.edge,c,_,M),u.edge=Xv(c,t,null,M),n.edge=Xv(t,_,null,M),oM(e),oM(n)}else u.edge=Xv(e.site,u.site)}}function hM(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],u=n[1],c=u-e;if(!c)return s;var l=s-r,d=1/a-1/c,f=l/c;return d?(-f+Math.sqrt(f*f-2*d*(l*l/(-2*c)-u+c/2+i-a/2)))/d+r:(r+s)/2}function _M(t,e){var n=t.N;if(n)return hM(n,e);var r=t.site;return r[1]===e?r[0]:1/0}var pM,mM,yM,gM,vM=1e-6,MM=1e-12;function bM(t,e){return e[1]-t[1]||e[0]-t[0]}function kM(t,e){var n,r,i,a=t.sort(bM).pop();for(gM=[],mM=new Array(t.length),pM=new Jv,yM=new Jv;;)if(i=iM,a&&(!i||a[1]<i.y||a[1]===i.y&&a[0]<i.x))a[0]===n&&a[1]===r||(fM(a),n=a[0],r=a[1]),a=t.pop();else{if(!i)break;dM(i.arc)}if(function(){for(var t,e,n,r,i=0,a=mM.length;i<a;++i)if((t=mM[i])&&(r=(e=t.halfedges).length)){var o=new Array(r),s=new Array(r);for(n=0;n<r;++n)o[n]=n,s[n]=eM(t,gM[e[n]]);for(o.sort(function(t,e){return s[e]-s[t]}),n=0;n<r;++n)s[n]=e[o[n]];for(n=0;n<r;++n)e[n]=s[n]}}(),e){var o=+e[0][0],s=+e[0][1],u=+e[1][0],c=+e[1][1];!function(t,e,n,r){for(var i,a=gM.length;a--;)tM(i=gM[a],t,e,n,r)&&Qv(i,t,e,n,r)&&(Math.abs(i[0][0]-i[1][0])>vM||Math.abs(i[0][1]-i[1][1])>vM)||delete gM[a]}(o,s,u,c),function(t,e,n,r){var i,a,o,s,u,c,l,d,f,h,_,p,m=mM.length,y=!0;for(i=0;i<m;++i)if(a=mM[i]){for(o=a.site,s=(u=a.halfedges).length;s--;)gM[u[s]]||u.splice(s,1);for(s=0,c=u.length;s<c;)_=(h=rM(a,gM[u[s]]))[0],p=h[1],d=(l=nM(a,gM[u[++s%c]]))[0],f=l[1],(Math.abs(_-d)>vM||Math.abs(p-f)>vM)&&(u.splice(s,0,gM.push(Zv(o,h,Math.abs(_-t)<vM&&r-p>vM?[t,Math.abs(d-t)<vM?f:r]:Math.abs(p-r)<vM&&n-_>vM?[Math.abs(f-r)<vM?d:n,r]:Math.abs(_-n)<vM&&p-e>vM?[n,Math.abs(d-n)<vM?f:e]:Math.abs(p-e)<vM&&_-t>vM?[Math.abs(f-e)<vM?d:t,e]:null))-1),++c);c&&(y=!1)}if(y){var g,v,M,b=1/0;for(i=0,y=null;i<m;++i)(a=mM[i])&&(M=(g=(o=a.site)[0]-t)*g+(v=o[1]-e)*v)<b&&(b=M,y=a);if(y){var k=[t,e],L=[t,r],w=[n,r],x=[n,e];y.halfedges.push(gM.push(Zv(o=y.site,k,L))-1,gM.push(Zv(o,L,w))-1,gM.push(Zv(o,w,x))-1,gM.push(Zv(o,x,k))-1)}}for(i=0;i<m;++i)(a=mM[i])&&(a.halfedges.length||delete mM[i])}(o,s,u,c)}this.edges=gM,this.cells=mM,pM=yM=gM=mM=null}kM.prototype={constructor:kM,polygons:function(){var t=this.edges;return this.cells.map(function(e){var n=e.halfedges.map(function(n){return nM(e,t[n])});return n.data=e.site.data,n})},triangles:function(){var t=[],e=this.edges;return this.cells.forEach(function(n,r){if(a=(i=n.halfedges).length)for(var i,a,o,s,u,c,l=n.site,d=-1,f=e[i[a-1]],h=f.left===l?f.right:f.left;++d<a;)o=h,h=(f=e[i[d]]).left===l?f.right:f.left,o&&h&&r<o.index&&r<h.index&&(u=o,c=h,((s=l)[0]-c[0])*(u[1]-s[1])-(s[0]-u[0])*(c[1]-s[1])<0)&&t.push([l.data,o.data,h.data])}),t},links:function(){return this.edges.filter(function(t){return t.right}).map(function(t){return{source:t.left.data,target:t.right.data}})},find:function(t,e,n){for(var r,i,a=this,o=a._found||0,s=a.cells.length;!(i=a.cells[o]);)if(++o>=s)return null;var u=t-i.site[0],c=e-i.site[1],l=u*u+c*c;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 u=t-s[0],c=e-s[1],d=u*u+c*c;d<l&&(l=d,o=s.index)}})}while(null!==o);return a._found=r,null==n||l<=n*n?i.site:null}};var LM=function(){var t=zv,e=Wv,n=null;function r(r){return new kM(r.map(function(n,i){var a=[Math.round(t(n,i,r)/vM)*vM,Math.round(e(n,i,r)/vM)*vM];return a.index=i,a.data=n,a}),n)}return r.polygons=function(t){return r(t).polygons()},r.links=function(t){return r(t).links()},r.triangles=function(t){return r(t).triangles()},r.x=function(e){return arguments.length?(t="function"==typeof e?e:Iv(+e),r):t},r.y=function(t){return arguments.length?(e="function"==typeof t?t:Iv(+t),r):e},r.extent=function(t){return arguments.length?(n=null==t?null:[[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]],r):n&&[[n[0][0],n[0][1]],[n[1][0],n[1][1]]]},r.size=function(t){return arguments.length?(n=null==t?null:[[0,0],[+t[0],+t[1]]],r):n&&[n[1][0]-n[0][0],n[1][1]-n[0][1]]},r},wM=function(t){return function(){return t}};function xM(t,e,n){this.k=t,this.x=e,this.y=n}xM.prototype={constructor:xM,scale:function(t){return 1===t?this:new xM(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new xM(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var TM=new xM(1,0,0);function DM(t){return t.__zoom||TM}function YM(){$t.stopImmediatePropagation()}DM.prototype=xM.prototype;var SM=function(){$t.preventDefault(),$t.stopImmediatePropagation()};function EM(){return!$t.button}function AM(){var t,e,n=this;return n instanceof SVGElement?(t=(n=n.ownerSVGElement||n).width.baseVal.value,e=n.height.baseVal.value):(t=n.clientWidth,e=n.clientHeight),[[0,0],[t,e]]}function CM(){return this.__zoom||TM}function jM(){return-$t.deltaY*($t.deltaMode?120:1)/500}function OM(){return"ontouchstart"in this}function HM(t,e,n){var r=t.invertX(e[0][0])-n[0][0],i=t.invertX(e[1][0])-n[1][0],a=t.invertY(e[0][1])-n[0][1],o=t.invertY(e[1][1])-n[1][1];return t.translate(i>r?(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 PM=function(){var t,e,n=EM,r=AM,i=HM,a=jM,o=OM,s=[0,1/0],u=[[-1/0,-1/0],[1/0,1/0]],c=250,l=rr,d=[],f=ft("start","zoom","end"),h=500,_=150,p=0;function m(t){t.property("__zoom",CM).on("wheel.zoom",L).on("mousedown.zoom",w).on("dblclick.zoom",x).filter(o).on("touchstart.zoom",T).on("touchmove.zoom",D).on("touchend.zoom touchcancel.zoom",Y).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function y(t,e){return(e=Math.max(s[0],Math.min(s[1],e)))===t.k?t:new xM(e,t.x,t.y)}function g(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 xM(t.k,r,i)}function v(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function M(t,e,n){t.on("start.zoom",function(){b(this,arguments).start()}).on("interrupt.zoom end.zoom",function(){b(this,arguments).end()}).tween("zoom",function(){var t=arguments,i=b(this,t),a=r.apply(this,t),o=n||v(a),s=Math.max(a[1][0]-a[0][0],a[1][1]-a[0][1]),u=this.__zoom,c="function"==typeof e?e.apply(this,t):e,d=l(u.invert(o).concat(s/u.k),c.invert(o).concat(s/c.k));return function(t){if(1===t)t=c;else{var e=d(t),n=s/e[2];t=new xM(n,o[0]-e[0]*n,o[1]-e[1]*n)}i.zoom(null,t)}})}function b(t,e){for(var n,r=0,i=d.length;r<i;++r)if((n=d[r]).that===t)return n;return new k(t,e)}function k(t,e){this.that=t,this.args=e,this.index=-1,this.active=0,this.extent=r.apply(t,e)}function L(){if(n.apply(this,arguments)){var t=b(this,arguments),e=this.__zoom,r=Math.max(s[0],Math.min(s[1],e.k*Math.pow(2,a.apply(this,arguments)))),o=de(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)],Jr(this),t.start()}SM(),t.wheel=setTimeout(function(){t.wheel=null,t.end()},_),t.zoom("mouse",i(g(y(e,r),t.mouse[0],t.mouse[1]),t.extent,u))}}function w(){if(!e&&n.apply(this,arguments)){var t=b(this,arguments),r=ie($t.view).on("mousemove.zoom",function(){if(SM(),!t.moved){var e=$t.clientX-o,n=$t.clientY-s;t.moved=e*e+n*n>p}t.zoom("mouse",i(g(t.that.__zoom,t.mouse[0]=de(t.that),t.mouse[1]),t.extent,u))},!0).on("mouseup.zoom",function(){r.on("mousemove.zoom mouseup.zoom",null),ge($t.view,t.moved),SM(),t.end()},!0),a=de(this),o=$t.clientX,s=$t.clientY;ye($t.view),YM(),t.mouse=[a,this.__zoom.invert(a)],Jr(this),t.start()}}function x(){if(n.apply(this,arguments)){var t=this.__zoom,e=de(this),a=t.invert(e),o=t.k*($t.shiftKey?.5:2),s=i(g(y(t,o),e,a),r.apply(this,arguments),u);SM(),c>0?ie(this).transition().duration(c).call(M,s,e):ie(this).call(m.transform,s)}}function T(){if(n.apply(this,arguments)){var e,r,i,a,o=b(this,arguments),s=$t.changedTouches,u=s.length;for(YM(),r=0;r<u;++r)i=s[r],a=[a=he(this,s,i.identifier),this.__zoom.invert(a),i.identifier],o.touch0?o.touch1||(o.touch1=a):(o.touch0=a,e=!0);if(t&&(t=clearTimeout(t),!o.touch1))return o.end(),void((a=ie(this).on("dblclick.zoom"))&&a.apply(this,arguments));e&&(t=setTimeout(function(){t=null},h),Jr(this),o.start())}}function D(){var e,n,r,a,o=b(this,arguments),s=$t.changedTouches,c=s.length;for(SM(),t&&(t=clearTimeout(t)),e=0;e<c;++e)n=s[e],r=he(this,s,n.identifier),o.touch0&&o.touch0[2]===n.identifier?o.touch0[0]=r:o.touch1&&o.touch1[2]===n.identifier&&(o.touch1[0]=r);if(n=o.that.__zoom,o.touch1){var l=o.touch0[0],d=o.touch0[1],f=o.touch1[0],h=o.touch1[1],_=(_=f[0]-l[0])*_+(_=f[1]-l[1])*_,p=(p=h[0]-d[0])*p+(p=h[1]-d[1])*p;n=y(n,Math.sqrt(_/p)),r=[(l[0]+f[0])/2,(l[1]+f[1])/2],a=[(d[0]+h[0])/2,(d[1]+h[1])/2]}else{if(!o.touch0)return;r=o.touch0[0],a=o.touch0[1]}o.zoom("touch",i(g(n,r,a),o.extent,u))}function Y(){var t,n,r=b(this,arguments),i=$t.changedTouches,a=i.length;for(YM(),e&&clearTimeout(e),e=setTimeout(function(){e=null},h),t=0;t<a;++t)n=i[t],r.touch0&&r.touch0[2]===n.identifier?delete r.touch0:r.touch1&&r.touch1[2]===n.identifier&&delete r.touch1;r.touch1&&!r.touch0&&(r.touch0=r.touch1,delete r.touch1),r.touch0?r.touch0[1]=this.__zoom.invert(r.touch0[0]):r.end()}return m.transform=function(t,e){var n=t.selection?t.selection():t;n.property("__zoom",CM),t!==n?M(t,e):n.interrupt().each(function(){b(this,arguments).start().zoom(null,"function"==typeof e?e.apply(this,arguments):e).end()})},m.scaleBy=function(t,e){m.scaleTo(t,function(){return this.__zoom.k*("function"==typeof e?e.apply(this,arguments):e)})},m.scaleTo=function(t,e){m.transform(t,function(){var t=r.apply(this,arguments),n=this.__zoom,a=v(t),o=n.invert(a),s="function"==typeof e?e.apply(this,arguments):e;return i(g(y(n,s),a,o),t,u)})},m.translateBy=function(t,e,n){m.transform(t,function(){return i(this.__zoom.translate("function"==typeof e?e.apply(this,arguments):e,"function"==typeof n?n.apply(this,arguments):n),r.apply(this,arguments),u)})},m.translateTo=function(t,e,n){m.transform(t,function(){var t=r.apply(this,arguments),a=this.__zoom,o=v(t);return i(TM.translate(o[0],o[1]).scale(a.k).translate("function"==typeof e?-e.apply(this,arguments):-e,"function"==typeof n?-n.apply(this,arguments):-n),t,u)})},k.prototype={start:function(){return 1==++this.active&&(this.index=d.push(this)-1,this.emit("start")),this},zoom:function(t,e){return this.mouse&&"mouse"!==t&&(this.mouse[1]=e.invert(this.mouse[0])),this.touch0&&"touch"!==t&&(this.touch0[1]=e.invert(this.touch0[0])),this.touch1&&"touch"!==t&&(this.touch1[1]=e.invert(this.touch1[0])),this.that.__zoom=e,this.emit("zoom"),this},end:function(){return 0==--this.active&&(d.splice(this.index,1),this.index=-1,this.emit("end")),this},emit:function(t){Kt(new function(t,e,n){this.target=t,this.type=e,this.transform=n}(m,t,this.that.__zoom),f.apply,f,[t,this.that,this.args])}},m.wheelDelta=function(t){return arguments.length?(a="function"==typeof t?t:wM(+t),m):a},m.filter=function(t){return arguments.length?(n="function"==typeof t?t:wM(!!t),m):n},m.touchable=function(t){return arguments.length?(o="function"==typeof t?t:wM(!!t),m):o},m.extent=function(t){return arguments.length?(r="function"==typeof t?t:wM([[+t[0][0],+t[0][1]],[+t[1][0],+t[1][1]]]),m):r},m.scaleExtent=function(t){return arguments.length?(s[0]=+t[0],s[1]=+t[1],m):[s[0],s[1]]},m.translateExtent=function(t){return arguments.length?(u[0][0]=+t[0][0],u[1][0]=+t[1][0],u[0][1]=+t[0][1],u[1][1]=+t[1][1],m):[[u[0][0],u[0][1]],[u[1][0],u[1][1]]]},m.constrain=function(t){return arguments.length?(i=t,m):i},m.duration=function(t){return arguments.length?(c=+t,m):c},m.interpolate=function(t){return arguments.length?(l=t,m):l},m.on=function(){var t=f.on.apply(f,arguments);return t===f?m:t},m.clickDistance=function(t){return arguments.length?(p=(t=+t)*t,m):Math.sqrt(p)},m};n.d(e,"version",function(){return"4.13.0"}),n.d(e,"bisect",function(){return u}),n.d(e,"bisectRight",function(){return o}),n.d(e,"bisectLeft",function(){return s}),n.d(e,"ascending",function(){return r}),n.d(e,"bisector",function(){return i}),n.d(e,"cross",function(){return d}),n.d(e,"descending",function(){return f}),n.d(e,"deviation",function(){return p}),n.d(e,"extent",function(){return m}),n.d(e,"histogram",function(){return E}),n.d(e,"thresholdFreedmanDiaconis",function(){return C}),n.d(e,"thresholdScott",function(){return j}),n.d(e,"thresholdSturges",function(){return S}),n.d(e,"max",function(){return O}),n.d(e,"mean",function(){return H}),n.d(e,"median",function(){return P}),n.d(e,"merge",function(){return F}),n.d(e,"min",function(){return N}),n.d(e,"pairs",function(){return c}),n.d(e,"permute",function(){return B}),n.d(e,"quantile",function(){return A}),n.d(e,"range",function(){return k}),n.d(e,"scan",function(){return R}),n.d(e,"shuffle",function(){return I}),n.d(e,"sum",function(){return z}),n.d(e,"ticks",function(){return T}),n.d(e,"tickIncrement",function(){return D}),n.d(e,"tickStep",function(){return Y}),n.d(e,"transpose",function(){return W}),n.d(e,"variance",function(){return _}),n.d(e,"zip",function(){return U}),n.d(e,"axisTop",function(){return rt}),n.d(e,"axisRight",function(){return it}),n.d(e,"axisBottom",function(){return at}),n.d(e,"axisLeft",function(){return ot}),n.d(e,"brush",function(){return va}),n.d(e,"brushX",function(){return ya}),n.d(e,"brushY",function(){return ga}),n.d(e,"brushSelection",function(){return ma}),n.d(e,"chord",function(){return Da}),n.d(e,"ribbon",function(){return Ia}),n.d(e,"nest",function(){return Ua}),n.d(e,"set",function(){return Qa}),n.d(e,"map",function(){return qa}),n.d(e,"keys",function(){return to}),n.d(e,"values",function(){return eo}),n.d(e,"entries",function(){return no}),n.d(e,"color",function(){return Ie}),n.d(e,"rgb",function(){return Ue}),n.d(e,"hsl",function(){return Ge}),n.d(e,"lab",function(){return un}),n.d(e,"hcl",function(){return _n}),n.d(e,"cubehelix",function(){return kn}),n.d(e,"dispatch",function(){return ft}),n.d(e,"drag",function(){return xe}),n.d(e,"dragDisable",function(){return ye}),n.d(e,"dragEnable",function(){return ge}),n.d(e,"dsvFormat",function(){return co}),n.d(e,"csvParse",function(){return fo}),n.d(e,"csvParseRows",function(){return ho}),n.d(e,"csvFormat",function(){return _o}),n.d(e,"csvFormatRows",function(){return po}),n.d(e,"tsvParse",function(){return yo}),n.d(e,"tsvParseRows",function(){return go}),n.d(e,"tsvFormat",function(){return vo}),n.d(e,"tsvFormatRows",function(){return Mo}),n.d(e,"easeLinear",function(){return ii}),n.d(e,"easeQuad",function(){return si}),n.d(e,"easeQuadIn",function(){return ai}),n.d(e,"easeQuadOut",function(){return oi}),n.d(e,"easeQuadInOut",function(){return si}),n.d(e,"easeCubic",function(){return li}),n.d(e,"easeCubicIn",function(){return ui}),n.d(e,"easeCubicOut",function(){return ci}),n.d(e,"easeCubicInOut",function(){return li}),n.d(e,"easePoly",function(){return hi}),n.d(e,"easePolyIn",function(){return di}),n.d(e,"easePolyOut",function(){return fi}),n.d(e,"easePolyInOut",function(){return hi}),n.d(e,"easeSin",function(){return gi}),n.d(e,"easeSinIn",function(){return mi}),n.d(e,"easeSinOut",function(){return yi}),n.d(e,"easeSinInOut",function(){return gi}),n.d(e,"easeExp",function(){return bi}),n.d(e,"easeExpIn",function(){return vi}),n.d(e,"easeExpOut",function(){return Mi}),n.d(e,"easeExpInOut",function(){return bi}),n.d(e,"easeCircle",function(){return wi}),n.d(e,"easeCircleIn",function(){return ki}),n.d(e,"easeCircleOut",function(){return Li}),n.d(e,"easeCircleInOut",function(){return wi}),n.d(e,"easeBounce",function(){return Pi}),n.d(e,"easeBounceIn",function(){return Hi}),n.d(e,"easeBounceOut",function(){return Pi}),n.d(e,"easeBounceInOut",function(){return Fi}),n.d(e,"easeBack",function(){return Ri}),n.d(e,"easeBackIn",function(){return Ni}),n.d(e,"easeBackOut",function(){return Bi}),n.d(e,"easeBackInOut",function(){return Ri}),n.d(e,"easeElastic",function(){return Wi}),n.d(e,"easeElasticIn",function(){return zi}),n.d(e,"easeElasticOut",function(){return Wi}),n.d(e,"easeElasticInOut",function(){return qi}),n.d(e,"forceCenter",function(){return bo}),n.d(e,"forceCollide",function(){return Oo}),n.d(e,"forceLink",function(){return Fo}),n.d(e,"forceManyBody",function(){return qo}),n.d(e,"forceRadial",function(){return Uo}),n.d(e,"forceSimulation",function(){return Wo}),n.d(e,"forceX",function(){return Vo}),n.d(e,"forceY",function(){return $o}),n.d(e,"formatDefaultLocale",function(){return ss}),n.d(e,"format",function(){return ns}),n.d(e,"formatPrefix",function(){return rs}),n.d(e,"formatLocale",function(){return os}),n.d(e,"formatSpecifier",function(){return Qo}),n.d(e,"precisionFixed",function(){return us}),n.d(e,"precisionPrefix",function(){return cs}),n.d(e,"precisionRound",function(){return ls}),n.d(e,"geoArea",function(){return nu}),n.d(e,"geoBounds",function(){return Gu}),n.d(e,"geoCentroid",function(){return oc}),n.d(e,"geoCircle",function(){return yc}),n.d(e,"geoClipAntimeridian",function(){return Yc}),n.d(e,"geoClipCircle",function(){return Sc}),n.d(e,"geoClipExtent",function(){return Fc}),n.d(e,"geoClipRectangle",function(){return jc}),n.d(e,"geoContains",function(){return el}),n.d(e,"geoDistance",function(){return Vc}),n.d(e,"geoGraticule",function(){return il}),n.d(e,"geoGraticule10",function(){return al}),n.d(e,"geoInterpolate",function(){return ll}),n.d(e,"geoLength",function(){return Wc}),n.d(e,"geoPath",function(){return ud}),n.d(e,"geoAlbers",function(){return Td}),n.d(e,"geoAlbersUsa",function(){return Dd}),n.d(e,"geoAzimuthalEqualArea",function(){return Ad}),n.d(e,"geoAzimuthalEqualAreaRaw",function(){return Ed}),n.d(e,"geoAzimuthalEquidistant",function(){return jd}),n.d(e,"geoAzimuthalEquidistantRaw",function(){return Cd}),n.d(e,"geoConicConformal",function(){return Bd}),n.d(e,"geoConicConformalRaw",function(){return Nd}),n.d(e,"geoConicEqualArea",function(){return xd}),n.d(e,"geoConicEqualAreaRaw",function(){return wd}),n.d(e,"geoConicEquidistant",function(){return Wd}),n.d(e,"geoConicEquidistantRaw",function(){return zd}),n.d(e,"geoEquirectangular",function(){return Id}),n.d(e,"geoEquirectangularRaw",function(){return Rd}),n.d(e,"geoGnomonic",function(){return Ud}),n.d(e,"geoGnomonicRaw",function(){return qd}),n.d(e,"geoIdentity",function(){return $d}),n.d(e,"geoProjection",function(){return bd}),n.d(e,"geoProjectionMutator",function(){return kd}),n.d(e,"geoMercator",function(){return Hd}),n.d(e,"geoMercatorRaw",function(){return Od}),n.d(e,"geoNaturalEarth1",function(){return Jd}),n.d(e,"geoNaturalEarth1Raw",function(){return Gd}),n.d(e,"geoOrthographic",function(){return Zd}),n.d(e,"geoOrthographicRaw",function(){return Xd}),n.d(e,"geoStereographic",function(){return Qd}),n.d(e,"geoStereographicRaw",function(){return Kd}),n.d(e,"geoTransverseMercator",function(){return ef}),n.d(e,"geoTransverseMercatorRaw",function(){return tf}),n.d(e,"geoRotation",function(){return _c}),n.d(e,"geoStream",function(){return Gs}),n.d(e,"geoTransform",function(){return cd}),n.d(e,"cluster",function(){return of}),n.d(e,"hierarchy",function(){return uf}),n.d(e,"pack",function(){return Cf}),n.d(e,"packSiblings",function(){return Df}),n.d(e,"packEnclose",function(){return _f}),n.d(e,"partition",function(){return Nf}),n.d(e,"stratify",function(){return qf}),n.d(e,"tree",function(){return Zf}),n.d(e,"treemap",function(){return nh}),n.d(e,"treemapBinary",function(){return rh}),n.d(e,"treemapDice",function(){return Ff}),n.d(e,"treemapSlice",function(){return Kf}),n.d(e,"treemapSliceDice",function(){return ih}),n.d(e,"treemapSquarify",function(){return eh}),n.d(e,"treemapResquarify",function(){return ah}),n.d(e,"interpolate",function(){return $n}),n.d(e,"interpolateArray",function(){return Pn}),n.d(e,"interpolateBasis",function(){return xn}),n.d(e,"interpolateBasisClosed",function(){return Tn}),n.d(e,"interpolateDate",function(){return Fn}),n.d(e,"interpolateNumber",function(){return Nn}),n.d(e,"interpolateObject",function(){return Bn}),n.d(e,"interpolateRound",function(){return Gn}),n.d(e,"interpolateString",function(){return Vn}),n.d(e,"interpolateTransformCss",function(){return Qn}),n.d(e,"interpolateTransformSvg",function(){return tr}),n.d(e,"interpolateZoom",function(){return rr}),n.d(e,"interpolateRgb",function(){return Cn}),n.d(e,"interpolateRgbBasis",function(){return On}),n.d(e,"interpolateRgbBasisClosed",function(){return Hn}),n.d(e,"interpolateHsl",function(){return ar}),n.d(e,"interpolateHslLong",function(){return or}),n.d(e,"interpolateLab",function(){return sr}),n.d(e,"interpolateHcl",function(){return cr}),n.d(e,"interpolateHclLong",function(){return lr}),n.d(e,"interpolateCubehelix",function(){return _r}),n.d(e,"interpolateCubehelixLong",function(){return pr}),n.d(e,"quantize",function(){return mr}),n.d(e,"path",function(){return Ha}),n.d(e,"polygonArea",function(){return oh}),n.d(e,"polygonCentroid",function(){return sh}),n.d(e,"polygonHull",function(){return dh}),n.d(e,"polygonContains",function(){return fh}),n.d(e,"polygonLength",function(){return hh}),n.d(e,"quadtree",function(){return Yo}),n.d(e,"queue",function(){return bh}),n.d(e,"randomUniform",function(){return Lh}),n.d(e,"randomNormal",function(){return wh}),n.d(e,"randomLogNormal",function(){return xh}),n.d(e,"randomBates",function(){return Dh}),n.d(e,"randomIrwinHall",function(){return Th}),n.d(e,"randomExponential",function(){return Yh}),n.d(e,"request",function(){return Sh}),n.d(e,"html",function(){return Ah}),n.d(e,"json",function(){return Ch}),n.d(e,"text",function(){return jh}),n.d(e,"xml",function(){return Oh}),n.d(e,"csv",function(){return Ph}),n.d(e,"tsv",function(){return Fh}),n.d(e,"scaleBand",function(){return Wh}),n.d(e,"scalePoint",function(){return qh}),n.d(e,"scaleIdentity",function(){return n_}),n.d(e,"scaleLinear",function(){return e_}),n.d(e,"scaleLog",function(){return l_}),n.d(e,"scaleOrdinal",function(){return zh}),n.d(e,"scaleImplicit",function(){return Ih}),n.d(e,"scalePow",function(){return f_}),n.d(e,"scaleSqrt",function(){return h_}),n.d(e,"scaleQuantile",function(){return __}),n.d(e,"scaleQuantize",function(){return p_}),n.d(e,"scaleThreshold",function(){return m_}),n.d(e,"scaleTime",function(){return fy}),n.d(e,"scaleUtc",function(){return hy}),n.d(e,"schemeCategory10",function(){return py}),n.d(e,"schemeCategory20b",function(){return my}),n.d(e,"schemeCategory20c",function(){return yy}),n.d(e,"schemeCategory20",function(){return gy}),n.d(e,"interpolateCubehelixDefault",function(){return vy}),n.d(e,"interpolateRainbow",function(){return Ly}),n.d(e,"interpolateWarm",function(){return My}),n.d(e,"interpolateCool",function(){return by}),n.d(e,"interpolateViridis",function(){return xy}),n.d(e,"interpolateMagma",function(){return Ty}),n.d(e,"interpolateInferno",function(){return Dy}),n.d(e,"interpolatePlasma",function(){return Yy}),n.d(e,"scaleSequential",function(){return Sy}),n.d(e,"create",function(){return ae}),n.d(e,"creator",function(){return mt}),n.d(e,"local",function(){return se}),n.d(e,"matcher",function(){return wt}),n.d(e,"mouse",function(){return de}),n.d(e,"namespace",function(){return pt}),n.d(e,"namespaces",function(){return _t}),n.d(e,"clientPoint",function(){return le}),n.d(e,"select",function(){return ie}),n.d(e,"selectAll",function(){return fe}),n.d(e,"selection",function(){return re}),n.d(e,"selector",function(){return gt}),n.d(e,"selectorAll",function(){return Mt}),n.d(e,"style",function(){return Ct}),n.d(e,"touch",function(){return he}),n.d(e,"touches",function(){return _e}),n.d(e,"window",function(){return At}),n.d(e,"event",function(){return $t}),n.d(e,"customEvent",function(){return Kt}),n.d(e,"arc",function(){return Jy}),n.d(e,"area",function(){return eg}),n.d(e,"line",function(){return tg}),n.d(e,"pie",function(){return ig}),n.d(e,"areaRadial",function(){return lg}),n.d(e,"radialArea",function(){return lg}),n.d(e,"lineRadial",function(){return cg}),n.d(e,"radialLine",function(){return cg}),n.d(e,"pointRadial",function(){return dg}),n.d(e,"linkHorizontal",function(){return vg}),n.d(e,"linkVertical",function(){return Mg}),n.d(e,"linkRadial",function(){return bg}),n.d(e,"symbol",function(){return Bg}),n.d(e,"symbols",function(){return Ng}),n.d(e,"symbolCircle",function(){return kg}),n.d(e,"symbolCross",function(){return Lg}),n.d(e,"symbolDiamond",function(){return Tg}),n.d(e,"symbolSquare",function(){return Ag}),n.d(e,"symbolStar",function(){return Eg}),n.d(e,"symbolTriangle",function(){return jg}),n.d(e,"symbolWye",function(){return Fg}),n.d(e,"curveBasisClosed",function(){return Ug}),n.d(e,"curveBasisOpen",function(){return $g}),n.d(e,"curveBasis",function(){return Wg}),n.d(e,"curveBundle",function(){return Jg}),n.d(e,"curveCardinalClosed",function(){return tv}),n.d(e,"curveCardinalOpen",function(){return nv}),n.d(e,"curveCardinal",function(){return Kg}),n.d(e,"curveCatmullRomClosed",function(){return sv}),n.d(e,"curveCatmullRomOpen",function(){return cv}),n.d(e,"curveCatmullRom",function(){return av}),n.d(e,"curveLinearClosed",function(){return dv}),n.d(e,"curveLinear",function(){return Zy}),n.d(e,"curveMonotoneX",function(){return vv}),n.d(e,"curveMonotoneY",function(){return Mv}),n.d(e,"curveNatural",function(){return Lv}),n.d(e,"curveStep",function(){return xv}),n.d(e,"curveStepAfter",function(){return Dv}),n.d(e,"curveStepBefore",function(){return Tv}),n.d(e,"stack",function(){return Av}),n.d(e,"stackOffsetExpand",function(){return Cv}),n.d(e,"stackOffsetDiverging",function(){return jv}),n.d(e,"stackOffsetNone",function(){return Yv}),n.d(e,"stackOffsetSilhouette",function(){return Ov}),n.d(e,"stackOffsetWiggle",function(){return Hv}),n.d(e,"stackOrderAscending",function(){return Pv}),n.d(e,"stackOrderDescending",function(){return Nv}),n.d(e,"stackOrderInsideOut",function(){return Bv}),n.d(e,"stackOrderNone",function(){return Sv}),n.d(e,"stackOrderReverse",function(){return Rv}),n.d(e,"timeInterval",function(){return v_}),n.d(e,"timeMillisecond",function(){return b_}),n.d(e,"timeMilliseconds",function(){return k_}),n.d(e,"utcMillisecond",function(){return b_}),n.d(e,"utcMilliseconds",function(){return k_}),n.d(e,"timeSecond",function(){return T_}),n.d(e,"timeSeconds",function(){return D_}),n.d(e,"utcSecond",function(){return T_}),n.d(e,"utcSeconds",function(){return D_}),n.d(e,"timeMinute",function(){return S_}),n.d(e,"timeMinutes",function(){return E_}),n.d(e,"timeHour",function(){return C_}),n.d(e,"timeHours",function(){return j_}),n.d(e,"timeDay",function(){return H_}),n.d(e,"timeDays",function(){return P_}),n.d(e,"timeWeek",function(){return N_}),n.d(e,"timeWeeks",function(){return U_}),n.d(e,"timeSunday",function(){return N_}),n.d(e,"timeSundays",function(){return U_}),n.d(e,"timeMonday",function(){return B_}),n.d(e,"timeMondays",function(){return V_}),n.d(e,"timeTuesday",function(){return R_}),n.d(e,"timeTuesdays",function(){return $_}),n.d(e,"timeWednesday",function(){return I_}),n.d(e,"timeWednesdays",function(){return G_}),n.d(e,"timeThursday",function(){return z_}),n.d(e,"timeThursdays",function(){return J_}),n.d(e,"timeFriday",function(){return W_}),n.d(e,"timeFridays",function(){return X_}),n.d(e,"timeSaturday",function(){return q_}),n.d(e,"timeSaturdays",function(){return Z_}),n.d(e,"timeMonth",function(){return Q_}),n.d(e,"timeMonths",function(){return tp}),n.d(e,"timeYear",function(){return np}),n.d(e,"timeYears",function(){return rp}),n.d(e,"utcMinute",function(){return ap}),n.d(e,"utcMinutes",function(){return op}),n.d(e,"utcHour",function(){return up}),n.d(e,"utcHours",function(){return cp}),n.d(e,"utcDay",function(){return dp}),n.d(e,"utcDays",function(){return fp}),n.d(e,"utcWeek",function(){return _p}),n.d(e,"utcWeeks",function(){return bp}),n.d(e,"utcSunday",function(){return _p}),n.d(e,"utcSundays",function(){return bp}),n.d(e,"utcMonday",function(){return pp}),n.d(e,"utcMondays",function(){return kp}),n.d(e,"utcTuesday",function(){return mp}),n.d(e,"utcTuesdays",function(){return Lp}),n.d(e,"utcWednesday",function(){return yp}),n.d(e,"utcWednesdays",function(){return wp}),n.d(e,"utcThursday",function(){return gp}),n.d(e,"utcThursdays",function(){return xp}),n.d(e,"utcFriday",function(){return vp}),n.d(e,"utcFridays",function(){return Tp}),n.d(e,"utcSaturday",function(){return Mp}),n.d(e,"utcSaturdays",function(){return Dp}),n.d(e,"utcMonth",function(){return Sp}),n.d(e,"utcMonths",function(){return Ep}),n.d(e,"utcYear",function(){return Cp}),n.d(e,"utcYears",function(){return jp}),n.d(e,"timeFormatDefaultLocale",function(){return Qm}),n.d(e,"timeFormat",function(){return Bp}),n.d(e,"timeParse",function(){return Rp}),n.d(e,"utcFormat",function(){return Ip}),n.d(e,"utcParse",function(){return zp}),n.d(e,"timeFormatLocale",function(){return Fp}),n.d(e,"isoFormat",function(){return ty}),n.d(e,"isoParse",function(){return ey}),n.d(e,"now",function(){return Tr}),n.d(e,"timer",function(){return Sr}),n.d(e,"timerFlush",function(){return Er}),n.d(e,"timeout",function(){return Or}),n.d(e,"interval",function(){return Hr}),n.d(e,"transition",function(){return ei}),n.d(e,"active",function(){return Gi}),n.d(e,"interrupt",function(){return Jr}),n.d(e,"voronoi",function(){return LM}),n.d(e,"zoom",function(){return PM}),n.d(e,"zoomTransform",function(){return DM}),n.d(e,"zoomIdentity",function(){return TM})},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){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 u,c=[],l=!1,d=-1;function f(){l&&u&&(l=!1,u.length?c=u.concat(c):d=-1,c.length&&h())}function h(){if(!l){var t=s(f);l=!0;for(var e=c.length;e;){for(u=c,c=[];++d<e;)u&&u[d].run();d=-1,e=c.length}u=null,l=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===o||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function _(t,e){this.fun=t,this.array=e}function p(){}i.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new _(t,e)),1!==c.length||l||s(h)},_.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=p,i.addListener=p,i.once=p,i.off=p,i.removeListener=p,i.removeAllListeners=p,i.emit=p,i.prependListener=p,i.prependOnceListener=p,i.listeners=function(t){return[]},i.binding=function(t){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(t){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},function(t,e,n){(function(t){function n(t,e){for(var n=0,r=t.length-1;r>=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}var r=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,i=function(t){return r.exec(t).slice(1)};function a(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r<t.length;r++)e(t[r],r,t)&&n.push(t[r]);return n}e.resolve=function(){for(var e="",r=!1,i=arguments.length-1;i>=-1&&!r;i--){var o=i>=0?arguments[i]:t.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(e=o+"/"+e,r="/"===o.charAt(0))}return e=n(a(e.split("/"),function(t){return!!t}),!r).join("/"),(r?"/":"")+e||"."},e.normalize=function(t){var r=e.isAbsolute(t),i="/"===o(t,-1);return(t=n(a(t.split("/"),function(t){return!!t}),!r).join("/"))||r||(t="."),t&&i&&(t+="/"),(r?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(a(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<t.length&&""===t[e];e++);for(var n=t.length-1;n>=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,u=0;u<o;u++)if(i[u]!==a[u]){s=u;break}var c=[];for(u=s;u<i.length;u++)c.push("..");return(c=c.concat(a.slice(s))).join("/")},e.sep="/",e.delimiter=":",e.dirname=function(t){var e=i(t),n=e[0],r=e[1];return n||r?(r&&(r=r.substr(0,r.length-1)),n+r):"."},e.basename=function(t,e){var n=i(t)[2];return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){return i(t)[3]};var o="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(5))},function(t,e){},function(t,e,n){(function(t,n){(function(){var r,i=200,a="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",o="Expected a function",s="__lodash_hash_undefined__",u=500,c="__lodash_placeholder__",l=1,d=2,f=4,h=1,_=2,p=1,m=2,y=4,g=8,v=16,M=32,b=64,k=128,L=256,w=512,x=30,T="...",D=800,Y=16,S=1,E=2,A=1/0,C=9007199254740991,j=1.7976931348623157e308,O=NaN,H=4294967295,P=H-1,F=H>>>1,N=[["ary",k],["bind",p],["bindKey",m],["curry",g],["curryRight",v],["flip",w],["partial",M],["partialRight",b],["rearg",L]],B="[object Arguments]",R="[object Array]",I="[object AsyncFunction]",z="[object Boolean]",W="[object Date]",q="[object DOMException]",U="[object Error]",V="[object Function]",$="[object GeneratorFunction]",G="[object Map]",J="[object Number]",X="[object Null]",Z="[object Object]",K="[object Proxy]",Q="[object RegExp]",tt="[object Set]",et="[object String]",nt="[object Symbol]",rt="[object Undefined]",it="[object WeakMap]",at="[object WeakSet]",ot="[object ArrayBuffer]",st="[object DataView]",ut="[object Float32Array]",ct="[object Float64Array]",lt="[object Int8Array]",dt="[object Int16Array]",ft="[object Int32Array]",ht="[object Uint8Array]",_t="[object Uint8ClampedArray]",pt="[object Uint16Array]",mt="[object Uint32Array]",yt=/\b__p \+= '';/g,gt=/\b(__p \+=) '' \+/g,vt=/(__e\(.*?\)|\b__t\)) \+\n'';/g,Mt=/&(?:amp|lt|gt|quot|#39);/g,bt=/[&<>"']/g,kt=RegExp(Mt.source),Lt=RegExp(bt.source),wt=/<%-([\s\S]+?)%>/g,xt=/<%([\s\S]+?)%>/g,Tt=/<%=([\s\S]+?)%>/g,Dt=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,Yt=/^\w*$/,St=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Et=/[\\^$.*+?()[\]{}|]/g,At=RegExp(Et.source),Ct=/^\s+|\s+$/g,jt=/^\s+/,Ot=/\s+$/,Ht=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Pt=/\{\n\/\* \[wrapped with (.+)\] \*/,Ft=/,? & /,Nt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Bt=/\\(\\)?/g,Rt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,It=/\w*$/,zt=/^[-+]0x[0-9a-f]+$/i,Wt=/^0b[01]+$/i,qt=/^\[object .+?Constructor\]$/,Ut=/^0o[0-7]+$/i,Vt=/^(?:0|[1-9]\d*)$/,$t=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Gt=/($^)/,Jt=/['\n\r\u2028\u2029\\]/g,Xt="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",Zt="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Kt="[\\ud800-\\udfff]",Qt="["+Zt+"]",te="["+Xt+"]",ee="\\d+",ne="[\\u2700-\\u27bf]",re="[a-z\\xdf-\\xf6\\xf8-\\xff]",ie="[^\\ud800-\\udfff"+Zt+ee+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",ae="\\ud83c[\\udffb-\\udfff]",oe="[^\\ud800-\\udfff]",se="(?:\\ud83c[\\udde6-\\uddff]){2}",ue="[\\ud800-\\udbff][\\udc00-\\udfff]",ce="[A-Z\\xc0-\\xd6\\xd8-\\xde]",le="(?:"+re+"|"+ie+")",de="(?:"+ce+"|"+ie+")",fe="(?:"+te+"|"+ae+")"+"?",he="[\\ufe0e\\ufe0f]?"+fe+("(?:\\u200d(?:"+[oe,se,ue].join("|")+")[\\ufe0e\\ufe0f]?"+fe+")*"),_e="(?:"+[ne,se,ue].join("|")+")"+he,pe="(?:"+[oe+te+"?",te,se,ue,Kt].join("|")+")",me=RegExp("['’]","g"),ye=RegExp(te,"g"),ge=RegExp(ae+"(?="+ae+")|"+pe+he,"g"),ve=RegExp([ce+"?"+re+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[Qt,ce,"$"].join("|")+")",de+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[Qt,ce+le,"$"].join("|")+")",ce+"?"+le+"+(?:['’](?:d|ll|m|re|s|t|ve))?",ce+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ee,_e].join("|"),"g"),Me=RegExp("[\\u200d\\ud800-\\udfff"+Xt+"\\ufe0e\\ufe0f]"),be=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,ke=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Le=-1,we={};we[ut]=we[ct]=we[lt]=we[dt]=we[ft]=we[ht]=we[_t]=we[pt]=we[mt]=!0,we[B]=we[R]=we[ot]=we[z]=we[st]=we[W]=we[U]=we[V]=we[G]=we[J]=we[Z]=we[Q]=we[tt]=we[et]=we[it]=!1;var xe={};xe[B]=xe[R]=xe[ot]=xe[st]=xe[z]=xe[W]=xe[ut]=xe[ct]=xe[lt]=xe[dt]=xe[ft]=xe[G]=xe[J]=xe[Z]=xe[Q]=xe[tt]=xe[et]=xe[nt]=xe[ht]=xe[_t]=xe[pt]=xe[mt]=!0,xe[U]=xe[V]=xe[it]=!1;var Te={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},De=parseFloat,Ye=parseInt,Se="object"==typeof t&&t&&t.Object===Object&&t,Ee="object"==typeof self&&self&&self.Object===Object&&self,Ae=Se||Ee||Function("return this")(),Ce="object"==typeof e&&e&&!e.nodeType&&e,je=Ce&&"object"==typeof n&&n&&!n.nodeType&&n,Oe=je&&je.exports===Ce,He=Oe&&Se.process,Pe=function(){try{return He&&He.binding&&He.binding("util")}catch(t){}}(),Fe=Pe&&Pe.isArrayBuffer,Ne=Pe&&Pe.isDate,Be=Pe&&Pe.isMap,Re=Pe&&Pe.isRegExp,Ie=Pe&&Pe.isSet,ze=Pe&&Pe.isTypedArray;function We(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function qe(t,e,n,r){for(var i=-1,a=null==t?0:t.length;++i<a;){var o=t[i];e(r,o,n(o),t)}return r}function Ue(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function Ve(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function $e(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function Ge(t,e){for(var n=-1,r=null==t?0:t.length,i=0,a=[];++n<r;){var o=t[n];e(o,n,t)&&(a[i++]=o)}return a}function Je(t,e){return!!(null==t?0:t.length)&&on(t,e,0)>-1}function Xe(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function Ze(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function Ke(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function Qe(t,e,n,r){var i=-1,a=null==t?0:t.length;for(r&&a&&(n=t[++i]);++i<a;)n=e(n,t[i],i,t);return n}function tn(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function en(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}var nn=ln("length");function rn(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function an(t,e,n,r){for(var i=t.length,a=n+(r?1:-1);r?a--:++a<i;)if(e(t[a],a,t))return a;return-1}function on(t,e,n){return e==e?function(t,e,n){var r=n-1,i=t.length;for(;++r<i;)if(t[r]===e)return r;return-1}(t,e,n):an(t,un,n)}function sn(t,e,n,r){for(var i=n-1,a=t.length;++i<a;)if(r(t[i],e))return i;return-1}function un(t){return t!=t}function cn(t,e){var n=null==t?0:t.length;return n?hn(t,e)/n:O}function ln(t){return function(e){return null==e?r:e[t]}}function dn(t){return function(e){return null==t?r:t[e]}}function fn(t,e,n,r,i){return i(t,function(t,i,a){n=r?(r=!1,t):e(n,t,i,a)}),n}function hn(t,e){for(var n,i=-1,a=t.length;++i<a;){var o=e(t[i]);o!==r&&(n=n===r?o:n+o)}return n}function _n(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function pn(t){return function(e){return t(e)}}function mn(t,e){return Ze(e,function(e){return t[e]})}function yn(t,e){return t.has(e)}function gn(t,e){for(var n=-1,r=t.length;++n<r&&on(e,t[n],0)>-1;);return n}function vn(t,e){for(var n=t.length;n--&&on(e,t[n],0)>-1;);return n}var Mn=dn({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),bn=dn({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"});function kn(t){return"\\"+Te[t]}function Ln(t){return Me.test(t)}function wn(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function xn(t,e){return function(n){return t(e(n))}}function Tn(t,e){for(var n=-1,r=t.length,i=0,a=[];++n<r;){var o=t[n];o!==e&&o!==c||(t[n]=c,a[i++]=n)}return a}function Dn(t,e){return"__proto__"==e?r:t[e]}function Yn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function Sn(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function En(t){return Ln(t)?function(t){var e=ge.lastIndex=0;for(;ge.test(t);)++e;return e}(t):nn(t)}function An(t){return Ln(t)?function(t){return t.match(ge)||[]}(t):function(t){return t.split("")}(t)}var Cn=dn({"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'"});var jn=function t(e){var n,Xt=(e=null==e?Ae:jn.defaults(Ae.Object(),e,jn.pick(Ae,ke))).Array,Zt=e.Date,Kt=e.Error,Qt=e.Function,te=e.Math,ee=e.Object,ne=e.RegExp,re=e.String,ie=e.TypeError,ae=Xt.prototype,oe=Qt.prototype,se=ee.prototype,ue=e["__core-js_shared__"],ce=oe.toString,le=se.hasOwnProperty,de=0,fe=(n=/[^.]+$/.exec(ue&&ue.keys&&ue.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",he=se.toString,_e=ce.call(ee),pe=Ae._,ge=ne("^"+ce.call(le).replace(Et,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Me=Oe?e.Buffer:r,Te=e.Symbol,Se=e.Uint8Array,Ee=Me?Me.allocUnsafe:r,Ce=xn(ee.getPrototypeOf,ee),je=ee.create,He=se.propertyIsEnumerable,Pe=ae.splice,nn=Te?Te.isConcatSpreadable:r,dn=Te?Te.iterator:r,On=Te?Te.toStringTag:r,Hn=function(){try{var t=Ba(ee,"defineProperty");return t({},"",{}),t}catch(t){}}(),Pn=e.clearTimeout!==Ae.clearTimeout&&e.clearTimeout,Fn=Zt&&Zt.now!==Ae.Date.now&&Zt.now,Nn=e.setTimeout!==Ae.setTimeout&&e.setTimeout,Bn=te.ceil,Rn=te.floor,In=ee.getOwnPropertySymbols,zn=Me?Me.isBuffer:r,Wn=e.isFinite,qn=ae.join,Un=xn(ee.keys,ee),Vn=te.max,$n=te.min,Gn=Zt.now,Jn=e.parseInt,Xn=te.random,Zn=ae.reverse,Kn=Ba(e,"DataView"),Qn=Ba(e,"Map"),tr=Ba(e,"Promise"),er=Ba(e,"Set"),nr=Ba(e,"WeakMap"),rr=Ba(ee,"create"),ir=nr&&new nr,ar={},or=lo(Kn),sr=lo(Qn),ur=lo(tr),cr=lo(er),lr=lo(nr),dr=Te?Te.prototype:r,fr=dr?dr.valueOf:r,hr=dr?dr.toString:r;function _r(t){if(Ys(t)&&!ys(t)&&!(t instanceof gr)){if(t instanceof yr)return t;if(le.call(t,"__wrapped__"))return fo(t)}return new yr(t)}var pr=function(){function t(){}return function(e){if(!Ds(e))return{};if(je)return je(e);t.prototype=e;var n=new t;return t.prototype=r,n}}();function mr(){}function yr(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=r}function gr(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=H,this.__views__=[]}function vr(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Mr(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function br(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function kr(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new br;++e<n;)this.add(t[e])}function Lr(t){var e=this.__data__=new Mr(t);this.size=e.size}function wr(t,e){var n=ys(t),r=!n&&ms(t),i=!n&&!r&&bs(t),a=!n&&!r&&!i&&Ps(t),o=n||r||i||a,s=o?_n(t.length,re):[],u=s.length;for(var c in t)!e&&!le.call(t,c)||o&&("length"==c||i&&("offset"==c||"parent"==c)||a&&("buffer"==c||"byteLength"==c||"byteOffset"==c)||Va(c,u))||s.push(c);return s}function xr(t){var e=t.length;return e?t[ki(0,e-1)]:r}function Tr(t,e){return so(ra(t),Hr(e,0,t.length))}function Dr(t){return so(ra(t))}function Yr(t,e,n){(n===r||hs(t[e],n))&&(n!==r||e in t)||jr(t,e,n)}function Sr(t,e,n){var i=t[e];le.call(t,e)&&hs(i,n)&&(n!==r||e in t)||jr(t,e,n)}function Er(t,e){for(var n=t.length;n--;)if(hs(t[n][0],e))return n;return-1}function Ar(t,e,n,r){return Rr(t,function(t,i,a){e(r,t,n(t),a)}),r}function Cr(t,e){return t&&ia(e,iu(e),t)}function jr(t,e,n){"__proto__"==e&&Hn?Hn(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function Or(t,e){for(var n=-1,i=e.length,a=Xt(i),o=null==t;++n<i;)a[n]=o?r:Qs(t,e[n]);return a}function Hr(t,e,n){return t==t&&(n!==r&&(t=t<=n?t:n),e!==r&&(t=t>=e?t:e)),t}function Pr(t,e,n,i,a,o){var s,u=e&l,c=e&d,h=e&f;if(n&&(s=a?n(t,i,a,o):n(t)),s!==r)return s;if(!Ds(t))return t;var _=ys(t);if(_){if(s=function(t){var e=t.length,n=new t.constructor(e);return e&&"string"==typeof t[0]&&le.call(t,"index")&&(n.index=t.index,n.input=t.input),n}(t),!u)return ra(t,s)}else{var p=za(t),m=p==V||p==$;if(bs(t))return Zi(t,u);if(p==Z||p==B||m&&!a){if(s=c||m?{}:qa(t),!u)return c?function(t,e){return ia(t,Ia(t),e)}(t,function(t,e){return t&&ia(e,au(e),t)}(s,t)):function(t,e){return ia(t,Ra(t),e)}(t,Cr(s,t))}else{if(!xe[p])return a?t:{};s=function(t,e,n){var r,i,a,o=t.constructor;switch(e){case ot:return Ki(t);case z:case W:return new o(+t);case st:return function(t,e){var n=e?Ki(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}(t,n);case ut:case ct:case lt:case dt:case ft:case ht:case _t:case pt:case mt:return Qi(t,n);case G:return new o;case J:case et:return new o(t);case Q:return(a=new(i=t).constructor(i.source,It.exec(i))).lastIndex=i.lastIndex,a;case tt:return new o;case nt:return r=t,fr?ee(fr.call(r)):{}}}(t,p,u)}}o||(o=new Lr);var y=o.get(t);if(y)return y;if(o.set(t,s),js(t))return t.forEach(function(r){s.add(Pr(r,e,n,r,t,o))}),s;if(Ss(t))return t.forEach(function(r,i){s.set(i,Pr(r,e,n,i,t,o))}),s;var g=_?r:(h?c?Ca:Aa:c?au:iu)(t);return Ue(g||t,function(r,i){g&&(r=t[i=r]),Sr(s,i,Pr(r,e,n,i,t,o))}),s}function Fr(t,e,n){var i=n.length;if(null==t)return!i;for(t=ee(t);i--;){var a=n[i],o=e[a],s=t[a];if(s===r&&!(a in t)||!o(s))return!1}return!0}function Nr(t,e,n){if("function"!=typeof t)throw new ie(o);return ro(function(){t.apply(r,n)},e)}function Br(t,e,n,r){var a=-1,o=Je,s=!0,u=t.length,c=[],l=e.length;if(!u)return c;n&&(e=Ze(e,pn(n))),r?(o=Xe,s=!1):e.length>=i&&(o=yn,s=!1,e=new kr(e));t:for(;++a<u;){var d=t[a],f=null==n?d:n(d);if(d=r||0!==d?d:0,s&&f==f){for(var h=l;h--;)if(e[h]===f)continue t;c.push(d)}else o(e,f,r)||c.push(d)}return c}_r.templateSettings={escape:wt,evaluate:xt,interpolate:Tt,variable:"",imports:{_:_r}},_r.prototype=mr.prototype,_r.prototype.constructor=_r,yr.prototype=pr(mr.prototype),yr.prototype.constructor=yr,gr.prototype=pr(mr.prototype),gr.prototype.constructor=gr,vr.prototype.clear=function(){this.__data__=rr?rr(null):{},this.size=0},vr.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},vr.prototype.get=function(t){var e=this.__data__;if(rr){var n=e[t];return n===s?r:n}return le.call(e,t)?e[t]:r},vr.prototype.has=function(t){var e=this.__data__;return rr?e[t]!==r:le.call(e,t)},vr.prototype.set=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=rr&&e===r?s:e,this},Mr.prototype.clear=function(){this.__data__=[],this.size=0},Mr.prototype.delete=function(t){var e=this.__data__,n=Er(e,t);return!(n<0||(n==e.length-1?e.pop():Pe.call(e,n,1),--this.size,0))},Mr.prototype.get=function(t){var e=this.__data__,n=Er(e,t);return n<0?r:e[n][1]},Mr.prototype.has=function(t){return Er(this.__data__,t)>-1},Mr.prototype.set=function(t,e){var n=this.__data__,r=Er(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this},br.prototype.clear=function(){this.size=0,this.__data__={hash:new vr,map:new(Qn||Mr),string:new vr}},br.prototype.delete=function(t){var e=Fa(this,t).delete(t);return this.size-=e?1:0,e},br.prototype.get=function(t){return Fa(this,t).get(t)},br.prototype.has=function(t){return Fa(this,t).has(t)},br.prototype.set=function(t,e){var n=Fa(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this},kr.prototype.add=kr.prototype.push=function(t){return this.__data__.set(t,s),this},kr.prototype.has=function(t){return this.__data__.has(t)},Lr.prototype.clear=function(){this.__data__=new Mr,this.size=0},Lr.prototype.delete=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n},Lr.prototype.get=function(t){return this.__data__.get(t)},Lr.prototype.has=function(t){return this.__data__.has(t)},Lr.prototype.set=function(t,e){var n=this.__data__;if(n instanceof Mr){var r=n.__data__;if(!Qn||r.length<i-1)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new br(r)}return n.set(t,e),this.size=n.size,this};var Rr=sa(Gr),Ir=sa(Jr,!0);function zr(t,e){var n=!0;return Rr(t,function(t,r,i){return n=!!e(t,r,i)}),n}function Wr(t,e,n){for(var i=-1,a=t.length;++i<a;){var o=t[i],s=e(o);if(null!=s&&(u===r?s==s&&!Hs(s):n(s,u)))var u=s,c=o}return c}function qr(t,e){var n=[];return Rr(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function Ur(t,e,n,r,i){var a=-1,o=t.length;for(n||(n=Ua),i||(i=[]);++a<o;){var s=t[a];e>0&&n(s)?e>1?Ur(s,e-1,n,r,i):Ke(i,s):r||(i[i.length]=s)}return i}var Vr=ua(),$r=ua(!0);function Gr(t,e){return t&&Vr(t,e,iu)}function Jr(t,e){return t&&$r(t,e,iu)}function Xr(t,e){return Ge(e,function(e){return ws(t[e])})}function Zr(t,e){for(var n=0,i=(e=$i(e,t)).length;null!=t&&n<i;)t=t[co(e[n++])];return n&&n==i?t:r}function Kr(t,e,n){var r=e(t);return ys(t)?r:Ke(r,n(t))}function Qr(t){return null==t?t===r?rt:X:On&&On in ee(t)?function(t){var e=le.call(t,On),n=t[On];try{t[On]=r;var i=!0}catch(t){}var a=he.call(t);return i&&(e?t[On]=n:delete t[On]),a}(t):function(t){return he.call(t)}(t)}function ti(t,e){return t>e}function ei(t,e){return null!=t&&le.call(t,e)}function ni(t,e){return null!=t&&e in ee(t)}function ri(t,e,n){for(var i=n?Xe:Je,a=t[0].length,o=t.length,s=o,u=Xt(o),c=1/0,l=[];s--;){var d=t[s];s&&e&&(d=Ze(d,pn(e))),c=$n(d.length,c),u[s]=!n&&(e||a>=120&&d.length>=120)?new kr(s&&d):r}d=t[0];var f=-1,h=u[0];t:for(;++f<a&&l.length<c;){var _=d[f],p=e?e(_):_;if(_=n||0!==_?_:0,!(h?yn(h,p):i(l,p,n))){for(s=o;--s;){var m=u[s];if(!(m?yn(m,p):i(t[s],p,n)))continue t}h&&h.push(p),l.push(_)}}return l}function ii(t,e,n){var i=null==(t=eo(t,e=$i(e,t)))?t:t[co(Lo(e))];return null==i?r:We(i,t,n)}function ai(t){return Ys(t)&&Qr(t)==B}function oi(t,e,n,i,a){return t===e||(null==t||null==e||!Ys(t)&&!Ys(e)?t!=t&&e!=e:function(t,e,n,i,a,o){var s=ys(t),u=ys(e),c=s?R:za(t),l=u?R:za(e),d=(c=c==B?Z:c)==Z,f=(l=l==B?Z:l)==Z,p=c==l;if(p&&bs(t)){if(!bs(e))return!1;s=!0,d=!1}if(p&&!d)return o||(o=new Lr),s||Ps(t)?Sa(t,e,n,i,a,o):function(t,e,n,r,i,a,o){switch(n){case st:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case ot:return!(t.byteLength!=e.byteLength||!a(new Se(t),new Se(e)));case z:case W:case J:return hs(+t,+e);case U:return t.name==e.name&&t.message==e.message;case Q:case et:return t==e+"";case G:var s=wn;case tt:var u=r&h;if(s||(s=Yn),t.size!=e.size&&!u)return!1;var c=o.get(t);if(c)return c==e;r|=_,o.set(t,e);var l=Sa(s(t),s(e),r,i,a,o);return o.delete(t),l;case nt:if(fr)return fr.call(t)==fr.call(e)}return!1}(t,e,c,n,i,a,o);if(!(n&h)){var m=d&&le.call(t,"__wrapped__"),y=f&&le.call(e,"__wrapped__");if(m||y){var g=m?t.value():t,v=y?e.value():e;return o||(o=new Lr),a(g,v,n,i,o)}}return!!p&&(o||(o=new Lr),function(t,e,n,i,a,o){var s=n&h,u=Aa(t),c=u.length,l=Aa(e).length;if(c!=l&&!s)return!1;for(var d=c;d--;){var f=u[d];if(!(s?f in e:le.call(e,f)))return!1}var _=o.get(t);if(_&&o.get(e))return _==e;var p=!0;o.set(t,e),o.set(e,t);for(var m=s;++d<c;){f=u[d];var y=t[f],g=e[f];if(i)var v=s?i(g,y,f,e,t,o):i(y,g,f,t,e,o);if(!(v===r?y===g||a(y,g,n,i,o):v)){p=!1;break}m||(m="constructor"==f)}if(p&&!m){var M=t.constructor,b=e.constructor;M!=b&&"constructor"in t&&"constructor"in e&&!("function"==typeof M&&M instanceof M&&"function"==typeof b&&b instanceof b)&&(p=!1)}return o.delete(t),o.delete(e),p}(t,e,n,i,a,o))}(t,e,n,i,oi,a))}function si(t,e,n,i){var a=n.length,o=a,s=!i;if(null==t)return!o;for(t=ee(t);a--;){var u=n[a];if(s&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++a<o;){var c=(u=n[a])[0],l=t[c],d=u[1];if(s&&u[2]){if(l===r&&!(c in t))return!1}else{var f=new Lr;if(i)var p=i(l,d,c,t,e,f);if(!(p===r?oi(d,l,h|_,i,f):p))return!1}}return!0}function ui(t){return!(!Ds(t)||fe&&fe in t)&&(ws(t)?ge:qt).test(lo(t))}function ci(t){return"function"==typeof t?t:null==t?Eu:"object"==typeof t?ys(t)?pi(t[0],t[1]):_i(t):Bu(t)}function li(t){if(!Za(t))return Un(t);var e=[];for(var n in ee(t))le.call(t,n)&&"constructor"!=n&&e.push(n);return e}function di(t){if(!Ds(t))return function(t){var e=[];if(null!=t)for(var n in ee(t))e.push(n);return e}(t);var e=Za(t),n=[];for(var r in t)("constructor"!=r||!e&&le.call(t,r))&&n.push(r);return n}function fi(t,e){return t<e}function hi(t,e){var n=-1,r=vs(t)?Xt(t.length):[];return Rr(t,function(t,i,a){r[++n]=e(t,i,a)}),r}function _i(t){var e=Na(t);return 1==e.length&&e[0][2]?Qa(e[0][0],e[0][1]):function(n){return n===t||si(n,t,e)}}function pi(t,e){return Ga(t)&&Ka(e)?Qa(co(t),e):function(n){var i=Qs(n,t);return i===r&&i===e?tu(n,t):oi(e,i,h|_)}}function mi(t,e,n,i,a){t!==e&&Vr(e,function(o,s){if(Ds(o))a||(a=new Lr),function(t,e,n,i,a,o,s){var u=Dn(t,n),c=Dn(e,n),l=s.get(c);if(l)Yr(t,n,l);else{var d=o?o(u,c,n+"",t,e,s):r,f=d===r;if(f){var h=ys(c),_=!h&&bs(c),p=!h&&!_&&Ps(c);d=c,h||_||p?ys(u)?d=u:Ms(u)?d=ra(u):_?(f=!1,d=Zi(c,!0)):p?(f=!1,d=Qi(c,!0)):d=[]:As(c)||ms(c)?(d=u,ms(u)?d=qs(u):(!Ds(u)||i&&ws(u))&&(d=qa(c))):f=!1}f&&(s.set(c,d),a(d,c,i,o,s),s.delete(c)),Yr(t,n,d)}}(t,e,s,n,mi,i,a);else{var u=i?i(Dn(t,s),o,s+"",t,e,a):r;u===r&&(u=o),Yr(t,s,u)}},au)}function yi(t,e){var n=t.length;if(n)return Va(e+=e<0?n:0,n)?t[e]:r}function gi(t,e,n){var r=-1;return e=Ze(e.length?e:[Eu],pn(Pa())),function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}(hi(t,function(t,n,i){return{criteria:Ze(e,function(e){return e(t)}),index:++r,value:t}}),function(t,e){return function(t,e,n){for(var r=-1,i=t.criteria,a=e.criteria,o=i.length,s=n.length;++r<o;){var u=ta(i[r],a[r]);if(u){if(r>=s)return u;var c=n[r];return u*("desc"==c?-1:1)}}return t.index-e.index}(t,e,n)})}function vi(t,e,n){for(var r=-1,i=e.length,a={};++r<i;){var o=e[r],s=Zr(t,o);n(s,o)&&Di(a,$i(o,t),s)}return a}function Mi(t,e,n,r){var i=r?sn:on,a=-1,o=e.length,s=t;for(t===e&&(e=ra(e)),n&&(s=Ze(t,pn(n)));++a<o;)for(var u=0,c=e[a],l=n?n(c):c;(u=i(s,l,u,r))>-1;)s!==t&&Pe.call(s,u,1),Pe.call(t,u,1);return t}function bi(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==a){var a=i;Va(i)?Pe.call(t,i,1):Bi(t,i)}}return t}function ki(t,e){return t+Rn(Xn()*(e-t+1))}function Li(t,e){var n="";if(!t||e<1||e>C)return n;do{e%2&&(n+=t),(e=Rn(e/2))&&(t+=t)}while(e);return n}function wi(t,e){return io(to(t,e,Eu),t+"")}function xi(t){return xr(hu(t))}function Ti(t,e){var n=hu(t);return so(n,Hr(e,0,n.length))}function Di(t,e,n,i){if(!Ds(t))return t;for(var a=-1,o=(e=$i(e,t)).length,s=o-1,u=t;null!=u&&++a<o;){var c=co(e[a]),l=n;if(a!=s){var d=u[c];(l=i?i(d,c,u):r)===r&&(l=Ds(d)?d:Va(e[a+1])?[]:{})}Sr(u,c,l),u=u[c]}return t}var Yi=ir?function(t,e){return ir.set(t,e),t}:Eu,Si=Hn?function(t,e){return Hn(t,"toString",{configurable:!0,enumerable:!1,value:Du(e),writable:!0})}:Eu;function Ei(t){return so(hu(t))}function Ai(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var a=Xt(i);++r<i;)a[r]=t[r+e];return a}function Ci(t,e){var n;return Rr(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function ji(t,e,n){var r=0,i=null==t?r:t.length;if("number"==typeof e&&e==e&&i<=F){for(;r<i;){var a=r+i>>>1,o=t[a];null!==o&&!Hs(o)&&(n?o<=e:o<e)?r=a+1:i=a}return i}return Oi(t,e,Eu,n)}function Oi(t,e,n,i){e=n(e);for(var a=0,o=null==t?0:t.length,s=e!=e,u=null===e,c=Hs(e),l=e===r;a<o;){var d=Rn((a+o)/2),f=n(t[d]),h=f!==r,_=null===f,p=f==f,m=Hs(f);if(s)var y=i||p;else y=l?p&&(i||h):u?p&&h&&(i||!_):c?p&&h&&!_&&(i||!m):!_&&!m&&(i?f<=e:f<e);y?a=d+1:o=d}return $n(o,P)}function Hi(t,e){for(var n=-1,r=t.length,i=0,a=[];++n<r;){var o=t[n],s=e?e(o):o;if(!n||!hs(s,u)){var u=s;a[i++]=0===o?0:o}}return a}function Pi(t){return"number"==typeof t?t:Hs(t)?O:+t}function Fi(t){if("string"==typeof t)return t;if(ys(t))return Ze(t,Fi)+"";if(Hs(t))return hr?hr.call(t):"";var e=t+"";return"0"==e&&1/t==-A?"-0":e}function Ni(t,e,n){var r=-1,a=Je,o=t.length,s=!0,u=[],c=u;if(n)s=!1,a=Xe;else if(o>=i){var l=e?null:La(t);if(l)return Yn(l);s=!1,a=yn,c=new kr}else c=e?[]:u;t:for(;++r<o;){var d=t[r],f=e?e(d):d;if(d=n||0!==d?d:0,s&&f==f){for(var h=c.length;h--;)if(c[h]===f)continue t;e&&c.push(f),u.push(d)}else a(c,f,n)||(c!==u&&c.push(f),u.push(d))}return u}function Bi(t,e){return null==(t=eo(t,e=$i(e,t)))||delete t[co(Lo(e))]}function Ri(t,e,n,r){return Di(t,e,n(Zr(t,e)),r)}function Ii(t,e,n,r){for(var i=t.length,a=r?i:-1;(r?a--:++a<i)&&e(t[a],a,t););return n?Ai(t,r?0:a,r?a+1:i):Ai(t,r?a+1:0,r?i:a)}function zi(t,e){var n=t;return n instanceof gr&&(n=n.value()),Qe(e,function(t,e){return e.func.apply(e.thisArg,Ke([t],e.args))},n)}function Wi(t,e,n){var r=t.length;if(r<2)return r?Ni(t[0]):[];for(var i=-1,a=Xt(r);++i<r;)for(var o=t[i],s=-1;++s<r;)s!=i&&(a[i]=Br(a[i]||o,t[s],e,n));return Ni(Ur(a,1),e,n)}function qi(t,e,n){for(var i=-1,a=t.length,o=e.length,s={};++i<a;){var u=i<o?e[i]:r;n(s,t[i],u)}return s}function Ui(t){return Ms(t)?t:[]}function Vi(t){return"function"==typeof t?t:Eu}function $i(t,e){return ys(t)?t:Ga(t,e)?[t]:uo(Us(t))}var Gi=wi;function Ji(t,e,n){var i=t.length;return n=n===r?i:n,!e&&n>=i?t:Ai(t,e,n)}var Xi=Pn||function(t){return Ae.clearTimeout(t)};function Zi(t,e){if(e)return t.slice();var n=t.length,r=Ee?Ee(n):new t.constructor(n);return t.copy(r),r}function Ki(t){var e=new t.constructor(t.byteLength);return new Se(e).set(new Se(t)),e}function Qi(t,e){var n=e?Ki(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function ta(t,e){if(t!==e){var n=t!==r,i=null===t,a=t==t,o=Hs(t),s=e!==r,u=null===e,c=e==e,l=Hs(e);if(!u&&!l&&!o&&t>e||o&&s&&c&&!u&&!l||i&&s&&c||!n&&c||!a)return 1;if(!i&&!o&&!l&&t<e||l&&n&&a&&!i&&!o||u&&n&&a||!s&&a||!c)return-1}return 0}function ea(t,e,n,r){for(var i=-1,a=t.length,o=n.length,s=-1,u=e.length,c=Vn(a-o,0),l=Xt(u+c),d=!r;++s<u;)l[s]=e[s];for(;++i<o;)(d||i<a)&&(l[n[i]]=t[i]);for(;c--;)l[s++]=t[i++];return l}function na(t,e,n,r){for(var i=-1,a=t.length,o=-1,s=n.length,u=-1,c=e.length,l=Vn(a-s,0),d=Xt(l+c),f=!r;++i<l;)d[i]=t[i];for(var h=i;++u<c;)d[h+u]=e[u];for(;++o<s;)(f||i<a)&&(d[h+n[o]]=t[i++]);return d}function ra(t,e){var n=-1,r=t.length;for(e||(e=Xt(r));++n<r;)e[n]=t[n];return e}function ia(t,e,n,i){var a=!n;n||(n={});for(var o=-1,s=e.length;++o<s;){var u=e[o],c=i?i(n[u],t[u],u,n,t):r;c===r&&(c=t[u]),a?jr(n,u,c):Sr(n,u,c)}return n}function aa(t,e){return function(n,r){var i=ys(n)?qe:Ar,a=e?e():{};return i(n,t,Pa(r,2),a)}}function oa(t){return wi(function(e,n){var i=-1,a=n.length,o=a>1?n[a-1]:r,s=a>2?n[2]:r;for(o=t.length>3&&"function"==typeof o?(a--,o):r,s&&$a(n[0],n[1],s)&&(o=a<3?r:o,a=1),e=ee(e);++i<a;){var u=n[i];u&&t(e,u,i,o)}return e})}function sa(t,e){return function(n,r){if(null==n)return n;if(!vs(n))return t(n,r);for(var i=n.length,a=e?i:-1,o=ee(n);(e?a--:++a<i)&&!1!==r(o[a],a,o););return n}}function ua(t){return function(e,n,r){for(var i=-1,a=ee(e),o=r(e),s=o.length;s--;){var u=o[t?s:++i];if(!1===n(a[u],u,a))break}return e}}function ca(t){return function(e){var n=Ln(e=Us(e))?An(e):r,i=n?n[0]:e.charAt(0),a=n?Ji(n,1).join(""):e.slice(1);return i[t]()+a}}function la(t){return function(e){return Qe(wu(mu(e).replace(me,"")),t,"")}}function da(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=pr(t.prototype),r=t.apply(n,e);return Ds(r)?r:n}}function fa(t){return function(e,n,i){var a=ee(e);if(!vs(e)){var o=Pa(n,3);e=iu(e),n=function(t){return o(a[t],t,a)}}var s=t(e,n,i);return s>-1?a[o?e[s]:s]:r}}function ha(t){return Ea(function(e){var n=e.length,i=n,a=yr.prototype.thru;for(t&&e.reverse();i--;){var s=e[i];if("function"!=typeof s)throw new ie(o);if(a&&!u&&"wrapper"==Oa(s))var u=new yr([],!0)}for(i=u?i:n;++i<n;){var c=Oa(s=e[i]),l="wrapper"==c?ja(s):r;u=l&&Ja(l[0])&&l[1]==(k|g|M|L)&&!l[4].length&&1==l[9]?u[Oa(l[0])].apply(u,l[3]):1==s.length&&Ja(s)?u[c]():u.thru(s)}return function(){var t=arguments,r=t[0];if(u&&1==t.length&&ys(r))return u.plant(r).value();for(var i=0,a=n?e[i].apply(this,t):r;++i<n;)a=e[i].call(this,a);return a}})}function _a(t,e,n,i,a,o,s,u,c,l){var d=e&k,f=e&p,h=e&m,_=e&(g|v),y=e&w,M=h?r:da(t);return function p(){for(var m=arguments.length,g=Xt(m),v=m;v--;)g[v]=arguments[v];if(_)var b=Ha(p),k=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}(g,b);if(i&&(g=ea(g,i,a,_)),o&&(g=na(g,o,s,_)),m-=k,_&&m<l){var L=Tn(g,b);return ba(t,e,_a,p.placeholder,n,g,L,u,c,l-m)}var w=f?n:this,x=h?w[t]:t;return m=g.length,u?g=function(t,e){for(var n=t.length,i=$n(e.length,n),a=ra(t);i--;){var o=e[i];t[i]=Va(o,n)?a[o]:r}return t}(g,u):y&&m>1&&g.reverse(),d&&c<m&&(g.length=c),this&&this!==Ae&&this instanceof p&&(x=M||da(x)),x.apply(w,g)}}function pa(t,e){return function(n,r){return function(t,e,n,r){return Gr(t,function(t,i,a){e(r,n(t),i,a)}),r}(n,t,e(r),{})}}function ma(t,e){return function(n,i){var a;if(n===r&&i===r)return e;if(n!==r&&(a=n),i!==r){if(a===r)return i;"string"==typeof n||"string"==typeof i?(n=Fi(n),i=Fi(i)):(n=Pi(n),i=Pi(i)),a=t(n,i)}return a}}function ya(t){return Ea(function(e){return e=Ze(e,pn(Pa())),wi(function(n){var r=this;return t(e,function(t){return We(t,r,n)})})})}function ga(t,e){var n=(e=e===r?" ":Fi(e)).length;if(n<2)return n?Li(e,t):e;var i=Li(e,Bn(t/En(e)));return Ln(e)?Ji(An(i),0,t).join(""):i.slice(0,t)}function va(t){return function(e,n,i){return i&&"number"!=typeof i&&$a(e,n,i)&&(n=i=r),e=Rs(e),n===r?(n=e,e=0):n=Rs(n),function(t,e,n,r){for(var i=-1,a=Vn(Bn((e-t)/(n||1)),0),o=Xt(a);a--;)o[r?a:++i]=t,t+=n;return o}(e,n,i=i===r?e<n?1:-1:Rs(i),t)}}function Ma(t){return function(e,n){return"string"==typeof e&&"string"==typeof n||(e=Ws(e),n=Ws(n)),t(e,n)}}function ba(t,e,n,i,a,o,s,u,c,l){var d=e&g;e|=d?M:b,(e&=~(d?b:M))&y||(e&=~(p|m));var f=[t,e,a,d?o:r,d?s:r,d?r:o,d?r:s,u,c,l],h=n.apply(r,f);return Ja(t)&&no(h,f),h.placeholder=i,ao(h,t,e)}function ka(t){var e=te[t];return function(t,n){if(t=Ws(t),n=null==n?0:$n(Is(n),292)){var r=(Us(t)+"e").split("e");return+((r=(Us(e(r[0]+"e"+(+r[1]+n)))+"e").split("e"))[0]+"e"+(+r[1]-n))}return e(t)}}var La=er&&1/Yn(new er([,-0]))[1]==A?function(t){return new er(t)}:Hu;function wa(t){return function(e){var n=za(e);return n==G?wn(e):n==tt?Sn(e):function(t,e){return Ze(e,function(e){return[e,t[e]]})}(e,t(e))}}function xa(t,e,n,i,a,s,u,l){var d=e&m;if(!d&&"function"!=typeof t)throw new ie(o);var f=i?i.length:0;if(f||(e&=~(M|b),i=a=r),u=u===r?u:Vn(Is(u),0),l=l===r?l:Is(l),f-=a?a.length:0,e&b){var h=i,_=a;i=a=r}var w=d?r:ja(t),x=[t,e,n,i,a,h,_,s,u,l];if(w&&function(t,e){var n=t[1],r=e[1],i=n|r,a=i<(p|m|k),o=r==k&&n==g||r==k&&n==L&&t[7].length<=e[8]||r==(k|L)&&e[7].length<=e[8]&&n==g;if(!a&&!o)return t;r&p&&(t[2]=e[2],i|=n&p?0:y);var s=e[3];if(s){var u=t[3];t[3]=u?ea(u,s,e[4]):s,t[4]=u?Tn(t[3],c):e[4]}(s=e[5])&&(u=t[5],t[5]=u?na(u,s,e[6]):s,t[6]=u?Tn(t[5],c):e[6]),(s=e[7])&&(t[7]=s),r&k&&(t[8]=null==t[8]?e[8]:$n(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i}(x,w),t=x[0],e=x[1],n=x[2],i=x[3],a=x[4],!(l=x[9]=x[9]===r?d?0:t.length:Vn(x[9]-f,0))&&e&(g|v)&&(e&=~(g|v)),e&&e!=p)T=e==g||e==v?function(t,e,n){var i=da(t);return function a(){for(var o=arguments.length,s=Xt(o),u=o,c=Ha(a);u--;)s[u]=arguments[u];var l=o<3&&s[0]!==c&&s[o-1]!==c?[]:Tn(s,c);return(o-=l.length)<n?ba(t,e,_a,a.placeholder,r,s,l,r,r,n-o):We(this&&this!==Ae&&this instanceof a?i:t,this,s)}}(t,e,l):e!=M&&e!=(p|M)||a.length?_a.apply(r,x):function(t,e,n,r){var i=e&p,a=da(t);return function e(){for(var o=-1,s=arguments.length,u=-1,c=r.length,l=Xt(c+s),d=this&&this!==Ae&&this instanceof e?a:t;++u<c;)l[u]=r[u];for(;s--;)l[u++]=arguments[++o];return We(d,i?n:this,l)}}(t,e,n,i);else var T=function(t,e,n){var r=e&p,i=da(t);return function e(){return(this&&this!==Ae&&this instanceof e?i:t).apply(r?n:this,arguments)}}(t,e,n);return ao((w?Yi:no)(T,x),t,e)}function Ta(t,e,n,i){return t===r||hs(t,se[n])&&!le.call(i,n)?e:t}function Da(t,e,n,i,a,o){return Ds(t)&&Ds(e)&&(o.set(e,t),mi(t,e,r,Da,o),o.delete(e)),t}function Ya(t){return As(t)?r:t}function Sa(t,e,n,i,a,o){var s=n&h,u=t.length,c=e.length;if(u!=c&&!(s&&c>u))return!1;var l=o.get(t);if(l&&o.get(e))return l==e;var d=-1,f=!0,p=n&_?new kr:r;for(o.set(t,e),o.set(e,t);++d<u;){var m=t[d],y=e[d];if(i)var g=s?i(y,m,d,e,t,o):i(m,y,d,t,e,o);if(g!==r){if(g)continue;f=!1;break}if(p){if(!en(e,function(t,e){if(!yn(p,e)&&(m===t||a(m,t,n,i,o)))return p.push(e)})){f=!1;break}}else if(m!==y&&!a(m,y,n,i,o)){f=!1;break}}return o.delete(t),o.delete(e),f}function Ea(t){return io(to(t,r,go),t+"")}function Aa(t){return Kr(t,iu,Ra)}function Ca(t){return Kr(t,au,Ia)}var ja=ir?function(t){return ir.get(t)}:Hu;function Oa(t){for(var e=t.name+"",n=ar[e],r=le.call(ar,e)?n.length:0;r--;){var i=n[r],a=i.func;if(null==a||a==t)return i.name}return e}function Ha(t){return(le.call(_r,"placeholder")?_r:t).placeholder}function Pa(){var t=_r.iteratee||Au;return t=t===Au?ci:t,arguments.length?t(arguments[0],arguments[1]):t}function Fa(t,e){var n,r,i=t.__data__;return("string"==(r=typeof(n=e))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?i["string"==typeof e?"string":"hash"]:i.map}function Na(t){for(var e=iu(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,Ka(i)]}return e}function Ba(t,e){var n=function(t,e){return null==t?r:t[e]}(t,e);return ui(n)?n:r}var Ra=In?function(t){return null==t?[]:(t=ee(t),Ge(In(t),function(e){return He.call(t,e)}))}:zu,Ia=In?function(t){for(var e=[];t;)Ke(e,Ra(t)),t=Ce(t);return e}:zu,za=Qr;function Wa(t,e,n){for(var r=-1,i=(e=$i(e,t)).length,a=!1;++r<i;){var o=co(e[r]);if(!(a=null!=t&&n(t,o)))break;t=t[o]}return a||++r!=i?a:!!(i=null==t?0:t.length)&&Ts(i)&&Va(o,i)&&(ys(t)||ms(t))}function qa(t){return"function"!=typeof t.constructor||Za(t)?{}:pr(Ce(t))}function Ua(t){return ys(t)||ms(t)||!!(nn&&t&&t[nn])}function Va(t,e){var n=typeof t;return!!(e=null==e?C:e)&&("number"==n||"symbol"!=n&&Vt.test(t))&&t>-1&&t%1==0&&t<e}function $a(t,e,n){if(!Ds(n))return!1;var r=typeof e;return!!("number"==r?vs(n)&&Va(e,n.length):"string"==r&&e in n)&&hs(n[e],t)}function Ga(t,e){if(ys(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!Hs(t))||Yt.test(t)||!Dt.test(t)||null!=e&&t in ee(e)}function Ja(t){var e=Oa(t),n=_r[e];if("function"!=typeof n||!(e in gr.prototype))return!1;if(t===n)return!0;var r=ja(n);return!!r&&t===r[0]}(Kn&&za(new Kn(new ArrayBuffer(1)))!=st||Qn&&za(new Qn)!=G||tr&&"[object Promise]"!=za(tr.resolve())||er&&za(new er)!=tt||nr&&za(new nr)!=it)&&(za=function(t){var e=Qr(t),n=e==Z?t.constructor:r,i=n?lo(n):"";if(i)switch(i){case or:return st;case sr:return G;case ur:return"[object Promise]";case cr:return tt;case lr:return it}return e});var Xa=ue?ws:Wu;function Za(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||se)}function Ka(t){return t==t&&!Ds(t)}function Qa(t,e){return function(n){return null!=n&&n[t]===e&&(e!==r||t in ee(n))}}function to(t,e,n){return e=Vn(e===r?t.length-1:e,0),function(){for(var r=arguments,i=-1,a=Vn(r.length-e,0),o=Xt(a);++i<a;)o[i]=r[e+i];i=-1;for(var s=Xt(e+1);++i<e;)s[i]=r[i];return s[e]=n(o),We(t,this,s)}}function eo(t,e){return e.length<2?t:Zr(t,Ai(e,0,-1))}var no=oo(Yi),ro=Nn||function(t,e){return Ae.setTimeout(t,e)},io=oo(Si);function ao(t,e,n){var r=e+"";return io(t,function(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?"& ":"")+e[r],e=e.join(n>2?", ":" "),t.replace(Ht,"{\n/* [wrapped with "+e+"] */\n")}(r,function(t,e){return Ue(N,function(n){var r="_."+n[0];e&n[1]&&!Je(t,r)&&t.push(r)}),t.sort()}(function(t){var e=t.match(Pt);return e?e[1].split(Ft):[]}(r),n)))}function oo(t){var e=0,n=0;return function(){var i=Gn(),a=Y-(i-n);if(n=i,a>0){if(++e>=D)return arguments[0]}else e=0;return t.apply(r,arguments)}}function so(t,e){var n=-1,i=t.length,a=i-1;for(e=e===r?i:e;++n<e;){var o=ki(n,a),s=t[o];t[o]=t[n],t[n]=s}return t.length=e,t}var uo=function(t){var e=ss(t,function(t){return n.size===u&&n.clear(),t}),n=e.cache;return e}(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(St,function(t,n,r,i){e.push(r?i.replace(Bt,"$1"):n||t)}),e});function co(t){if("string"==typeof t||Hs(t))return t;var e=t+"";return"0"==e&&1/t==-A?"-0":e}function lo(t){if(null!=t){try{return ce.call(t)}catch(t){}try{return t+""}catch(t){}}return""}function fo(t){if(t instanceof gr)return t.clone();var e=new yr(t.__wrapped__,t.__chain__);return e.__actions__=ra(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}var ho=wi(function(t,e){return Ms(t)?Br(t,Ur(e,1,Ms,!0)):[]}),_o=wi(function(t,e){var n=Lo(e);return Ms(n)&&(n=r),Ms(t)?Br(t,Ur(e,1,Ms,!0),Pa(n,2)):[]}),po=wi(function(t,e){var n=Lo(e);return Ms(n)&&(n=r),Ms(t)?Br(t,Ur(e,1,Ms,!0),r,n):[]});function mo(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:Is(n);return i<0&&(i=Vn(r+i,0)),an(t,Pa(e,3),i)}function yo(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var a=i-1;return n!==r&&(a=Is(n),a=n<0?Vn(i+a,0):$n(a,i-1)),an(t,Pa(e,3),a,!0)}function go(t){return null!=t&&t.length?Ur(t,1):[]}function vo(t){return t&&t.length?t[0]:r}var Mo=wi(function(t){var e=Ze(t,Ui);return e.length&&e[0]===t[0]?ri(e):[]}),bo=wi(function(t){var e=Lo(t),n=Ze(t,Ui);return e===Lo(n)?e=r:n.pop(),n.length&&n[0]===t[0]?ri(n,Pa(e,2)):[]}),ko=wi(function(t){var e=Lo(t),n=Ze(t,Ui);return(e="function"==typeof e?e:r)&&n.pop(),n.length&&n[0]===t[0]?ri(n,r,e):[]});function Lo(t){var e=null==t?0:t.length;return e?t[e-1]:r}var wo=wi(xo);function xo(t,e){return t&&t.length&&e&&e.length?Mi(t,e):t}var To=Ea(function(t,e){var n=null==t?0:t.length,r=Or(t,e);return bi(t,Ze(e,function(t){return Va(t,n)?+t:t}).sort(ta)),r});function Do(t){return null==t?t:Zn.call(t)}var Yo=wi(function(t){return Ni(Ur(t,1,Ms,!0))}),So=wi(function(t){var e=Lo(t);return Ms(e)&&(e=r),Ni(Ur(t,1,Ms,!0),Pa(e,2))}),Eo=wi(function(t){var e=Lo(t);return e="function"==typeof e?e:r,Ni(Ur(t,1,Ms,!0),r,e)});function Ao(t){if(!t||!t.length)return[];var e=0;return t=Ge(t,function(t){if(Ms(t))return e=Vn(t.length,e),!0}),_n(e,function(e){return Ze(t,ln(e))})}function Co(t,e){if(!t||!t.length)return[];var n=Ao(t);return null==e?n:Ze(n,function(t){return We(e,r,t)})}var jo=wi(function(t,e){return Ms(t)?Br(t,e):[]}),Oo=wi(function(t){return Wi(Ge(t,Ms))}),Ho=wi(function(t){var e=Lo(t);return Ms(e)&&(e=r),Wi(Ge(t,Ms),Pa(e,2))}),Po=wi(function(t){var e=Lo(t);return e="function"==typeof e?e:r,Wi(Ge(t,Ms),r,e)}),Fo=wi(Ao);var No=wi(function(t){var e=t.length,n=e>1?t[e-1]:r;return Co(t,n="function"==typeof n?(t.pop(),n):r)});function Bo(t){var e=_r(t);return e.__chain__=!0,e}function Ro(t,e){return e(t)}var Io=Ea(function(t){var e=t.length,n=e?t[0]:0,i=this.__wrapped__,a=function(e){return Or(e,t)};return!(e>1||this.__actions__.length)&&i instanceof gr&&Va(n)?((i=i.slice(n,+n+(e?1:0))).__actions__.push({func:Ro,args:[a],thisArg:r}),new yr(i,this.__chain__).thru(function(t){return e&&!t.length&&t.push(r),t})):this.thru(a)});var zo=aa(function(t,e,n){le.call(t,n)?++t[n]:jr(t,n,1)});var Wo=fa(mo),qo=fa(yo);function Uo(t,e){return(ys(t)?Ue:Rr)(t,Pa(e,3))}function Vo(t,e){return(ys(t)?Ve:Ir)(t,Pa(e,3))}var $o=aa(function(t,e,n){le.call(t,n)?t[n].push(e):jr(t,n,[e])});var Go=wi(function(t,e,n){var r=-1,i="function"==typeof e,a=vs(t)?Xt(t.length):[];return Rr(t,function(t){a[++r]=i?We(e,t,n):ii(t,e,n)}),a}),Jo=aa(function(t,e,n){jr(t,n,e)});function Xo(t,e){return(ys(t)?Ze:hi)(t,Pa(e,3))}var Zo=aa(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]});var Ko=wi(function(t,e){if(null==t)return[];var n=e.length;return n>1&&$a(t,e[0],e[1])?e=[]:n>2&&$a(e[0],e[1],e[2])&&(e=[e[0]]),gi(t,Ur(e,1),[])}),Qo=Fn||function(){return Ae.Date.now()};function ts(t,e,n){return e=n?r:e,e=t&&null==e?t.length:e,xa(t,k,r,r,r,r,e)}function es(t,e){var n;if("function"!=typeof e)throw new ie(o);return t=Is(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=r),n}}var ns=wi(function(t,e,n){var r=p;if(n.length){var i=Tn(n,Ha(ns));r|=M}return xa(t,r,e,n,i)}),rs=wi(function(t,e,n){var r=p|m;if(n.length){var i=Tn(n,Ha(rs));r|=M}return xa(e,r,t,n,i)});function is(t,e,n){var i,a,s,u,c,l,d=0,f=!1,h=!1,_=!0;if("function"!=typeof t)throw new ie(o);function p(e){var n=i,o=a;return i=a=r,d=e,u=t.apply(o,n)}function m(t){var n=t-l;return l===r||n>=e||n<0||h&&t-d>=s}function y(){var t=Qo();if(m(t))return g(t);c=ro(y,function(t){var n=e-(t-l);return h?$n(n,s-(t-d)):n}(t))}function g(t){return c=r,_&&i?p(t):(i=a=r,u)}function v(){var t=Qo(),n=m(t);if(i=arguments,a=this,l=t,n){if(c===r)return function(t){return d=t,c=ro(y,e),f?p(t):u}(l);if(h)return c=ro(y,e),p(l)}return c===r&&(c=ro(y,e)),u}return e=Ws(e)||0,Ds(n)&&(f=!!n.leading,s=(h="maxWait"in n)?Vn(Ws(n.maxWait)||0,e):s,_="trailing"in n?!!n.trailing:_),v.cancel=function(){c!==r&&Xi(c),d=0,i=l=a=c=r},v.flush=function(){return c===r?u:g(Qo())},v}var as=wi(function(t,e){return Nr(t,1,e)}),os=wi(function(t,e,n){return Nr(t,Ws(e)||0,n)});function ss(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new ie(o);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],a=n.cache;if(a.has(i))return a.get(i);var o=t.apply(this,r);return n.cache=a.set(i,o)||a,o};return n.cache=new(ss.Cache||br),n}function us(t){if("function"!=typeof t)throw new ie(o);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}ss.Cache=br;var cs=Gi(function(t,e){var n=(e=1==e.length&&ys(e[0])?Ze(e[0],pn(Pa())):Ze(Ur(e,1),pn(Pa()))).length;return wi(function(r){for(var i=-1,a=$n(r.length,n);++i<a;)r[i]=e[i].call(this,r[i]);return We(t,this,r)})}),ls=wi(function(t,e){var n=Tn(e,Ha(ls));return xa(t,M,r,e,n)}),ds=wi(function(t,e){var n=Tn(e,Ha(ds));return xa(t,b,r,e,n)}),fs=Ea(function(t,e){return xa(t,L,r,r,r,e)});function hs(t,e){return t===e||t!=t&&e!=e}var _s=Ma(ti),ps=Ma(function(t,e){return t>=e}),ms=ai(function(){return arguments}())?ai:function(t){return Ys(t)&&le.call(t,"callee")&&!He.call(t,"callee")},ys=Xt.isArray,gs=Fe?pn(Fe):function(t){return Ys(t)&&Qr(t)==ot};function vs(t){return null!=t&&Ts(t.length)&&!ws(t)}function Ms(t){return Ys(t)&&vs(t)}var bs=zn||Wu,ks=Ne?pn(Ne):function(t){return Ys(t)&&Qr(t)==W};function Ls(t){if(!Ys(t))return!1;var e=Qr(t);return e==U||e==q||"string"==typeof t.message&&"string"==typeof t.name&&!As(t)}function ws(t){if(!Ds(t))return!1;var e=Qr(t);return e==V||e==$||e==I||e==K}function xs(t){return"number"==typeof t&&t==Is(t)}function Ts(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=C}function Ds(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}function Ys(t){return null!=t&&"object"==typeof t}var Ss=Be?pn(Be):function(t){return Ys(t)&&za(t)==G};function Es(t){return"number"==typeof t||Ys(t)&&Qr(t)==J}function As(t){if(!Ys(t)||Qr(t)!=Z)return!1;var e=Ce(t);if(null===e)return!0;var n=le.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&ce.call(n)==_e}var Cs=Re?pn(Re):function(t){return Ys(t)&&Qr(t)==Q};var js=Ie?pn(Ie):function(t){return Ys(t)&&za(t)==tt};function Os(t){return"string"==typeof t||!ys(t)&&Ys(t)&&Qr(t)==et}function Hs(t){return"symbol"==typeof t||Ys(t)&&Qr(t)==nt}var Ps=ze?pn(ze):function(t){return Ys(t)&&Ts(t.length)&&!!we[Qr(t)]};var Fs=Ma(fi),Ns=Ma(function(t,e){return t<=e});function Bs(t){if(!t)return[];if(vs(t))return Os(t)?An(t):ra(t);if(dn&&t[dn])return function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}(t[dn]());var e=za(t);return(e==G?wn:e==tt?Yn:hu)(t)}function Rs(t){return t?(t=Ws(t))===A||t===-A?(t<0?-1:1)*j:t==t?t:0:0===t?t:0}function Is(t){var e=Rs(t),n=e%1;return e==e?n?e-n:e:0}function zs(t){return t?Hr(Is(t),0,H):0}function Ws(t){if("number"==typeof t)return t;if(Hs(t))return O;if(Ds(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=Ds(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(Ct,"");var n=Wt.test(t);return n||Ut.test(t)?Ye(t.slice(2),n?2:8):zt.test(t)?O:+t}function qs(t){return ia(t,au(t))}function Us(t){return null==t?"":Fi(t)}var Vs=oa(function(t,e){if(Za(e)||vs(e))ia(e,iu(e),t);else for(var n in e)le.call(e,n)&&Sr(t,n,e[n])}),$s=oa(function(t,e){ia(e,au(e),t)}),Gs=oa(function(t,e,n,r){ia(e,au(e),t,r)}),Js=oa(function(t,e,n,r){ia(e,iu(e),t,r)}),Xs=Ea(Or);var Zs=wi(function(t,e){t=ee(t);var n=-1,i=e.length,a=i>2?e[2]:r;for(a&&$a(e[0],e[1],a)&&(i=1);++n<i;)for(var o=e[n],s=au(o),u=-1,c=s.length;++u<c;){var l=s[u],d=t[l];(d===r||hs(d,se[l])&&!le.call(t,l))&&(t[l]=o[l])}return t}),Ks=wi(function(t){return t.push(r,Da),We(su,r,t)});function Qs(t,e,n){var i=null==t?r:Zr(t,e);return i===r?n:i}function tu(t,e){return null!=t&&Wa(t,e,ni)}var eu=pa(function(t,e,n){null!=e&&"function"!=typeof e.toString&&(e=he.call(e)),t[e]=n},Du(Eu)),nu=pa(function(t,e,n){null!=e&&"function"!=typeof e.toString&&(e=he.call(e)),le.call(t,e)?t[e].push(n):t[e]=[n]},Pa),ru=wi(ii);function iu(t){return vs(t)?wr(t):li(t)}function au(t){return vs(t)?wr(t,!0):di(t)}var ou=oa(function(t,e,n){mi(t,e,n)}),su=oa(function(t,e,n,r){mi(t,e,n,r)}),uu=Ea(function(t,e){var n={};if(null==t)return n;var r=!1;e=Ze(e,function(e){return e=$i(e,t),r||(r=e.length>1),e}),ia(t,Ca(t),n),r&&(n=Pr(n,l|d|f,Ya));for(var i=e.length;i--;)Bi(n,e[i]);return n});var cu=Ea(function(t,e){return null==t?{}:function(t,e){return vi(t,e,function(e,n){return tu(t,n)})}(t,e)});function lu(t,e){if(null==t)return{};var n=Ze(Ca(t),function(t){return[t]});return e=Pa(e),vi(t,n,function(t,n){return e(t,n[0])})}var du=wa(iu),fu=wa(au);function hu(t){return null==t?[]:mn(t,iu(t))}var _u=la(function(t,e,n){return e=e.toLowerCase(),t+(n?pu(e):e)});function pu(t){return Lu(Us(t).toLowerCase())}function mu(t){return(t=Us(t))&&t.replace($t,Mn).replace(ye,"")}var yu=la(function(t,e,n){return t+(n?"-":"")+e.toLowerCase()}),gu=la(function(t,e,n){return t+(n?" ":"")+e.toLowerCase()}),vu=ca("toLowerCase");var Mu=la(function(t,e,n){return t+(n?"_":"")+e.toLowerCase()});var bu=la(function(t,e,n){return t+(n?" ":"")+Lu(e)});var ku=la(function(t,e,n){return t+(n?" ":"")+e.toUpperCase()}),Lu=ca("toUpperCase");function wu(t,e,n){return t=Us(t),(e=n?r:e)===r?function(t){return be.test(t)}(t)?function(t){return t.match(ve)||[]}(t):function(t){return t.match(Nt)||[]}(t):t.match(e)||[]}var xu=wi(function(t,e){try{return We(t,r,e)}catch(t){return Ls(t)?t:new Kt(t)}}),Tu=Ea(function(t,e){return Ue(e,function(e){e=co(e),jr(t,e,ns(t[e],t))}),t});function Du(t){return function(){return t}}var Yu=ha(),Su=ha(!0);function Eu(t){return t}function Au(t){return ci("function"==typeof t?t:Pr(t,l))}var Cu=wi(function(t,e){return function(n){return ii(n,t,e)}}),ju=wi(function(t,e){return function(n){return ii(t,n,e)}});function Ou(t,e,n){var r=iu(e),i=Xr(e,r);null!=n||Ds(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=Xr(e,iu(e)));var a=!(Ds(n)&&"chain"in n&&!n.chain),o=ws(t);return Ue(i,function(n){var r=e[n];t[n]=r,o&&(t.prototype[n]=function(){var e=this.__chain__;if(a||e){var n=t(this.__wrapped__);return(n.__actions__=ra(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,Ke([this.value()],arguments))})}),t}function Hu(){}var Pu=ya(Ze),Fu=ya($e),Nu=ya(en);function Bu(t){return Ga(t)?ln(co(t)):function(t){return function(e){return Zr(e,t)}}(t)}var Ru=va(),Iu=va(!0);function zu(){return[]}function Wu(){return!1}var qu=ma(function(t,e){return t+e},0),Uu=ka("ceil"),Vu=ma(function(t,e){return t/e},1),$u=ka("floor");var Gu,Ju=ma(function(t,e){return t*e},1),Xu=ka("round"),Zu=ma(function(t,e){return t-e},0);return _r.after=function(t,e){if("function"!=typeof e)throw new ie(o);return t=Is(t),function(){if(--t<1)return e.apply(this,arguments)}},_r.ary=ts,_r.assign=Vs,_r.assignIn=$s,_r.assignInWith=Gs,_r.assignWith=Js,_r.at=Xs,_r.before=es,_r.bind=ns,_r.bindAll=Tu,_r.bindKey=rs,_r.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return ys(t)?t:[t]},_r.chain=Bo,_r.chunk=function(t,e,n){e=(n?$a(t,e,n):e===r)?1:Vn(Is(e),0);var i=null==t?0:t.length;if(!i||e<1)return[];for(var a=0,o=0,s=Xt(Bn(i/e));a<i;)s[o++]=Ai(t,a,a+=e);return s},_r.compact=function(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var a=t[e];a&&(i[r++]=a)}return i},_r.concat=function(){var t=arguments.length;if(!t)return[];for(var e=Xt(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return Ke(ys(n)?ra(n):[n],Ur(e,1))},_r.cond=function(t){var e=null==t?0:t.length,n=Pa();return t=e?Ze(t,function(t){if("function"!=typeof t[1])throw new ie(o);return[n(t[0]),t[1]]}):[],wi(function(n){for(var r=-1;++r<e;){var i=t[r];if(We(i[0],this,n))return We(i[1],this,n)}})},_r.conforms=function(t){return function(t){var e=iu(t);return function(n){return Fr(n,t,e)}}(Pr(t,l))},_r.constant=Du,_r.countBy=zo,_r.create=function(t,e){var n=pr(t);return null==e?n:Cr(n,e)},_r.curry=function t(e,n,i){var a=xa(e,g,r,r,r,r,r,n=i?r:n);return a.placeholder=t.placeholder,a},_r.curryRight=function t(e,n,i){var a=xa(e,v,r,r,r,r,r,n=i?r:n);return a.placeholder=t.placeholder,a},_r.debounce=is,_r.defaults=Zs,_r.defaultsDeep=Ks,_r.defer=as,_r.delay=os,_r.difference=ho,_r.differenceBy=_o,_r.differenceWith=po,_r.drop=function(t,e,n){var i=null==t?0:t.length;return i?Ai(t,(e=n||e===r?1:Is(e))<0?0:e,i):[]},_r.dropRight=function(t,e,n){var i=null==t?0:t.length;return i?Ai(t,0,(e=i-(e=n||e===r?1:Is(e)))<0?0:e):[]},_r.dropRightWhile=function(t,e){return t&&t.length?Ii(t,Pa(e,3),!0,!0):[]},_r.dropWhile=function(t,e){return t&&t.length?Ii(t,Pa(e,3),!0):[]},_r.fill=function(t,e,n,i){var a=null==t?0:t.length;return a?(n&&"number"!=typeof n&&$a(t,e,n)&&(n=0,i=a),function(t,e,n,i){var a=t.length;for((n=Is(n))<0&&(n=-n>a?0:a+n),(i=i===r||i>a?a:Is(i))<0&&(i+=a),i=n>i?0:zs(i);n<i;)t[n++]=e;return t}(t,e,n,i)):[]},_r.filter=function(t,e){return(ys(t)?Ge:qr)(t,Pa(e,3))},_r.flatMap=function(t,e){return Ur(Xo(t,e),1)},_r.flatMapDeep=function(t,e){return Ur(Xo(t,e),A)},_r.flatMapDepth=function(t,e,n){return n=n===r?1:Is(n),Ur(Xo(t,e),n)},_r.flatten=go,_r.flattenDeep=function(t){return null!=t&&t.length?Ur(t,A):[]},_r.flattenDepth=function(t,e){return null!=t&&t.length?Ur(t,e=e===r?1:Is(e)):[]},_r.flip=function(t){return xa(t,w)},_r.flow=Yu,_r.flowRight=Su,_r.fromPairs=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];r[i[0]]=i[1]}return r},_r.functions=function(t){return null==t?[]:Xr(t,iu(t))},_r.functionsIn=function(t){return null==t?[]:Xr(t,au(t))},_r.groupBy=$o,_r.initial=function(t){return null!=t&&t.length?Ai(t,0,-1):[]},_r.intersection=Mo,_r.intersectionBy=bo,_r.intersectionWith=ko,_r.invert=eu,_r.invertBy=nu,_r.invokeMap=Go,_r.iteratee=Au,_r.keyBy=Jo,_r.keys=iu,_r.keysIn=au,_r.map=Xo,_r.mapKeys=function(t,e){var n={};return e=Pa(e,3),Gr(t,function(t,r,i){jr(n,e(t,r,i),t)}),n},_r.mapValues=function(t,e){var n={};return e=Pa(e,3),Gr(t,function(t,r,i){jr(n,r,e(t,r,i))}),n},_r.matches=function(t){return _i(Pr(t,l))},_r.matchesProperty=function(t,e){return pi(t,Pr(e,l))},_r.memoize=ss,_r.merge=ou,_r.mergeWith=su,_r.method=Cu,_r.methodOf=ju,_r.mixin=Ou,_r.negate=us,_r.nthArg=function(t){return t=Is(t),wi(function(e){return yi(e,t)})},_r.omit=uu,_r.omitBy=function(t,e){return lu(t,us(Pa(e)))},_r.once=function(t){return es(2,t)},_r.orderBy=function(t,e,n,i){return null==t?[]:(ys(e)||(e=null==e?[]:[e]),ys(n=i?r:n)||(n=null==n?[]:[n]),gi(t,e,n))},_r.over=Pu,_r.overArgs=cs,_r.overEvery=Fu,_r.overSome=Nu,_r.partial=ls,_r.partialRight=ds,_r.partition=Zo,_r.pick=cu,_r.pickBy=lu,_r.property=Bu,_r.propertyOf=function(t){return function(e){return null==t?r:Zr(t,e)}},_r.pull=wo,_r.pullAll=xo,_r.pullAllBy=function(t,e,n){return t&&t.length&&e&&e.length?Mi(t,e,Pa(n,2)):t},_r.pullAllWith=function(t,e,n){return t&&t.length&&e&&e.length?Mi(t,e,r,n):t},_r.pullAt=To,_r.range=Ru,_r.rangeRight=Iu,_r.rearg=fs,_r.reject=function(t,e){return(ys(t)?Ge:qr)(t,us(Pa(e,3)))},_r.remove=function(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],a=t.length;for(e=Pa(e,3);++r<a;){var o=t[r];e(o,r,t)&&(n.push(o),i.push(r))}return bi(t,i),n},_r.rest=function(t,e){if("function"!=typeof t)throw new ie(o);return wi(t,e=e===r?e:Is(e))},_r.reverse=Do,_r.sampleSize=function(t,e,n){return e=(n?$a(t,e,n):e===r)?1:Is(e),(ys(t)?Tr:Ti)(t,e)},_r.set=function(t,e,n){return null==t?t:Di(t,e,n)},_r.setWith=function(t,e,n,i){return i="function"==typeof i?i:r,null==t?t:Di(t,e,n,i)},_r.shuffle=function(t){return(ys(t)?Dr:Ei)(t)},_r.slice=function(t,e,n){var i=null==t?0:t.length;return i?(n&&"number"!=typeof n&&$a(t,e,n)?(e=0,n=i):(e=null==e?0:Is(e),n=n===r?i:Is(n)),Ai(t,e,n)):[]},_r.sortBy=Ko,_r.sortedUniq=function(t){return t&&t.length?Hi(t):[]},_r.sortedUniqBy=function(t,e){return t&&t.length?Hi(t,Pa(e,2)):[]},_r.split=function(t,e,n){return n&&"number"!=typeof n&&$a(t,e,n)&&(e=n=r),(n=n===r?H:n>>>0)?(t=Us(t))&&("string"==typeof e||null!=e&&!Cs(e))&&!(e=Fi(e))&&Ln(t)?Ji(An(t),0,n):t.split(e,n):[]},_r.spread=function(t,e){if("function"!=typeof t)throw new ie(o);return e=null==e?0:Vn(Is(e),0),wi(function(n){var r=n[e],i=Ji(n,0,e);return r&&Ke(i,r),We(t,this,i)})},_r.tail=function(t){var e=null==t?0:t.length;return e?Ai(t,1,e):[]},_r.take=function(t,e,n){return t&&t.length?Ai(t,0,(e=n||e===r?1:Is(e))<0?0:e):[]},_r.takeRight=function(t,e,n){var i=null==t?0:t.length;return i?Ai(t,(e=i-(e=n||e===r?1:Is(e)))<0?0:e,i):[]},_r.takeRightWhile=function(t,e){return t&&t.length?Ii(t,Pa(e,3),!1,!0):[]},_r.takeWhile=function(t,e){return t&&t.length?Ii(t,Pa(e,3)):[]},_r.tap=function(t,e){return e(t),t},_r.throttle=function(t,e,n){var r=!0,i=!0;if("function"!=typeof t)throw new ie(o);return Ds(n)&&(r="leading"in n?!!n.leading:r,i="trailing"in n?!!n.trailing:i),is(t,e,{leading:r,maxWait:e,trailing:i})},_r.thru=Ro,_r.toArray=Bs,_r.toPairs=du,_r.toPairsIn=fu,_r.toPath=function(t){return ys(t)?Ze(t,co):Hs(t)?[t]:ra(uo(Us(t)))},_r.toPlainObject=qs,_r.transform=function(t,e,n){var r=ys(t),i=r||bs(t)||Ps(t);if(e=Pa(e,4),null==n){var a=t&&t.constructor;n=i?r?new a:[]:Ds(t)&&ws(a)?pr(Ce(t)):{}}return(i?Ue:Gr)(t,function(t,r,i){return e(n,t,r,i)}),n},_r.unary=function(t){return ts(t,1)},_r.union=Yo,_r.unionBy=So,_r.unionWith=Eo,_r.uniq=function(t){return t&&t.length?Ni(t):[]},_r.uniqBy=function(t,e){return t&&t.length?Ni(t,Pa(e,2)):[]},_r.uniqWith=function(t,e){return e="function"==typeof e?e:r,t&&t.length?Ni(t,r,e):[]},_r.unset=function(t,e){return null==t||Bi(t,e)},_r.unzip=Ao,_r.unzipWith=Co,_r.update=function(t,e,n){return null==t?t:Ri(t,e,Vi(n))},_r.updateWith=function(t,e,n,i){return i="function"==typeof i?i:r,null==t?t:Ri(t,e,Vi(n),i)},_r.values=hu,_r.valuesIn=function(t){return null==t?[]:mn(t,au(t))},_r.without=jo,_r.words=wu,_r.wrap=function(t,e){return ls(Vi(e),t)},_r.xor=Oo,_r.xorBy=Ho,_r.xorWith=Po,_r.zip=Fo,_r.zipObject=function(t,e){return qi(t||[],e||[],Sr)},_r.zipObjectDeep=function(t,e){return qi(t||[],e||[],Di)},_r.zipWith=No,_r.entries=du,_r.entriesIn=fu,_r.extend=$s,_r.extendWith=Gs,Ou(_r,_r),_r.add=qu,_r.attempt=xu,_r.camelCase=_u,_r.capitalize=pu,_r.ceil=Uu,_r.clamp=function(t,e,n){return n===r&&(n=e,e=r),n!==r&&(n=(n=Ws(n))==n?n:0),e!==r&&(e=(e=Ws(e))==e?e:0),Hr(Ws(t),e,n)},_r.clone=function(t){return Pr(t,f)},_r.cloneDeep=function(t){return Pr(t,l|f)},_r.cloneDeepWith=function(t,e){return Pr(t,l|f,e="function"==typeof e?e:r)},_r.cloneWith=function(t,e){return Pr(t,f,e="function"==typeof e?e:r)},_r.conformsTo=function(t,e){return null==e||Fr(t,e,iu(e))},_r.deburr=mu,_r.defaultTo=function(t,e){return null==t||t!=t?e:t},_r.divide=Vu,_r.endsWith=function(t,e,n){t=Us(t),e=Fi(e);var i=t.length,a=n=n===r?i:Hr(Is(n),0,i);return(n-=e.length)>=0&&t.slice(n,a)==e},_r.eq=hs,_r.escape=function(t){return(t=Us(t))&&Lt.test(t)?t.replace(bt,bn):t},_r.escapeRegExp=function(t){return(t=Us(t))&&At.test(t)?t.replace(Et,"\\$&"):t},_r.every=function(t,e,n){var i=ys(t)?$e:zr;return n&&$a(t,e,n)&&(e=r),i(t,Pa(e,3))},_r.find=Wo,_r.findIndex=mo,_r.findKey=function(t,e){return rn(t,Pa(e,3),Gr)},_r.findLast=qo,_r.findLastIndex=yo,_r.findLastKey=function(t,e){return rn(t,Pa(e,3),Jr)},_r.floor=$u,_r.forEach=Uo,_r.forEachRight=Vo,_r.forIn=function(t,e){return null==t?t:Vr(t,Pa(e,3),au)},_r.forInRight=function(t,e){return null==t?t:$r(t,Pa(e,3),au)},_r.forOwn=function(t,e){return t&&Gr(t,Pa(e,3))},_r.forOwnRight=function(t,e){return t&&Jr(t,Pa(e,3))},_r.get=Qs,_r.gt=_s,_r.gte=ps,_r.has=function(t,e){return null!=t&&Wa(t,e,ei)},_r.hasIn=tu,_r.head=vo,_r.identity=Eu,_r.includes=function(t,e,n,r){t=vs(t)?t:hu(t),n=n&&!r?Is(n):0;var i=t.length;return n<0&&(n=Vn(i+n,0)),Os(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&on(t,e,n)>-1},_r.indexOf=function(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:Is(n);return i<0&&(i=Vn(r+i,0)),on(t,e,i)},_r.inRange=function(t,e,n){return e=Rs(e),n===r?(n=e,e=0):n=Rs(n),function(t,e,n){return t>=$n(e,n)&&t<Vn(e,n)}(t=Ws(t),e,n)},_r.invoke=ru,_r.isArguments=ms,_r.isArray=ys,_r.isArrayBuffer=gs,_r.isArrayLike=vs,_r.isArrayLikeObject=Ms,_r.isBoolean=function(t){return!0===t||!1===t||Ys(t)&&Qr(t)==z},_r.isBuffer=bs,_r.isDate=ks,_r.isElement=function(t){return Ys(t)&&1===t.nodeType&&!As(t)},_r.isEmpty=function(t){if(null==t)return!0;if(vs(t)&&(ys(t)||"string"==typeof t||"function"==typeof t.splice||bs(t)||Ps(t)||ms(t)))return!t.length;var e=za(t);if(e==G||e==tt)return!t.size;if(Za(t))return!li(t).length;for(var n in t)if(le.call(t,n))return!1;return!0},_r.isEqual=function(t,e){return oi(t,e)},_r.isEqualWith=function(t,e,n){var i=(n="function"==typeof n?n:r)?n(t,e):r;return i===r?oi(t,e,r,n):!!i},_r.isError=Ls,_r.isFinite=function(t){return"number"==typeof t&&Wn(t)},_r.isFunction=ws,_r.isInteger=xs,_r.isLength=Ts,_r.isMap=Ss,_r.isMatch=function(t,e){return t===e||si(t,e,Na(e))},_r.isMatchWith=function(t,e,n){return n="function"==typeof n?n:r,si(t,e,Na(e),n)},_r.isNaN=function(t){return Es(t)&&t!=+t},_r.isNative=function(t){if(Xa(t))throw new Kt(a);return ui(t)},_r.isNil=function(t){return null==t},_r.isNull=function(t){return null===t},_r.isNumber=Es,_r.isObject=Ds,_r.isObjectLike=Ys,_r.isPlainObject=As,_r.isRegExp=Cs,_r.isSafeInteger=function(t){return xs(t)&&t>=-C&&t<=C},_r.isSet=js,_r.isString=Os,_r.isSymbol=Hs,_r.isTypedArray=Ps,_r.isUndefined=function(t){return t===r},_r.isWeakMap=function(t){return Ys(t)&&za(t)==it},_r.isWeakSet=function(t){return Ys(t)&&Qr(t)==at},_r.join=function(t,e){return null==t?"":qn.call(t,e)},_r.kebabCase=yu,_r.last=Lo,_r.lastIndexOf=function(t,e,n){var i=null==t?0:t.length;if(!i)return-1;var a=i;return n!==r&&(a=(a=Is(n))<0?Vn(i+a,0):$n(a,i-1)),e==e?function(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}(t,e,a):an(t,un,a,!0)},_r.lowerCase=gu,_r.lowerFirst=vu,_r.lt=Fs,_r.lte=Ns,_r.max=function(t){return t&&t.length?Wr(t,Eu,ti):r},_r.maxBy=function(t,e){return t&&t.length?Wr(t,Pa(e,2),ti):r},_r.mean=function(t){return cn(t,Eu)},_r.meanBy=function(t,e){return cn(t,Pa(e,2))},_r.min=function(t){return t&&t.length?Wr(t,Eu,fi):r},_r.minBy=function(t,e){return t&&t.length?Wr(t,Pa(e,2),fi):r},_r.stubArray=zu,_r.stubFalse=Wu,_r.stubObject=function(){return{}},_r.stubString=function(){return""},_r.stubTrue=function(){return!0},_r.multiply=Ju,_r.nth=function(t,e){return t&&t.length?yi(t,Is(e)):r},_r.noConflict=function(){return Ae._===this&&(Ae._=pe),this},_r.noop=Hu,_r.now=Qo,_r.pad=function(t,e,n){t=Us(t);var r=(e=Is(e))?En(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return ga(Rn(i),n)+t+ga(Bn(i),n)},_r.padEnd=function(t,e,n){t=Us(t);var r=(e=Is(e))?En(t):0;return e&&r<e?t+ga(e-r,n):t},_r.padStart=function(t,e,n){t=Us(t);var r=(e=Is(e))?En(t):0;return e&&r<e?ga(e-r,n)+t:t},_r.parseInt=function(t,e,n){return n||null==e?e=0:e&&(e=+e),Jn(Us(t).replace(jt,""),e||0)},_r.random=function(t,e,n){if(n&&"boolean"!=typeof n&&$a(t,e,n)&&(e=n=r),n===r&&("boolean"==typeof e?(n=e,e=r):"boolean"==typeof t&&(n=t,t=r)),t===r&&e===r?(t=0,e=1):(t=Rs(t),e===r?(e=t,t=0):e=Rs(e)),t>e){var i=t;t=e,e=i}if(n||t%1||e%1){var a=Xn();return $n(t+a*(e-t+De("1e-"+((a+"").length-1))),e)}return ki(t,e)},_r.reduce=function(t,e,n){var r=ys(t)?Qe:fn,i=arguments.length<3;return r(t,Pa(e,4),n,i,Rr)},_r.reduceRight=function(t,e,n){var r=ys(t)?tn:fn,i=arguments.length<3;return r(t,Pa(e,4),n,i,Ir)},_r.repeat=function(t,e,n){return e=(n?$a(t,e,n):e===r)?1:Is(e),Li(Us(t),e)},_r.replace=function(){var t=arguments,e=Us(t[0]);return t.length<3?e:e.replace(t[1],t[2])},_r.result=function(t,e,n){var i=-1,a=(e=$i(e,t)).length;for(a||(a=1,t=r);++i<a;){var o=null==t?r:t[co(e[i])];o===r&&(i=a,o=n),t=ws(o)?o.call(t):o}return t},_r.round=Xu,_r.runInContext=t,_r.sample=function(t){return(ys(t)?xr:xi)(t)},_r.size=function(t){if(null==t)return 0;if(vs(t))return Os(t)?En(t):t.length;var e=za(t);return e==G||e==tt?t.size:li(t).length},_r.snakeCase=Mu,_r.some=function(t,e,n){var i=ys(t)?en:Ci;return n&&$a(t,e,n)&&(e=r),i(t,Pa(e,3))},_r.sortedIndex=function(t,e){return ji(t,e)},_r.sortedIndexBy=function(t,e,n){return Oi(t,e,Pa(n,2))},_r.sortedIndexOf=function(t,e){var n=null==t?0:t.length;if(n){var r=ji(t,e);if(r<n&&hs(t[r],e))return r}return-1},_r.sortedLastIndex=function(t,e){return ji(t,e,!0)},_r.sortedLastIndexBy=function(t,e,n){return Oi(t,e,Pa(n,2),!0)},_r.sortedLastIndexOf=function(t,e){if(null!=t&&t.length){var n=ji(t,e,!0)-1;if(hs(t[n],e))return n}return-1},_r.startCase=bu,_r.startsWith=function(t,e,n){return t=Us(t),n=null==n?0:Hr(Is(n),0,t.length),e=Fi(e),t.slice(n,n+e.length)==e},_r.subtract=Zu,_r.sum=function(t){return t&&t.length?hn(t,Eu):0},_r.sumBy=function(t,e){return t&&t.length?hn(t,Pa(e,2)):0},_r.template=function(t,e,n){var i=_r.templateSettings;n&&$a(t,e,n)&&(e=r),t=Us(t),e=Gs({},e,i,Ta);var a,o,s=Gs({},e.imports,i.imports,Ta),u=iu(s),c=mn(s,u),l=0,d=e.interpolate||Gt,f="__p += '",h=ne((e.escape||Gt).source+"|"+d.source+"|"+(d===Tt?Rt:Gt).source+"|"+(e.evaluate||Gt).source+"|$","g"),_="//# sourceURL="+("sourceURL"in e?e.sourceURL:"lodash.templateSources["+ ++Le+"]")+"\n";t.replace(h,function(e,n,r,i,s,u){return r||(r=i),f+=t.slice(l,u).replace(Jt,kn),n&&(a=!0,f+="' +\n__e("+n+") +\n'"),s&&(o=!0,f+="';\n"+s+";\n__p += '"),r&&(f+="' +\n((__t = ("+r+")) == null ? '' : __t) +\n'"),l=u+e.length,e}),f+="';\n";var p=e.variable;p||(f="with (obj) {\n"+f+"\n}\n"),f=(o?f.replace(yt,""):f).replace(gt,"$1").replace(vt,"$1;"),f="function("+(p||"obj")+") {\n"+(p?"":"obj || (obj = {});\n")+"var __t, __p = ''"+(a?", __e = _.escape":"")+(o?", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n":";\n")+f+"return __p\n}";var m=xu(function(){return Qt(u,_+"return "+f).apply(r,c)});if(m.source=f,Ls(m))throw m;return m},_r.times=function(t,e){if((t=Is(t))<1||t>C)return[];var n=H,r=$n(t,H);e=Pa(e),t-=H;for(var i=_n(r,e);++n<t;)e(n);return i},_r.toFinite=Rs,_r.toInteger=Is,_r.toLength=zs,_r.toLower=function(t){return Us(t).toLowerCase()},_r.toNumber=Ws,_r.toSafeInteger=function(t){return t?Hr(Is(t),-C,C):0===t?t:0},_r.toString=Us,_r.toUpper=function(t){return Us(t).toUpperCase()},_r.trim=function(t,e,n){if((t=Us(t))&&(n||e===r))return t.replace(Ct,"");if(!t||!(e=Fi(e)))return t;var i=An(t),a=An(e);return Ji(i,gn(i,a),vn(i,a)+1).join("")},_r.trimEnd=function(t,e,n){if((t=Us(t))&&(n||e===r))return t.replace(Ot,"");if(!t||!(e=Fi(e)))return t;var i=An(t);return Ji(i,0,vn(i,An(e))+1).join("")},_r.trimStart=function(t,e,n){if((t=Us(t))&&(n||e===r))return t.replace(jt,"");if(!t||!(e=Fi(e)))return t;var i=An(t);return Ji(i,gn(i,An(e))).join("")},_r.truncate=function(t,e){var n=x,i=T;if(Ds(e)){var a="separator"in e?e.separator:a;n="length"in e?Is(e.length):n,i="omission"in e?Fi(e.omission):i}var o=(t=Us(t)).length;if(Ln(t)){var s=An(t);o=s.length}if(n>=o)return t;var u=n-En(i);if(u<1)return i;var c=s?Ji(s,0,u).join(""):t.slice(0,u);if(a===r)return c+i;if(s&&(u+=c.length-u),Cs(a)){if(t.slice(u).search(a)){var l,d=c;for(a.global||(a=ne(a.source,Us(It.exec(a))+"g")),a.lastIndex=0;l=a.exec(d);)var f=l.index;c=c.slice(0,f===r?u:f)}}else if(t.indexOf(Fi(a),u)!=u){var h=c.lastIndexOf(a);h>-1&&(c=c.slice(0,h))}return c+i},_r.unescape=function(t){return(t=Us(t))&&kt.test(t)?t.replace(Mt,Cn):t},_r.uniqueId=function(t){var e=++de;return Us(t)+e},_r.upperCase=ku,_r.upperFirst=Lu,_r.each=Uo,_r.eachRight=Vo,_r.first=vo,Ou(_r,(Gu={},Gr(_r,function(t,e){le.call(_r.prototype,e)||(Gu[e]=t)}),Gu),{chain:!1}),_r.VERSION="4.17.5",Ue(["bind","bindKey","curry","curryRight","partial","partialRight"],function(t){_r[t].placeholder=_r}),Ue(["drop","take"],function(t,e){gr.prototype[t]=function(n){n=n===r?1:Vn(Is(n),0);var i=this.__filtered__&&!e?new gr(this):this.clone();return i.__filtered__?i.__takeCount__=$n(n,i.__takeCount__):i.__views__.push({size:$n(n,H),type:t+(i.__dir__<0?"Right":"")}),i},gr.prototype[t+"Right"]=function(e){return this.reverse()[t](e).reverse()}}),Ue(["filter","map","takeWhile"],function(t,e){var n=e+1,r=n==S||3==n;gr.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:Pa(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),Ue(["head","last"],function(t,e){var n="take"+(e?"Right":"");gr.prototype[t]=function(){return this[n](1).value()[0]}}),Ue(["initial","tail"],function(t,e){var n="drop"+(e?"":"Right");gr.prototype[t]=function(){return this.__filtered__?new gr(this):this[n](1)}}),gr.prototype.compact=function(){return this.filter(Eu)},gr.prototype.find=function(t){return this.filter(t).head()},gr.prototype.findLast=function(t){return this.reverse().find(t)},gr.prototype.invokeMap=wi(function(t,e){return"function"==typeof t?new gr(this):this.map(function(n){return ii(n,t,e)})}),gr.prototype.reject=function(t){return this.filter(us(Pa(t)))},gr.prototype.slice=function(t,e){t=Is(t);var n=this;return n.__filtered__&&(t>0||e<0)?new gr(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==r&&(n=(e=Is(e))<0?n.dropRight(-e):n.take(e-t)),n)},gr.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},gr.prototype.toArray=function(){return this.take(H)},Gr(gr.prototype,function(t,e){var n=/^(?:filter|find|map|reject)|While$/.test(e),i=/^(?:head|last)$/.test(e),a=_r[i?"take"+("last"==e?"Right":""):e],o=i||/^find/.test(e);a&&(_r.prototype[e]=function(){var e=this.__wrapped__,s=i?[1]:arguments,u=e instanceof gr,c=s[0],l=u||ys(e),d=function(t){var e=a.apply(_r,Ke([t],s));return i&&f?e[0]:e};l&&n&&"function"==typeof c&&1!=c.length&&(u=l=!1);var f=this.__chain__,h=!!this.__actions__.length,_=o&&!f,p=u&&!h;if(!o&&l){e=p?e:new gr(this);var m=t.apply(e,s);return m.__actions__.push({func:Ro,args:[d],thisArg:r}),new yr(m,f)}return _&&p?t.apply(this,s):(m=this.thru(d),_?i?m.value()[0]:m.value():m)})}),Ue(["pop","push","shift","sort","splice","unshift"],function(t){var e=ae[t],n=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);_r.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return e.apply(ys(i)?i:[],t)}return this[n](function(n){return e.apply(ys(n)?n:[],t)})}}),Gr(gr.prototype,function(t,e){var n=_r[e];if(n){var r=n.name+"";(ar[r]||(ar[r]=[])).push({name:e,func:n})}}),ar[_a(r,m).name]=[{name:"wrapper",func:r}],gr.prototype.clone=function(){var t=new gr(this.__wrapped__);return t.__actions__=ra(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=ra(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=ra(this.__views__),t},gr.prototype.reverse=function(){if(this.__filtered__){var t=new gr(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},gr.prototype.value=function(){var t=this.__wrapped__.value(),e=this.__dir__,n=ys(t),r=e<0,i=n?t.length:0,a=function(t,e,n){for(var r=-1,i=n.length;++r<i;){var a=n[r],o=a.size;switch(a.type){case"drop":t+=o;break;case"dropRight":e-=o;break;case"take":e=$n(e,t+o);break;case"takeRight":t=Vn(t,e-o)}}return{start:t,end:e}}(0,i,this.__views__),o=a.start,s=a.end,u=s-o,c=r?s:o-1,l=this.__iteratees__,d=l.length,f=0,h=$n(u,this.__takeCount__);if(!n||!r&&i==u&&h==u)return zi(t,this.__actions__);var _=[];t:for(;u--&&f<h;){for(var p=-1,m=t[c+=e];++p<d;){var y=l[p],g=y.iteratee,v=y.type,M=g(m);if(v==E)m=M;else if(!M){if(v==S)continue t;break t}}_[f++]=m}return _},_r.prototype.at=Io,_r.prototype.chain=function(){return Bo(this)},_r.prototype.commit=function(){return new yr(this.value(),this.__chain__)},_r.prototype.next=function(){this.__values__===r&&(this.__values__=Bs(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?r:this.__values__[this.__index__++]}},_r.prototype.plant=function(t){for(var e,n=this;n instanceof mr;){var i=fo(n);i.__index__=0,i.__values__=r,e?a.__wrapped__=i:e=i;var a=i;n=n.__wrapped__}return a.__wrapped__=t,e},_r.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof gr){var e=t;return this.__actions__.length&&(e=new gr(this)),(e=e.reverse()).__actions__.push({func:Ro,args:[Do],thisArg:r}),new yr(e,this.__chain__)}return this.thru(Do)},_r.prototype.toJSON=_r.prototype.valueOf=_r.prototype.value=function(){return zi(this.__wrapped__,this.__actions__)},_r.prototype.first=_r.prototype.head,dn&&(_r.prototype[dn]=function(){return this}),_r}();"function"==typeof define&&"object"==typeof define.amd&&define.amd?(Ae._=jn,define(function(){return jn})):je?((je.exports=jn)._=jn,Ce._=jn):Ae._=jn}).call(this)}).call(this,n(151),n(4)(t))},function(t,e){t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var n=function(t,e){var n=t[1]||"",r=t[3];if(!r)return n;if(e&&"function"==typeof btoa){var i=(o=r,"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */"),a=r.sources.map(function(t){return"/*# sourceURL="+r.sourceRoot+t+" */"});return[n].concat(a).concat([i]).join("\n")}var o;return[n].join("\n")}(e,t);return e[2]?"@media "+e[2]+"{"+n+"}":n}).join("")},e.i=function(t,n){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},i=0;i<this.length;i++){var a=this[i][0];"number"==typeof a&&(r[a]=!0)}for(i=0;i<t.length;i++){var o=t[i];"number"==typeof o[0]&&r[o[0]]||(n&&!o[2]?o[2]=n:n&&(o[2]="("+o[2]+") and ("+n+")"),e.push(o))}},e}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.interpolateToCurve=e.isSubstringInArray=e.detectType=void 0;var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(3));var i=e.detectType=function(t){return(t=t.replace(/^\s*%%.*\n/g,"\n")).match(/^\s*sequenceDiagram/)?"sequence":t.match(/^\s*gantt/)?"gantt":t.match(/^\s*classDiagram/)?"class":t.match(/^\s*gitGraph/)?"git":"flowchart"},a=e.isSubstringInArray=function(t,e){for(var n=0;n<e.length;n++)if(e[n].match(t))return n;return-1},o=e.interpolateToCurve=function(t,e){if(!t)return e;var n="curve"+(t.charAt(0).toUpperCase()+t.slice(1));return r[n]||e};e.default={detectType:i,isSubstringInArray:a,interpolateToCurve:o}},function(t,e,n){const r=n(1);t.exports=s;const i="\0",a="\0",o="";function s(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[a]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function u(t,e){t[e]?t[e]++:t[e]=1}function c(t,e){--t[e]||delete t[e]}function l(t,e,n,a){var s=""+e,u=""+n;if(!t&&s>u){var c=s;s=u,u=c}return s+o+u+o+(r.isUndefined(a)?i:a)}function d(t,e){return l(t,e.v,e.w,e.name)}s.prototype._nodeCount=0,s.prototype._edgeCount=0,s.prototype.isDirected=function(){return this._isDirected},s.prototype.isMultigraph=function(){return this._isMultigraph},s.prototype.isCompound=function(){return this._isCompound},s.prototype.setGraph=function(t){return this._label=t,this},s.prototype.graph=function(){return this._label},s.prototype.setDefaultNodeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultNodeLabelFn=t,this},s.prototype.nodeCount=function(){return this._nodeCount},s.prototype.nodes=function(){return r.keys(this._nodes)},s.prototype.sources=function(){var t=this;return r.filter(this.nodes(),function(e){return r.isEmpty(t._in[e])})},s.prototype.sinks=function(){var t=this;return r.filter(this.nodes(),function(e){return r.isEmpty(t._out[e])})},s.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},s.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]=a,this._children[t]={},this._children[a][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},s.prototype.node=function(t){return this._nodes[t]},s.prototype.hasNode=function(t){return r.has(this._nodes,t)},s.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},s.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(e))e=a;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},s.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},s.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if(e!==a)return e}},s.prototype.children=function(t){if(r.isUndefined(t)&&(t=a),this._isCompound){var e=this._children[t];if(e)return r.keys(e)}else{if(t===a)return this.nodes();if(this.hasNode(t))return[]}},s.prototype.predecessors=function(t){var e=this._preds[t];if(e)return r.keys(e)},s.prototype.successors=function(t){var e=this._sucs[t];if(e)return r.keys(e)},s.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return r.union(e,this.successors(t))},s.prototype.isLeaf=function(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length},s.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},s.prototype.setDefaultEdgeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultEdgeLabelFn=t,this},s.prototype.edgeCount=function(){return this._edgeCount},s.prototype.edges=function(){return r.values(this._edgeObjs)},s.prototype.setPath=function(t,e){const 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},s.prototype.setEdge=function(){let t,e,n,i,a=!1;const o=arguments[0];"object"==typeof o&&null!==o&&"v"in o?(t=o.v,e=o.w,n=o.name,2===arguments.length&&(i=arguments[1],a=!0)):(t=o,e=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],a=!0)),t=""+t,e=""+e,r.isUndefined(n)||(n=""+n);var s=l(this._isDirected,t,e,n);if(r.has(this._edgeLabels,s))return a&&(this._edgeLabels[s]=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[s]=a?i:this._defaultEdgeLabelFn(t,e,n);var c=function(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};r&&(s.name=r);return s}(this._isDirected,t,e,n);return t=c.v,e=c.w,Object.freeze(c),this._edgeObjs[s]=c,u(this._preds[e],t),u(this._sucs[t],e),this._in[e][s]=c,this._out[t][s]=c,this._edgeCount++,this},s.prototype.edge=function(t,e,n){var r=1===arguments.length?d(this._isDirected,arguments[0]):l(this._isDirected,t,e,n);return this._edgeLabels[r]},s.prototype.hasEdge=function(t,e,n){var i=1===arguments.length?d(this._isDirected,arguments[0]):l(this._isDirected,t,e,n);return r.has(this._edgeLabels,i)},s.prototype.removeEdge=function(t,e,n){const r=1===arguments.length?d(this._isDirected,arguments[0]):l(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],c(this._preds[e],t),c(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},s.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}},s.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}},s.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},function(t,e,n){t.exports={Graph:n(11),json:n(176),alg:n(175)}},function(t,e,n){"use strict";(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="",u=0,c=0,l=0,d=1,f=a.slice.call(arguments,1),h=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);h.setInput(t,_.yy),_.yy.lexer=h,_.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var m=h.yylloc;a.push(m);var y=h.options&&h.options.ranges;"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,v,M,b,k,L,w,x,T,D,Y={};;){if(M=n[n.length-1],this.defaultActions[M]?b=this.defaultActions[M]:(null!==g&&void 0!==g||(D=void 0,"number"!=typeof(D=r.pop()||h.lex()||d)&&(D instanceof Array&&(D=(r=D).pop()),D=e.symbols_[D]||D),g=D),b=o[M]&&o[M][g]),void 0===b||!b.length||!b[0]){var S="";for(L in T=[],o[M])this.terminals_[L]&&L>2&&T.push("'"+this.terminals_[L]+"'");S=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(u+1)+": Unexpected "+(g==d?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(S,{text:h.match,token:this.terminals_[g]||g,line:h.yylineno,loc:m,expected:T})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+g);switch(b[0]){case 1:n.push(g),i.push(h.yytext),a.push(h.yylloc),n.push(b[1]),g=null,v?(g=v,v=null):(c=h.yyleng,s=h.yytext,u=h.yylineno,m=h.yylloc,l>0&&l--);break;case 2:if(w=this.productions_[b[1]][1],Y.$=i[i.length-w],Y._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},y&&(Y._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(k=this.performAction.apply(Y,[s,c,u,_.yy,b[1],i,a].concat(f))))return k;w&&(n=n.slice(0,-1*w*2),i=i.slice(0,-1*w),a=a.slice(0,-1*w)),n.push(this.productions_[b[1]][0]),i.push(Y.$),a.push(Y._$),x=o[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},u={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;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[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_]+)/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 c(){this.yy={}}return s.lexer=u,c.prototype=s,s.Parser=c,new c}();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(7).readFileSync(n(6).normalize(r[1]),"utf8");return e.parser.parse(i)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(5),n(4)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getHead=e.getDirection=e.getCurrentBranch=e.getCommitsArray=e.getCommits=e.getBranches=e.getBranchesAsObjArray=e.clear=e.prettyPrint=e.reset=e.checkout=e.merge=e.branch=e.commit=e.getOptions=e.setOptions=e.setDirection=void 0;var r,i=n(8),a=(r=i)&&r.__esModule?r:{default:r},o=n(2);var s={},u=null,c={master:u},l="master",d="LR",f=0;function h(){for(var t,e,n="",r=0;r<7;r++)n+="0123456789abcdef"[(t=0,e=16,Math.floor(Math.random()*(e-t))+t)];return n}function _(t,e){for(o.logger.debug("Entering isfastforwardable:",t.id,e.id);t.seq<=e.seq&&t!==e&&null!=e.parent;){if(Array.isArray(e.parent))return o.logger.debug("In merge commit:",e.parent),_(t,s[e.parent[0]])||_(t,s[e.parent[1]]);e=s[e.parent]}return o.logger.debug(t.id,e.id),t.id===e.id}var p=e.setDirection=function(t){d=t},m={},y=e.setOptions=function(t){o.logger.debug("options str",t),t=(t=t&&t.trim())||"{}";try{m=JSON.parse(t)}catch(t){o.logger.error("error while parsing gitGraph options",t.message)}},g=e.getOptions=function(){return m},v=e.commit=function(t){var e={id:h(),message:t,seq:f++,parent:null==u?null:u.id};u=e,s[e.id]=e,c[l]=e.id,o.logger.debug("in pushCommit "+e.id)},M=e.branch=function(t){c[t]=null!=u?u.id:null,o.logger.debug("in createBranch")},b=e.merge=function(t){var e=s[c[l]],n=s[c[t]];if(function(t,e){return t.seq>e.seq&&_(e,t)}(e,n))o.logger.debug("Already merged");else{if(_(e,n))c[l]=c[t],u=s[c[l]];else{var r={id:h(),message:"merged branch "+t+" into "+l,seq:f++,parent:[null==u?null:u.id,c[t]]};u=r,s[r.id]=r,c[l]=r.id}o.logger.debug(c),o.logger.debug("in mergeBranch")}},k=e.checkout=function(t){o.logger.debug("in checkout");var e=c[l=t];u=s[e]},L=e.reset=function(t){o.logger.debug("in reset",t);var e=t.split(":")[0],n=parseInt(t.split(":")[1]),r="HEAD"===e?u:s[c[e]];for(o.logger.debug(r,n);n>0;)if(n--,!(r=s[r.parent])){var i="Critical error - unique parent commit not found during reset";throw o.logger.error(i),i}u=r,c[l]=r.id};function w(t,e,n){var r=t.indexOf(e);-1===r?t.push(n):t.splice(r,1,n)}var x=e.prettyPrint=function(){o.logger.debug(s),function t(e){var n=a.default.maxBy(e,"seq"),r="";e.forEach(function(t){r+=t===n?"\t*":"\t|"});var i=[r,n.id,n.seq];if(a.default.each(c,function(t,e){t===n.id&&i.push(e)}),o.logger.debug(i.join(" ")),Array.isArray(n.parent)){var u=s[n.parent[0]];w(e,n,u),e.push(s[n.parent[1]])}else{if(null==n.parent)return;var l=s[n.parent];w(e,n,l)}t(e=a.default.uniqBy(e,"id"))}([E()[0]])},T=e.clear=function(){s={},c={master:u=null},l="master",f=0},D=e.getBranchesAsObjArray=function(){return a.default.map(c,function(t,e){return{name:e,commit:s[t]}})},Y=e.getBranches=function(){return c},S=e.getCommits=function(){return s},E=e.getCommitsArray=function(){var t=Object.keys(s).map(function(t){return s[t]});return t.forEach(function(t){o.logger.debug(t.id)}),a.default.orderBy(t,["seq"],["desc"])},A=e.getCurrentBranch=function(){return l},C=e.getDirection=function(){return d},j=e.getHead=function(){return u};e.default={setDirection:p,setOptions:y,getOptions:g,commit:v,branch:M,merge:b,checkout:k,reset:L,prettyPrint:x,clear:T,getBranchesAsObjArray:D,getBranches:Y,getCommits:S,getCommitsArray:E,getCurrentBranch:A,getDirection:C,getHead:j}},function(t,e,n){"use strict";(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,11],n=[1,12],r=[1,13],i=[1,15],a=[1,16],o=[1,17],s=[6,8],u=[1,26],c=[1,27],l=[1,28],d=[1,29],f=[1,30],h=[1,31],_=[6,8,13,17,23,26,27,28,29,30,31],p=[6,8,13,17,23,26,27,28,29,30,31,45,46,47],m=[23,45,46,47],y=[23,30,31,45,46,47],g=[23,26,27,28,29,45,46,47],v=[6,8,13],M=[1,46],b={trace:function(){},yy:{},symbols_:{error:2,mermaidDoc:3,graphConfig:4,CLASS_DIAGRAM:5,NEWLINE:6,statements:7,EOF:8,statement:9,className:10,alphaNumToken:11,relationStatement:12,LABEL:13,classStatement:14,methodStatement:15,CLASS:16,STRUCT_START:17,members:18,STRUCT_STOP:19,MEMBER:20,SEPARATOR:21,relation:22,STR:23,relationType:24,lineType:25,AGGREGATION:26,EXTENSION:27,COMPOSITION:28,DEPENDENCY:29,LINE:30,DOTTED_LINE:31,commentToken:32,textToken:33,graphCodeTokens:34,textNoTagsToken:35,TAGSTART:36,TAGEND:37,"==":38,"--":39,PCT:40,DEFAULT:41,SPACE:42,MINUS:43,keywords:44,UNICODE_TEXT:45,NUM:46,ALPHA:47,$accept:0,$end:1},terminals_:{2:"error",5:"CLASS_DIAGRAM",6:"NEWLINE",8:"EOF",13:"LABEL",16:"CLASS",17:"STRUCT_START",19:"STRUCT_STOP",20:"MEMBER",21:"SEPARATOR",23:"STR",26:"AGGREGATION",27:"EXTENSION",28:"COMPOSITION",29:"DEPENDENCY",30:"LINE",31:"DOTTED_LINE",34:"graphCodeTokens",36:"TAGSTART",37:"TAGEND",38:"==",39:"--",40:"PCT",41:"DEFAULT",42:"SPACE",43:"MINUS",44:"keywords",45:"UNICODE_TEXT",46:"NUM",47:"ALPHA"},productions_:[0,[3,1],[4,4],[7,1],[7,3],[10,2],[10,1],[9,1],[9,2],[9,1],[9,1],[14,2],[14,5],[18,1],[18,2],[15,1],[15,2],[15,1],[15,1],[12,3],[12,4],[12,4],[12,5],[22,3],[22,2],[22,2],[22,1],[24,1],[24,1],[24,1],[24,1],[25,1],[25,1],[32,1],[32,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[35,1],[35,1],[35,1],[35,1],[11,1],[11,1],[11,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 5:this.$=a[s-1]+a[s];break;case 6:this.$=a[s];break;case 7:r.addRelation(a[s]);break;case 8:a[s-1].title=r.cleanupLabel(a[s]),r.addRelation(a[s-1]);break;case 12:r.addMembers(a[s-3],a[s-1]);break;case 13:this.$=[a[s]];break;case 14:a[s].push(a[s-1]),this.$=a[s];break;case 15:break;case 16:r.addMembers(a[s-1],r.cleanupLabel(a[s]));break;case 17:console.warn("Member",a[s]);break;case 18:break;case 19:this.$={id1:a[s-2],id2:a[s],relation:a[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 20:this.$={id1:a[s-3],id2:a[s],relation:a[s-1],relationTitle1:a[s-2],relationTitle2:"none"};break;case 21:this.$={id1:a[s-3],id2:a[s],relation:a[s-2],relationTitle1:"none",relationTitle2:a[s-1]};break;case 22:this.$={id1:a[s-4],id2:a[s],relation:a[s-2],relationTitle1:a[s-3],relationTitle2:a[s-1]};break;case 23:this.$={type1:a[s-2],type2:a[s],lineType:a[s-1]};break;case 24:this.$={type1:"none",type2:a[s],lineType:a[s-1]};break;case 25:this.$={type1:a[s-1],type2:"none",lineType:a[s]};break;case 26:this.$={type1:"none",type2:"none",lineType:a[s]};break;case 27:this.$=r.relationType.AGGREGATION;break;case 28:this.$=r.relationType.EXTENSION;break;case 29:this.$=r.relationType.COMPOSITION;break;case 30:this.$=r.relationType.DEPENDENCY;break;case 31:this.$=r.lineType.LINE;break;case 32:this.$=r.lineType.DOTTED_LINE}},table:[{3:1,4:2,5:[1,3]},{1:[3]},{1:[2,1]},{6:[1,4]},{7:5,9:6,10:10,11:14,12:7,14:8,15:9,16:e,20:n,21:r,45:i,46:a,47:o},{8:[1,18]},{6:[1,19],8:[2,3]},t(s,[2,7],{13:[1,20]}),t(s,[2,9]),t(s,[2,10]),t(s,[2,15],{22:21,24:24,25:25,13:[1,23],23:[1,22],26:u,27:c,28:l,29:d,30:f,31:h}),{10:32,11:14,45:i,46:a,47:o},t(s,[2,17]),t(s,[2,18]),t(_,[2,6],{11:14,10:33,45:i,46:a,47:o}),t(p,[2,46]),t(p,[2,47]),t(p,[2,48]),{1:[2,2]},{7:34,9:6,10:10,11:14,12:7,14:8,15:9,16:e,20:n,21:r,45:i,46:a,47:o},t(s,[2,8]),{10:35,11:14,23:[1,36],45:i,46:a,47:o},{22:37,24:24,25:25,26:u,27:c,28:l,29:d,30:f,31:h},t(s,[2,16]),{25:38,30:f,31:h},t(m,[2,26],{24:39,26:u,27:c,28:l,29:d}),t(y,[2,27]),t(y,[2,28]),t(y,[2,29]),t(y,[2,30]),t(g,[2,31]),t(g,[2,32]),t(s,[2,11],{17:[1,40]}),t(_,[2,5]),{8:[2,4]},t(v,[2,19]),{10:41,11:14,45:i,46:a,47:o},{10:42,11:14,23:[1,43],45:i,46:a,47:o},t(m,[2,25],{24:44,26:u,27:c,28:l,29:d}),t(m,[2,24]),{18:45,20:M},t(v,[2,21]),t(v,[2,20]),{10:47,11:14,45:i,46:a,47:o},t(m,[2,23]),{19:[1,48]},{18:49,19:[2,13],20:M},t(v,[2,22]),t(s,[2,12]),{19:[2,14]}],defaultActions:{2:[2,1],18:[2,2],34:[2,4],49:[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="",u=0,c=0,l=0,d=1,f=a.slice.call(arguments,1),h=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);h.setInput(t,_.yy),_.yy.lexer=h,_.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var m=h.yylloc;a.push(m);var y=h.options&&h.options.ranges;"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,v,M,b,k,L,w,x,T,D,Y={};;){if(M=n[n.length-1],this.defaultActions[M]?b=this.defaultActions[M]:(null!==g&&void 0!==g||(D=void 0,"number"!=typeof(D=r.pop()||h.lex()||d)&&(D instanceof Array&&(D=(r=D).pop()),D=e.symbols_[D]||D),g=D),b=o[M]&&o[M][g]),void 0===b||!b.length||!b[0]){var S="";for(L in T=[],o[M])this.terminals_[L]&&L>2&&T.push("'"+this.terminals_[L]+"'");S=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(u+1)+": Unexpected "+(g==d?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(S,{text:h.match,token:this.terminals_[g]||g,line:h.yylineno,loc:m,expected:T})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+g);switch(b[0]){case 1:n.push(g),i.push(h.yytext),a.push(h.yylloc),n.push(b[1]),g=null,v?(g=v,v=null):(c=h.yyleng,s=h.yytext,u=h.yylineno,m=h.yylloc,l>0&&l--);break;case 2:if(w=this.productions_[b[1]][1],Y.$=i[i.length-w],Y._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},y&&(Y._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(k=this.performAction.apply(Y,[s,c,u,_.yy,b[1],i,a].concat(f))))return k;w&&(n=n.slice(0,-1*w*2),i=i.slice(0,-1*w),a=a.slice(0,-1*w)),n.push(this.productions_[b[1]][0]),i.push(Y.$),a.push(Y._$),x=o[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},k={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;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[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:break;case 1:return 6;case 2:break;case 3:return 5;case 4:return this.begin("struct"),17;case 5:return this.popState(),19;case 6:break;case 7:return"MEMBER";case 8:return 16;case 9:this.begin("string");break;case 10:this.popState();break;case 11:return"STR";case 12:case 13:return 27;case 14:case 15:return 29;case 16:return 28;case 17:return 26;case 18:return 30;case 19:return 31;case 20:return 13;case 21:return 43;case 22:return"DOT";case 23:return"PLUS";case 24:return 40;case 25:case 26:return"EQUALS";case 27:return 47;case 28:return"PUNCTUATION";case 29:return 46;case 30:return 45;case 31:return 42;case 32:return 8}},rules:[/^(?:%%[^\n]*)/,/^(?:\n+)/,/^(?:\s+)/,/^(?:classDiagram\b)/,/^(?:[\{])/,/^(?:\})/,/^(?:[\n])/,/^(?:[^\{\}\n]*)/,/^(?:class\b)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::[^#\n;]+)/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!"#$%&'*+,-.`?\\_\/])/,/^(?:[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:[10,11],inclusive:!1},struct:{rules:[5,6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,8,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],inclusive:!0}}};function L(){this.yy={}}return b.lexer=k,L.prototype=b,b.Parser=L,new L}();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(7).readFileSync(n(6).normalize(r[1]),"utf8");return e.parser.parse(i)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(5),n(4)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.relationType=e.lineType=e.cleanupLabel=e.addMembers=e.addRelation=e.getRelations=e.getClasses=e.getClass=e.clear=e.addClass=void 0;var r=n(2),i=[],a={},o=e.addClass=function(t){void 0===a[t]&&(a[t]={id:t,methods:[],members:[]})},s=e.clear=function(){i=[],a={}},u=e.getClass=function(t){return a[t]},c=e.getClasses=function(){return a},l=e.getRelations=function(){return i},d=e.addRelation=function(t){r.logger.debug("Adding relation: "+JSON.stringify(t)),o(t.id1),o(t.id2),i.push(t)},f=e.addMembers=function(t,e){var n=a[t];"string"==typeof e&&(")"===e.substr(-1)?n.methods.push(e):n.members.push(e))},h=e.cleanupLabel=function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},_=e.lineType={LINE:0,DOTTED_LINE:1},p=e.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3};e.default={addClass:o,clear:s,getClass:u,getClasses:c,getRelations:l,addRelation:d,addMembers:f,cleanupLabel:h,lineType:_,relationType:p}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.addTaskOrg=e.findTaskById=e.addTask=e.getTasks=e.addSection=e.getTitle=e.setTitle=e.setDateFormat=e.getAxisFormat=e.setAxisFormat=e.clear=void 0;var r,i=n(0),a=(r=i)&&r.__esModule?r:{default:r},o=n(2);var s="",u="",c="",l=[],d=[],f="",h=e.clear=function(){l=[],d=[],f="",c="",L=0,x=void 0,T=void 0,D=[]},_=e.setAxisFormat=function(t){u=t},p=e.getAxisFormat=function(){return u},m=e.setDateFormat=function(t){s=t},y=e.setTitle=function(t){c=t},g=e.getTitle=function(){return c},v=e.addSection=function(t){f=t,l.push(t)},M=e.getTasks=function(){for(var t=C(),e=0;!t&&e<10;)t=C(),e++;return d=D},b=function(t,e,n){n=n.trim();var r=/^after\s+([\d\w-]+)/.exec(n.trim());if(null!==r){var i=E(r[1]);if(void 0===i){var s=new Date;return s.setHours(0,0,0,0),s}return i.endTime}return(0,a.default)(n,e.trim(),!0).isValid()?(0,a.default)(n,e.trim(),!0).toDate():(o.logger.debug("Invalid date:"+n),o.logger.debug("With date format:"+e.trim()),new Date)},k=function(t,e,n){if(n=n.trim(),(0,a.default)(n,e.trim(),!0).isValid())return(0,a.default)(n,e.trim()).toDate();var r=(0,a.default)(t),i=/^([\d]+)([wdhms])/.exec(n.trim());if(null!==i){switch(i[2]){case"s":r.add(i[1],"seconds");break;case"m":r.add(i[1],"minutes");break;case"h":r.add(i[1],"hours");break;case"d":r.add(i[1],"days");break;case"w":r.add(i[1],"weeks")}return r.toDate()}return r.toDate()},L=0,w=function(t){return void 0===t?"task"+(L+=1):t},x=void 0,T=void 0,D=[],Y={},S=e.addTask=function(t,e){var n={section:f,type:f,processed:!1,raw:{data:e},task:t},r=function(t,e){for(var n=(":"===e.substr(0,1)?e.substr(1,e.length):e).split(","),r={},i=!0;i;)i=!1,n[0].match(/^\s*active\s*$/)&&(r.active=!0,n.shift(1),i=!0),n[0].match(/^\s*done\s*$/)&&(r.done=!0,n.shift(1),i=!0),n[0].match(/^\s*crit\s*$/)&&(r.crit=!0,n.shift(1),i=!0);for(var a=0;a<n.length;a++)n[a]=n[a].trim();switch(n.length){case 1:r.id=w(),r.startTime={type:"prevTaskEnd",id:t},r.endTime={data:n[0]};break;case 2:r.id=w(),r.startTime={type:"getStartDate",startData:n[0]},r.endTime={data:n[1]};break;case 3:r.id=w(n[0]),r.startTime={type:"getStartDate",startData:n[1]},r.endTime={data:n[2]}}return r}(T,e);n.raw.startTime=r.startTime,n.raw.endTime=r.endTime,n.id=r.id,n.prevTaskId=T,n.active=r.active,n.done=r.done,n.crit=r.crit;var i=D.push(n);T=n.id,Y[n.id]=i-1},E=e.findTaskById=function(t){var e=Y[t];return D[e]},A=e.addTaskOrg=function(t,e){var n={section:f,type:f,description:t,task:t},r=function(t,e){for(var n=(":"===e.substr(0,1)?e.substr(1,e.length):e).split(","),r={},i=!0;i;)i=!1,n[0].match(/^\s*active\s*$/)&&(r.active=!0,n.shift(1),i=!0),n[0].match(/^\s*done\s*$/)&&(r.done=!0,n.shift(1),i=!0),n[0].match(/^\s*crit\s*$/)&&(r.crit=!0,n.shift(1),i=!0);for(var a=0;a<n.length;a++)n[a]=n[a].trim();switch(n.length){case 1:r.id=w(),r.startTime=t.endTime,r.endTime=k(r.startTime,s,n[0]);break;case 2:r.id=w(),r.startTime=b(0,s,n[0]),r.endTime=k(r.startTime,s,n[1]);break;case 3:r.id=w(n[0]),r.startTime=b(0,s,n[1]),r.endTime=k(r.startTime,s,n[2])}return r}(x,e);n.startTime=r.startTime,n.endTime=r.endTime,n.id=r.id,n.active=r.active,n.done=r.done,n.crit=r.crit,x=n,d.push(n)},C=function(){for(var t=function(t){var e=D[t],n="";switch(D[t].raw.startTime.type){case"prevTaskEnd":var r=E(e.prevTaskId);e.startTime=r.endTime;break;case"getStartDate":(n=b(0,s,D[t].raw.startTime.startData))&&(D[t].startTime=n)}return D[t].startTime&&(D[t].endTime=k(D[t].startTime,s,D[t].raw.endTime.data),D[t].endTime&&(D[t].processed=!0)),D[t].processed},e=!0,n=0;n<D.length;n++)t(n),e=e&&D[n].processed;return e};e.default={clear:h,setDateFormat:m,setAxisFormat:_,getAxisFormat:p,setTitle:y,getTitle:g,addSection:v,getTasks:M,addTask:S,findTaskById:E,addTaskOrg:A}},function(t,e,n){"use strict";(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,8,10,11,12,13,14,15],n=[1,9],r=[1,10],i=[1,11],a=[1,12],o=[1,13],s={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,dateFormat:11,axisFormat:12,title:13,section:14,taskTxt:15,taskData:16,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",11:"dateFormat",12:"axisFormat",13:"title",14:"section",15:"taskTxt",16:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,1],[9,1],[9,1],[9,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:this.$=[];break;case 3:a[s-1].push(a[s]),this.$=a[s-1];break;case 4:case 5:this.$=a[s];break;case 6:case 7:this.$=[];break;case 8:r.setDateFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 9:r.setAxisFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 10:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 11:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 12:r.addTask(a[s-1],a[s]),this.$="task"}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:r,13:i,14:a,15:o},t(e,[2,7],{1:[2,1]}),t(e,[2,3]),{9:14,11:n,12:r,13:i,14:a,15:o},t(e,[2,5]),t(e,[2,6]),t(e,[2,8]),t(e,[2,9]),t(e,[2,10]),t(e,[2,11]),{16:[1,15]},t(e,[2,4]),t(e,[2,12])],defaultActions:{},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="",u=0,c=0,l=0,d=1,f=a.slice.call(arguments,1),h=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);h.setInput(t,_.yy),_.yy.lexer=h,_.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var m=h.yylloc;a.push(m);var y=h.options&&h.options.ranges;"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,v,M,b,k,L,w,x,T,D,Y={};;){if(M=n[n.length-1],this.defaultActions[M]?b=this.defaultActions[M]:(null!==g&&void 0!==g||(D=void 0,"number"!=typeof(D=r.pop()||h.lex()||d)&&(D instanceof Array&&(D=(r=D).pop()),D=e.symbols_[D]||D),g=D),b=o[M]&&o[M][g]),void 0===b||!b.length||!b[0]){var S="";for(L in T=[],o[M])this.terminals_[L]&&L>2&&T.push("'"+this.terminals_[L]+"'");S=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(u+1)+": Unexpected "+(g==d?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(S,{text:h.match,token:this.terminals_[g]||g,line:h.yylineno,loc:m,expected:T})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+g);switch(b[0]){case 1:n.push(g),i.push(h.yytext),a.push(h.yylloc),n.push(b[1]),g=null,v?(g=v,v=null):(c=h.yyleng,s=h.yytext,u=h.yylineno,m=h.yylloc,l>0&&l--);break;case 2:if(w=this.productions_[b[1]][1],Y.$=i[i.length-w],Y._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},y&&(Y._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(k=this.performAction.apply(Y,[s,c,u,_.yy,b[1],i,a].concat(f))))return k;w&&(n=n.slice(0,-1*w*2),i=i.slice(0,-1*w),a=a.slice(0,-1*w)),n.push(this.productions_[b[1]][0]),i.push(Y.$),a.push(Y._$),x=o[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},u={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;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[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 10;case 1:case 2:case 3:break;case 4:return 4;case 5:return 11;case 6:return 12;case 7:return"date";case 8:return 13;case 9:return 14;case 10:return 15;case 11:return 16;case 12:return":";case 13:return 6;case 14:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:axisFormat\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:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],inclusive:!0}}};function c(){this.yy={}}return s.lexer=u,c.prototype=s,s.Parser=c,new c}();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(7).readFileSync(n(6).normalize(r[1]),"utf8");return e.parser.parse(i)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(5),n(4)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.apply=e.setTitle=e.addNote=e.PLACEMENT=e.ARROWTYPE=e.LINETYPE=e.clear=e.getTitle=e.getActorKeys=e.getActor=e.getActors=e.getMessages=e.addSignal=e.addMessage=e.addActor=void 0;var r=n(2),i={},a=[],o=[],s="",u=e.addActor=function(t,e,n){var r=i[t];r&&e===r.name&&null==n||(null==n&&(n=e),i[t]={name:e,description:n})},c=e.addMessage=function(t,e,n,r){a.push({from:t,to:e,message:n,answer:r})},l=e.addSignal=function(t,e,n,i){r.logger.debug("Adding message from="+t+" to="+e+" message="+n+" type="+i),a.push({from:t,to:e,message:n,type:i})},d=e.getMessages=function(){return a},f=e.getActors=function(){return i},h=e.getActor=function(t){return i[t]},_=e.getActorKeys=function(){return Object.keys(i)},p=e.getTitle=function(){return s},m=e.clear=function(){i={},a=[]},y=e.LINETYPE={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},g=e.ARROWTYPE={FILLED:0,OPEN:1},v=e.PLACEMENT={LEFTOF:0,RIGHTOF:1,OVER:2},M=e.addNote=function(t,e,n){var r={actor:t,placement:e,message:n},i=[].concat(t,t);o.push(r),a.push({from:i[0],to:i[1],message:n,type:y.NOTE,placement:e})},b=e.setTitle=function(t){s=t},k=e.apply=function t(e){if(e instanceof Array)e.forEach(function(e){t(e)});else switch(e.type){case"addActor":u(e.actor,e.actor,e.description);break;case"activeStart":case"activeEnd":l(e.actor,void 0,void 0,e.signalType);break;case"addNote":M(e.actor,e.placement,e.text);break;case"addMessage":l(e.from,e.to,e.msg,e.signalType);break;case"loopStart":l(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":l(void 0,void 0,void 0,e.signalType);break;case"optStart":l(void 0,void 0,e.optText,e.signalType);break;case"optEnd":l(void 0,void 0,void 0,e.signalType);break;case"altStart":case"else":l(void 0,void 0,e.altText,e.signalType);break;case"altEnd":l(void 0,void 0,void 0,e.signalType);break;case"setTitle":b(e.text);break;case"parStart":case"and":l(void 0,void 0,e.parText,e.signalType);break;case"parEnd":l(void 0,void 0,void 0,e.signalType)}};e.default={addActor:u,addMessage:c,addSignal:l,getMessages:d,getActors:f,getActor:h,getActorKeys:_,getTitle:p,clear:m,LINETYPE:y,ARROWTYPE:g,PLACEMENT:v,addNote:M,setTitle:b,apply:k}},function(t,e,n){"use strict";(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,4],i=[2,4],a=[1,9],o=[1,11],s=[1,12],u=[1,14],c=[1,15],l=[1,17],d=[1,18],f=[1,19],h=[1,20],_=[1,21],p=[1,23],m=[1,24],y=[1,4,5,10,15,16,18,20,21,22,23,25,27,28,29,40],g=[1,32],v=[4,5,10,15,16,18,20,21,22,23,25,29,40],M=[4,5,10,15,16,18,20,21,22,23,25,28,29,40],b=[4,5,10,15,16,18,20,21,22,23,25,27,29,40],k=[38,39,40],L={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,participant:10,actor:11,AS:12,restOfLine:13,signal:14,activate:15,deactivate:16,note_statement:17,title:18,text2:19,loop:20,end:21,opt:22,alt:23,else_sections:24,par:25,par_sections:26,and:27,else:28,note:29,placement:30,over:31,actor_pair:32,spaceList:33,",":34,left_of:35,right_of:36,signaltype:37,"+":38,"-":39,ACTOR:40,SOLID_OPEN_ARROW:41,DOTTED_OPEN_ARROW:42,SOLID_ARROW:43,DOTTED_ARROW:44,SOLID_CROSS:45,DOTTED_CROSS:46,TXT:47,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",10:"participant",12:"AS",13:"restOfLine",15:"activate",16:"deactivate",18:"title",20:"loop",21:"end",22:"opt",23:"alt",25:"par",27:"and",28:"else",29:"note",31:"over",34:",",35:"left_of",36:"right_of",38:"+",39:"-",40:"ACTOR",41:"SOLID_OPEN_ARROW",42:"DOTTED_OPEN_ARROW",43:"SOLID_ARROW",44:"DOTTED_ARROW",45:"SOLID_CROSS",46:"DOTTED_CROSS",47:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,5],[9,3],[9,2],[9,3],[9,3],[9,2],[9,3],[9,4],[9,4],[9,4],[9,4],[26,1],[26,4],[24,1],[24,4],[17,4],[17,4],[33,2],[33,1],[32,3],[32,1],[30,1],[30,1],[14,5],[14,5],[14,4],[11,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[19,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 3:return r.apply(a[s]),a[s];case 4:this.$=[];break;case 5:a[s-1].push(a[s]),this.$=a[s-1];break;case 6:case 7:this.$=a[s];break;case 8:this.$=[];break;case 9:a[s-3].description=a[s-1],this.$=a[s-3];break;case 10:this.$=a[s-1];break;case 12:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[s-1]};break;case 13:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[s-1]};break;case 15:this.$=[{type:"setTitle",text:a[s-1]}];break;case 16:a[s-1].unshift({type:"loopStart",loopText:a[s-2],signalType:r.LINETYPE.LOOP_START}),a[s-1].push({type:"loopEnd",loopText:a[s-2],signalType:r.LINETYPE.LOOP_END}),this.$=a[s-1];break;case 17:a[s-1].unshift({type:"optStart",optText:a[s-2],signalType:r.LINETYPE.OPT_START}),a[s-1].push({type:"optEnd",optText:a[s-2],signalType:r.LINETYPE.OPT_END}),this.$=a[s-1];break;case 18:a[s-1].unshift({type:"altStart",altText:a[s-2],signalType:r.LINETYPE.ALT_START}),a[s-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=a[s-1];break;case 19:a[s-1].unshift({type:"parStart",parText:a[s-2],signalType:r.LINETYPE.PAR_START}),a[s-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=a[s-1];break;case 21:this.$=a[s-3].concat([{type:"and",parText:a[s-1],signalType:r.LINETYPE.PAR_AND},a[s]]);break;case 23:this.$=a[s-3].concat([{type:"else",altText:a[s-1],signalType:r.LINETYPE.ALT_ELSE},a[s]]);break;case 24:this.$=[a[s-1],{type:"addNote",placement:a[s-2],actor:a[s-1].actor,text:a[s]}];break;case 25:a[s-2]=[].concat(a[s-1],a[s-1]).slice(0,2),a[s-2][0]=a[s-2][0].actor,a[s-2][1]=a[s-2][1].actor,this.$=[a[s-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:a[s-2].slice(0,2),text:a[s]}];break;case 28:this.$=[a[s-2],a[s]];break;case 29:this.$=a[s];break;case 30:this.$=r.PLACEMENT.LEFTOF;break;case 31:this.$=r.PLACEMENT.RIGHTOF;break;case 32:this.$=[a[s-4],a[s-1],{type:"addMessage",from:a[s-4].actor,to:a[s-1].actor,signalType:a[s-3],msg:a[s]},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:a[s-1]}];break;case 33:this.$=[a[s-4],a[s-1],{type:"addMessage",from:a[s-4].actor,to:a[s-1].actor,signalType:a[s-3],msg:a[s]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:a[s-4]}];break;case 34:this.$=[a[s-3],a[s-1],{type:"addMessage",from:a[s-3].actor,to:a[s-1].actor,signalType:a[s-2],msg:a[s]}];break;case 35:this.$={type:"addActor",actor:a[s]};break;case 36:this.$=r.LINETYPE.SOLID_OPEN;break;case 37:this.$=r.LINETYPE.DOTTED_OPEN;break;case 38:this.$=r.LINETYPE.SOLID;break;case 39:this.$=r.LINETYPE.DOTTED;break;case 40:this.$=r.LINETYPE.SOLID_CROSS;break;case 41:this.$=r.LINETYPE.DOTTED_CROSS;break;case 42:this.$=a[s].substring(1).trim().replace(/\\n/gm,"\n")}},table:[{3:1,4:e,5:n,6:r},{1:[3]},{3:5,4:e,5:n,6:r},{3:6,4:e,5:n,6:r},t([1,4,5,10,15,16,18,20,22,23,25,29,40],i,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:o,8:8,9:10,10:s,11:22,14:13,15:u,16:c,17:16,18:l,20:d,22:f,23:h,25:_,29:p,40:m},t(y,[2,5]),{9:25,10:s,11:22,14:13,15:u,16:c,17:16,18:l,20:d,22:f,23:h,25:_,29:p,40:m},t(y,[2,7]),t(y,[2,8]),{11:26,40:m},{5:[1,27]},{11:28,40:m},{11:29,40:m},{5:[1,30]},{19:31,47:g},{13:[1,33]},{13:[1,34]},{13:[1,35]},{13:[1,36]},{37:37,41:[1,38],42:[1,39],43:[1,40],44:[1,41],45:[1,42],46:[1,43]},{30:44,31:[1,45],35:[1,46],36:[1,47]},t([5,12,34,41,42,43,44,45,46,47],[2,35]),t(y,[2,6]),{5:[1,49],12:[1,48]},t(y,[2,11]),{5:[1,50]},{5:[1,51]},t(y,[2,14]),{5:[1,52]},{5:[2,42]},t(v,i,{7:53}),t(v,i,{7:54}),t(M,i,{24:55,7:56}),t(b,i,{26:57,7:58}),{11:61,38:[1,59],39:[1,60],40:m},t(k,[2,36]),t(k,[2,37]),t(k,[2,38]),t(k,[2,39]),t(k,[2,40]),t(k,[2,41]),{11:62,40:m},{11:64,32:63,40:m},{40:[2,30]},{40:[2,31]},{13:[1,65]},t(y,[2,10]),t(y,[2,12]),t(y,[2,13]),t(y,[2,15]),{4:a,5:o,8:8,9:10,10:s,11:22,14:13,15:u,16:c,17:16,18:l,20:d,21:[1,66],22:f,23:h,25:_,29:p,40:m},{4:a,5:o,8:8,9:10,10:s,11:22,14:13,15:u,16:c,17:16,18:l,20:d,21:[1,67],22:f,23:h,25:_,29:p,40:m},{21:[1,68]},{4:a,5:o,8:8,9:10,10:s,11:22,14:13,15:u,16:c,17:16,18:l,20:d,21:[2,22],22:f,23:h,25:_,28:[1,69],29:p,40:m},{21:[1,70]},{4:a,5:o,8:8,9:10,10:s,11:22,14:13,15:u,16:c,17:16,18:l,20:d,21:[2,20],22:f,23:h,25:_,27:[1,71],29:p,40:m},{11:72,40:m},{11:73,40:m},{19:74,47:g},{19:75,47:g},{19:76,47:g},{34:[1,77],47:[2,29]},{5:[1,78]},t(y,[2,16]),t(y,[2,17]),t(y,[2,18]),{13:[1,79]},t(y,[2,19]),{13:[1,80]},{19:81,47:g},{19:82,47:g},{5:[2,34]},{5:[2,24]},{5:[2,25]},{11:83,40:m},t(y,[2,9]),t(M,i,{7:56,24:84}),t(b,i,{7:58,26:85}),{5:[2,32]},{5:[2,33]},{47:[2,28]},{21:[2,23]},{21:[2,21]}],defaultActions:{5:[2,1],6:[2,2],32:[2,42],46:[2,30],47:[2,31],74:[2,34],75:[2,24],76:[2,25],81:[2,32],82:[2,33],83:[2,28],84:[2,23],85:[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="",u=0,c=0,l=0,d=1,f=a.slice.call(arguments,1),h=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);h.setInput(t,_.yy),_.yy.lexer=h,_.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var m=h.yylloc;a.push(m);var y=h.options&&h.options.ranges;"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,v,M,b,k,L,w,x,T,D,Y={};;){if(M=n[n.length-1],this.defaultActions[M]?b=this.defaultActions[M]:(null!==g&&void 0!==g||(D=void 0,"number"!=typeof(D=r.pop()||h.lex()||d)&&(D instanceof Array&&(D=(r=D).pop()),D=e.symbols_[D]||D),g=D),b=o[M]&&o[M][g]),void 0===b||!b.length||!b[0]){var S="";for(L in T=[],o[M])this.terminals_[L]&&L>2&&T.push("'"+this.terminals_[L]+"'");S=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(u+1)+": Unexpected "+(g==d?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(S,{text:h.match,token:this.terminals_[g]||g,line:h.yylineno,loc:m,expected:T})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+g);switch(b[0]){case 1:n.push(g),i.push(h.yytext),a.push(h.yylloc),n.push(b[1]),g=null,v?(g=v,v=null):(c=h.yyleng,s=h.yytext,u=h.yylineno,m=h.yylloc,l>0&&l--);break;case 2:if(w=this.productions_[b[1]][1],Y.$=i[i.length-w],Y._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},y&&(Y._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(k=this.performAction.apply(Y,[s,c,u,_.yy,b[1],i,a].concat(f))))return k;w&&(n=n.slice(0,-1*w*2),i=i.slice(0,-1*w),a=a.slice(0,-1*w)),n.push(this.productions_[b[1]][0]),i.push(Y.$),a.push(Y._$),x=o[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},w={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;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[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 5;case 1:case 2:case 3:case 4:break;case 5:return this.begin("ID"),10;case 6:return this.begin("ALIAS"),40;case 7:return this.popState(),this.popState(),this.begin("LINE"),12;case 8:return this.popState(),this.popState(),5;case 9:return this.begin("LINE"),20;case 10:return this.begin("LINE"),22;case 11:return this.begin("LINE"),23;case 12:return this.begin("LINE"),28;case 13:return this.begin("LINE"),25;case 14:return this.begin("LINE"),27;case 15:return this.popState(),13;case 16:return 21;case 17:return 35;case 18:return 36;case 19:return 31;case 20:return 29;case 21:return this.begin("ID"),15;case 22:return this.begin("ID"),16;case 23:return 18;case 24:return 6;case 25:return 34;case 26:return 5;case 27:return e.yytext=e.yytext.trim(),40;case 28:return 43;case 29:return 44;case 30:return 41;case 31:return 42;case 32:return 45;case 33:return 46;case 34:return 47;case 35:return 38;case 36:return 39;case 37:return 5;case 38:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:[^#\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,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[2,3,15],inclusive:!1},ALIAS:{rules:[2,3,7,8],inclusive:!1},ID:{rules:[2,3,6],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],inclusive:!0}}};function x(){this.yy={}}return L.lexer=w,x.prototype=L,L.Parser=x,new x}();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(7).readFileSync(n(6).normalize(r[1]),"utf8");return e.parser.parse(i)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(5),n(4)(t))},function(t,e,n){t.exports=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,{configurable:!1,enumerable:!0,get:r})},n.r=function(t){Object.defineProperty(t,"__esModule",{value:!0})},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.w={},n(n.s=27)}([function(t,e){t.exports=n(8)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.addDummyNode=o,e.simplify=s,e.asNonCompoundGraph=u,e.successorWeights=c,e.predecessorWeights=l,e.intersectRect=d,e.buildLayerMatrix=f,e.normalizeRanks=h,e.removeEmptyRanks=_,e.addBorderNode=p,e.maxRank=m,e.partition=y,e.time=g,e.notime=v;var r,i=(r=n(0))&&r.__esModule?r:{default:r},a=n(2);function o(t,e,n,r){var a=void 0;do{a=i.default.uniqueId(r)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function s(t){var e=(new a.Graph).setGraph(t.graph());return i.default.forEach(t.nodes(),function(n){e.setNode(n,t.node(n))}),i.default.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}function u(t){var e=new a.Graph({multigraph:t.isMultigraph()}).setGraph(t.graph());return i.default.forEach(t.nodes(),function(n){t.children(n).length||e.setNode(n,t.node(n))}),i.default.forEach(t.edges(),function(n){e.setEdge(n,t.edge(n))}),e}function c(t){var e=i.default.map(t.nodes(),function(e){var n={};return i.default.forEach(t.outEdges(e),function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight}),n});return i.default.zipObject(t.nodes(),e)}function l(t){var e=i.default.map(t.nodes(),function(e){var n={};return i.default.forEach(t.inEdges(e),function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight}),n});return i.default.zipObject(t.nodes(),e)}function d(t,e){var n=t.x,r=t.y,i=e.x-n,a=e.y-r,o=t.width/2,s=t.height/2;if(!i&&!a)throw new Error("Not possible to find intersection inside of the rectangle");var u=void 0,c=void 0;return Math.abs(a)*o>Math.abs(i)*s?(a<0&&(s=-s),u=s*i/a,c=s):(i<0&&(o=-o),u=o,c=o*a/i),{x:n+u,y:r+c}}function f(t){var e=i.default.map(i.default.range(m(t)+1),function(){return[]});return i.default.forEach(t.nodes(),function(n){var r=t.node(n),a=r.rank;i.default.isUndefined(a)||(e[a][r.order]=n)}),e}function h(t){var e=i.default.min(i.default.map(t.nodes(),function(e){return t.node(e).rank}));i.default.forEach(t.nodes(),function(n){var r=t.node(n);i.default.has(r,"rank")&&(r.rank-=e)})}function _(t){var e=i.default.min(i.default.map(t.nodes(),function(e){return t.node(e).rank})),n=[];i.default.forEach(t.nodes(),function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)});var r=0,a=t.graph().nodeRankFactor;i.default.forEach(n,function(e,n){i.default.isUndefined(e)&&n%a!=0?--r:r&&i.default.forEach(e,function(e){t.node(e).rank+=r})})}function p(t,e,n,r){var i={width:0,height:0};return arguments.length>=4&&(i.rank=n,i.order=r),o(t,"border",i,e)}function m(t){return i.default.max(i.default.map(t.nodes(),function(e){var n=t.node(e).rank;if(!i.default.isUndefined(n))return n}))}function y(t,e){var n={lhs:[],rhs:[]};return i.default.forEach(t,function(t){e(t)?n.lhs.push(t):n.rhs.push(t)}),n}function g(t,e){var n=i.default.now();try{return e()}finally{console.log(t+" time: "+(i.default.now()-n)+"ms")}}function v(t,e){return e()}e.default={addDummyNode:o,simplify:s,asNonCompoundGraph:u,successorWeights:c,predecessorWeights:l,intersectRect:d,buildLayerMatrix:f,normalizeRanks:h,removeEmptyRanks:_,addBorderNode:p,maxRank:m,partition:y,time:g,notime:v}},function(t,e){t.exports=n(12)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.longestPath=a,e.slack=o;var r,i=(r=n(0))&&r.__esModule?r:{default:r};function a(t){var e={};i.default.forEach(t.sources(),function n(r){var a=t.node(r);if(i.default.has(e,r))return a.rank;e[r]=!0;var o=i.default.min(i.default.map(t.outEdges(r),function(e){return n(e.w)-t.edge(e).minlen}))||0;return a.rank=o})}function o(t,e){return t.node(e.w).rank-t.node(e.v).rank-t.edge(e).minlen}e.default={longestPath:a,slack:o}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(0))&&r.__esModule?r:{default:r},a=n(2),o=n(3);function s(t,e){return i.default.forEach(t.nodes(),function n(r){i.default.forEach(e.nodeEdges(r),function(i){var a=i.v,s=r===a?i.w:a;t.hasNode(s)||(0,o.slack)(e,i)||(t.setNode(s,{}),t.setEdge(r,s,{}),n(s))})}),t.nodeCount()}function u(t,e){return i.default.minBy(e.edges(),function(n){if(t.hasNode(n.v)!==t.hasNode(n.w))return(0,o.slack)(e,n)})}function c(t,e,n){i.default.forEach(t.nodes(),function(t){e.node(t).rank+=n})}e.default=function(t){var e=new a.Graph({directed:!1}),n=t.nodes()[0],r=t.nodeCount();e.setNode(n,{});for(var i=void 0;s(e,t)<r;)i=u(e,t),c(e,t,e.hasNode(i.v)?(0,o.slack)(t,i):-(0,o.slack)(t,i));return e}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.positionX=m;var r=o(n(0)),i=n(2),a=o(n(1));function o(t){return t&&t.__esModule?t:{default:t}}function s(t,e){var n={};return r.default.reduce(e,function(e,i){var a=0,o=0,s=e.length,u=r.default.last(i);return r.default.forEach(i,function(e,l){var d=function(t,e){if(t.node(e).dummy)return r.default.find(t.predecessors(e),function(e){return t.node(e).dummy})}(t,e),f=d?t.node(d).order:s;(d||e===u)&&(r.default.forEach(i.slice(o,l+1),function(e){r.default.forEach(t.predecessors(e),function(r){var i=t.node(r),o=i.order;!(o<a||f<o)||i.dummy&&t.node(e).dummy||c(n,r,e)})}),o=l+1,a=f)}),i}),n}function u(t,e){var n={};function i(e,i,a,o,s){var u=void 0;r.default.forEach(r.default.range(i,a),function(i){u=e[i],t.node(u).dummy&&r.default.forEach(t.predecessors(u),function(e){var r=t.node(e);r.dummy&&(r.order<o||r.order>s)&&c(n,e,u)})})}return r.default.reduce(e,function(e,n){var a=-1,o=void 0,s=0;return r.default.forEach(n,function(r,u){if("border"===t.node(r).dummy){var c=t.predecessors(r);c.length&&(o=t.node(c[0]).order,i(n,s,u,a,o),s=u,a=o)}i(n,s,n.length,o,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 l(t,e,n){if(e>n){var i=e;e=n,n=i}return r.default.has(t[e],n)}function d(t,e,n,i){var a={},o={},s={};return r.default.forEach(e,function(t){r.default.forEach(t,function(t,e){a[t]=t,o[t]=t,s[t]=e})}),r.default.forEach(e,function(t){var e=-1;r.default.forEach(t,function(t){var u=i(t);if(u.length)for(var c=((u=r.default.sortBy(u,function(t){return s[t]})).length-1)/2,d=Math.floor(c),f=Math.ceil(c);d<=f;++d){var h=u[d];o[t]===t&&e<s[h]&&!l(n,t,h)&&(o[h]=t,o[t]=a[t]=a[h],e=s[h])}})}),{root:a,align:o}}function f(t,e,n,a,o){var s={},u=function(t,e,n,a){var o=new i.Graph,s=t.graph(),u=function(t,e,n){return function(i,a,o){var s=i.node(a),u=i.node(o),c=0,l=void 0;if(c+=s.width/2,r.default.has(s,"labelpos"))switch(s.labelpos.toLowerCase()){case"l":l=-s.width/2;break;case"r":l=s.width/2}if(l&&(c+=n?l:-l),l=0,c+=(s.dummy?e:t)/2,c+=(u.dummy?e:t)/2,c+=u.width/2,r.default.has(u,"labelpos"))switch(u.labelpos.toLowerCase()){case"l":l=u.width/2;break;case"r":l=-u.width/2}return l&&(c+=n?l:-l),l=0,c}}(s.nodesep,s.edgesep,a);return r.default.forEach(e,function(e){var i=void 0;r.default.forEach(e,function(e){var r=n[e];if(o.setNode(r),i){var a=n[i],s=o.edge(a,r);o.setEdge(a,r,Math.max(u(t,e,i),s||0))}i=e})}),o}(t,e,n,o),c={};r.default.forEach(u.nodes(),function t(e){r.default.has(c,e)||(c[e]=!0,s[e]=r.default.reduce(u.inEdges(e),function(e,n){return t(n.v),Math.max(e,s[n.v]+u.edge(n))},0))});var l=o?"borderLeft":"borderRight";return r.default.forEach(u.nodes(),function e(n){if(2!==c[n]){c[n]++;var i=t.node(n),a=r.default.reduce(u.outEdges(n),function(t,n){return e(n.w),Math.min(t,s[n.w]-u.edge(n))},Number.POSITIVE_INFINITY);a!==Number.POSITIVE_INFINITY&&i.borderType!==l&&(s[n]=Math.max(s[n],a))}}),r.default.forEach(a,function(t){s[t]=s[n[t]]}),s}function h(t,e){return r.default.minBy(r.default.values(e),function(e){var n=(r.default.minBy(r.default.toPairs(e),function(e){return e[1]-y(t,e[0])/2})||["k",0])[1];return(r.default.maxBy(r.default.toPairs(e),function(e){return e[1]+y(t,e[0])/2})||["k",0])[1]-n})}function _(t,e){var n=r.default.values(e),i=r.default.min(n),a=r.default.max(n);r.default.forEach(["u","d"],function(n){r.default.forEach(["l","r"],function(o){var s=n+o,u=t[s];if(u!==e){var c=r.default.values(u),l="l"===o?i-r.default.min(c):a-r.default.max(c);l&&(t[s]=r.default.mapValues(u,function(t){return t+l}))}})})}function p(t,e){return r.default.mapValues(t.ul,function(n,i){if(e)return t[e.toLowerCase()][i];var a=r.default.sortBy(r.default.map(t,i));return(a[1]+a[2])/2})}function m(t){var e=a.default.buildLayerMatrix(t),n=r.default.merge(s(t,e),u(t,e)),i={},o=void 0;r.default.forEach(["u","d"],function(a){o="u"===a?e:r.default.values(e).reverse(),r.default.forEach(["l","r"],function(e){"r"===e&&(o=r.default.map(o,function(t){return r.default.values(t).reverse()}));var s=r.default.bind("u"===a?t.predecessors:t.successors,t),u=d(0,o,n,s),c=f(t,o,u.root,u.align,"r"===e);"r"===e&&(c=r.default.mapValues(c,function(t){return-t})),i[a+e]=c})});var c=h(t,i);return _(i,c),p(i,t.graph().align)}function y(t,e){return t.node(e).width}e.default={positionX:m,findType1Conflicts:s,findType2Conflicts:u,addConflict:c,hasConflict:l,verticalAlignment:d,horizontalCompaction:f,alignCoordinates:_,findSmallestWidthAlignment:h,balance:p}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=o(n(0)),i=o(n(1)),a=n(5);function o(t){return t&&t.__esModule?t:{default:t}}e.default=function(t){(function(t){var e=i.default.buildLayerMatrix(t),n=t.graph().ranksep,a=0;r.default.forEach(e,function(e){var i=r.default.max(r.default.map(e,function(e){return t.node(e).height}));r.default.forEach(e,function(e){t.node(e).y=a+i/2}),a+=i+n})})(t=i.default.asNonCompoundGraph(t)),r.default.forEach((0,a.positionX)(t),function(e,n){t.node(n).x=e})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(0))&&r.__esModule?r:{default:r};e.default=function(t,e,n){var r={},a=void 0;i.default.forEach(n,function(n){for(var i=t.parent(n),o=void 0,s=void 0;i;){if((o=t.parent(i))?(s=r[o],r[o]=i):(s=a,a=i),s&&s!==i)return void e.setEdge(s,i);i=o}})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(0))&&r.__esModule?r:{default:r},a=n(2);e.default=function(t,e,n){var r=function(t){for(var e=void 0;t.hasNode(e=i.default.uniqueId("_root")););return e}(t),o=new a.Graph({compound:!0}).setGraph({root:r}).setDefaultNodeLabel(function(e){return t.node(e)});return i.default.forEach(t.nodes(),function(a){var s=t.node(a),u=t.parent(a);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(o.setNode(a),o.setParent(a,u||r),i.default.forEach(t[n](a),function(e){var n=e.v===a?e.w:e.v,r=o.edge(n,a),s=i.default.isUndefined(r)?0:r.weight;o.setEdge(n,a,{weight:t.edge(e).weight+s})}),i.default.has(s,"minRank")&&o.setNode(a,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))}),o}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=a(n(0)),i=a(n(1));function a(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){for(var i=void 0;e.length&&(i=r.default.last(e)).i<=n;)e.pop(),t.push(i.vs),n++;return n}e.default=function(t,e){var n,a=i.default.partition(t,function(t){return r.default.has(t,"barycenter")}),s=a.lhs,u=r.default.sortBy(a.rhs,function(t){return-t.i}),c=[],l=0,d=0,f=0;s.sort((n=!!e,function(t,e){return t.barycenter<e.barycenter?-1:t.barycenter>e.barycenter?1:n?e.i-t.i:t.i-e.i})),f=o(c,u,f),r.default.forEach(s,function(t){f+=t.vs.length,c.push(t.vs),l+=t.barycenter*t.weight,d+=t.weight,f=o(c,u,f)});var h={vs:r.default.flatten(c,!0)};return d&&(h.barycenter=l/d,h.weight=d),h}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(0))&&r.__esModule?r:{default:r};e.default=function(t,e){var n={};return i.default.forEach(t,function(t,e){var r=n[t.v]={indegree:0,in:[],out:[],vs:[t.v],i:e};i.default.isUndefined(t.barycenter)||(r.barycenter=t.barycenter,r.weight=t.weight)}),i.default.forEach(e.edges(),function(t){var e=n[t.v],r=n[t.w];i.default.isUndefined(e)||i.default.isUndefined(r)||(r.indegree++,e.out.push(n[t.w]))}),function(t){var e=[];function n(t){return function(e){var n,r,a,o;e.merged||(i.default.isUndefined(e.barycenter)||i.default.isUndefined(t.barycenter)||e.barycenter>=t.barycenter)&&(r=e,a=0,o=0,(n=t).weight&&(a+=n.barycenter*n.weight,o+=n.weight),r.weight&&(a+=r.barycenter*r.weight,o+=r.weight),n.vs=r.vs.concat(n.vs),n.barycenter=a/o,n.weight=o,n.i=Math.min(r.i,n.i),r.merged=!0)}}function r(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}for(;t.length;){var a=t.pop();e.push(a),i.default.forEach(a.in.reverse(),n(a)),i.default.forEach(a.out,r(a))}return i.default.chain(e).filter(function(t){return!t.merged}).map(function(t){return i.default.pick(t,["vs","i","barycenter","weight"])}).value()}(i.default.filter(n,function(t){return!t.indegree}))}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(0))&&r.__esModule?r:{default:r};e.default=function(t,e){return i.default.map(e,function(e){var n=t.inEdges(e);if(n.length){var r=i.default.reduce(n,function(e,n){var r=t.edge(n),i=t.node(n.v);return{sum:e.sum+r.weight*i.order,weight:e.weight+r.weight}},{sum:0,weight:0});return{v:e,barycenter:r.sum/r.weight,weight:r.weight}}return{v:e}})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=s(n(0)),i=s(n(11)),a=s(n(10)),o=s(n(9));function s(t){return t&&t.__esModule?t:{default:t}}e.default=function t(e,n,s,u){var c=e.children(n),l=e.node(n),d=l?l.borderLeft:void 0,f=l?l.borderRight:void 0,h={};d&&(c=r.default.filter(c,function(t){return t!==d&&t!==f}));var _=(0,i.default)(e,c);r.default.forEach(_,function(n){if(e.children(n.v).length){var i=t(e,n.v,s,u);h[n.v]=i,r.default.has(i,"barycenter")&&(a=n,o=i,r.default.isUndefined(a.barycenter)?(a.barycenter=o.barycenter,a.weight=o.weight):(a.barycenter=(a.barycenter*a.weight+o.barycenter*o.weight)/(a.weight+o.weight),a.weight+=o.weight))}var a,o});var p=(0,a.default)(_,s);!function(t,e){r.default.forEach(t,function(t){t.vs=r.default.flatten(t.vs.map(function(t){return e[t]?e[t].vs:t}),!0)})}(p,h);var m=(0,o.default)(p,u);if(d&&(m.vs=r.default.flatten([d,m.vs,f],!0),e.predecessors(d).length)){var y=e.node(e.predecessors(d)[0]),g=e.node(e.predecessors(f)[0]);r.default.has(m,"barycenter")||(m.barycenter=0,m.weight=0),m.barycenter=(m.barycenter*m.weight+y.order+g.order)/(m.weight+2),m.weight+=2}return m}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(0))&&r.__esModule?r:{default:r};function a(t,e,n){for(var r=i.default.zipObject(n,i.default.map(n,function(t,e){return e})),a=i.default.flatten(i.default.map(e,function(e){return i.default.chain(t.outEdges(e)).map(function(e){return{pos:r[e.w],weight:t.edge(e).weight}}).sortBy("pos").value()}),!0),o=1;o<n.length;)o<<=1;var s=2*o-1;o-=1;var u=i.default.map(new Array(s),function(){return 0}),c=0;return i.default.forEach(a.forEach(function(t){var e=t.pos+o;u[e]+=t.weight;for(var n=0;e>0;)e%2&&(n+=u[e+1]),u[e=e-1>>1]+=t.weight;c+=t.weight*n})),c}e.default=function(t,e){for(var n=0,r=1;r<e.length;++r)n+=a(t,e[r-1],e[r]);return n}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(0))&&r.__esModule?r:{default:r};e.default=function(t){var e={},n=i.default.filter(t.nodes(),function(e){return!t.children(e).length}),r=i.default.max(i.default.map(n,function(e){return t.node(e).rank})),a=i.default.map(i.default.range(r+1),function(){return[]}),o=i.default.sortBy(n,function(e){return t.node(e).rank});return i.default.forEach(o,function n(r){if(!i.default.has(e,r)){e[r]=!0;var o=t.node(r);a[o.rank].push(r),i.default.forEach(t.successors(r),n)}}),a}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=d(n(0)),i=n(2),a=d(n(14)),o=d(n(13)),s=d(n(12)),u=d(n(8)),c=d(n(7)),l=d(n(1));function d(t){return t&&t.__esModule?t:{default:t}}function f(t,e,n){return r.default.map(e,function(e){return(0,u.default)(t,e,n)})}function h(t,e){var n=new i.Graph;r.default.forEach(t,function(t){var i=t.graph().root,a=(0,s.default)(t,i,n,e);r.default.forEach(a.vs,function(e,n){t.node(e).order=n}),(0,c.default)(t,n,a.vs)})}function _(t,e){r.default.forEach(e,function(e){r.default.forEach(e,function(e,n){t.node(e).order=n})})}e.default=function(t){var e=l.default.maxRank(t),n=f(t,r.default.range(1,e+1),"inEdges"),i=f(t,r.default.range(e-1,-1,-1),"outEdges"),s=(0,a.default)(t);_(t,s);for(var u=Number.POSITIVE_INFINITY,c=void 0,d=0,p=0;p<4;++d,++p){h(d%2?n:i,d%4>=2),s=l.default.buildLayerMatrix(t);var m=(0,o.default)(t,s);m<u&&(p=0,c=r.default.cloneDeep(s),u=m)}_(t,c)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(0))&&r.__esModule?r:{default:r};function a(t){i.default.forEach(t.nodes(),function(e){o(t.node(e))}),i.default.forEach(t.edges(),function(e){o(t.edge(e))})}function o(t){var e=t.width;t.width=t.height,t.height=e}function s(t){t.y=-t.y}function u(t){var e=t.x;t.x=t.y,t.y=e}e.default={adjust:function(t){var e=t.graph().rankdir.toLowerCase();"lr"!==e&&"rl"!==e||a(t)},undo:function(t){var e=t.graph().rankdir.toLowerCase();"bt"!==e&&"rl"!==e||function(t){i.default.forEach(t.nodes(),function(e){s(t.node(e))}),i.default.forEach(t.edges(),function(e){var n=t.edge(e);i.default.forEach(n.points,s),i.default.has(n,"y")&&s(n)})}(t),"lr"!==e&&"rl"!==e||(function(t){i.default.forEach(t.nodes(),function(e){u(t.node(e))}),i.default.forEach(t.edges(),function(e){var n=t.edge(e);i.default.forEach(n.points,u),i.default.has(n,"x")&&u(n)})}(t),a(t))}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=a(n(0)),i=a(n(1));function a(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n,r,a,o){var s={width:0,height:0,rank:o,borderType:e},u=a[e][o-1],c=i.default.addDummyNode(t,"border",s,n);a[e][o]=c,t.setParent(c,r),u&&t.setEdge(u,c,{weight:1})}e.default=function(t){r.default.forEach(t.children(),function e(n){var i=t.children(n),a=t.node(n);if(i.length&&r.default.forEach(i,e),r.default.has(a,"minRank")){a.borderLeft=[],a.borderRight=[];for(var s=a.minRank,u=a.maxRank+1;s<u;++s)o(t,"borderLeft","_bl",n,a,s),o(t,"borderRight","_br",n,a,s)}})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=a(n(0)),i=a(n(1));function a(t){return t&&t.__esModule?t:{default:t}}e.default={run:function(t){var e=i.default.addDummyNode(t,"root",{},"_root"),n=function(t){var e={};return r.default.forEach(t.children(),function(n){!function n(i,a){var o=t.children(i);o&&o.length&&r.default.forEach(o,function(t){n(t,a+1)}),e[i]=a}(n,1)}),e}(t),a=r.default.max(r.default.values(n))-1,o=2*a+1;t.graph().nestingRoot=e,r.default.forEach(t.edges(),function(e){t.edge(e).minlen*=o});var s=function(t){return r.default.reduce(t.edges(),function(e,n){return e+t.edge(n).weight},0)}(t)+1;r.default.forEach(t.children(),function(u){!function t(e,n,a,o,s,u,c){var l=e.children(c);if(l.length){var d=i.default.addBorderNode(e,"_bt"),f=i.default.addBorderNode(e,"_bb"),h=e.node(c);e.setParent(d,c),h.borderTop=d,e.setParent(f,c),h.borderBottom=f,r.default.forEach(l,function(r){t(e,n,a,o,s,u,r);var i=e.node(r),l=i.borderTop?i.borderTop:r,h=i.borderBottom?i.borderBottom:r,_=i.borderTop?o:2*o,p=l!==h?1:s-u[c]+1;e.setEdge(d,l,{weight:_,minlen:p,nestingEdge:!0}),e.setEdge(h,f,{weight:_,minlen:p,nestingEdge:!0})}),e.parent(c)||e.setEdge(n,d,{weight:0,minlen:s+u[c]})}else c!==n&&e.setEdge(n,c,{weight:0,minlen:a})}(t,e,o,s,a,n,u)}),t.graph().nodeRankFactor=o},cleanup:function(t){var e=t.graph();t.removeNode(e.nestingRoot),delete e.nestingRoot,r.default.forEach(t.edges(),function(e){t.edge(e).nestingEdge&&t.removeEdge(e)})}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(0))&&r.__esModule?r:{default:r};e.default=function(t){var e=function(t){var e={},n=0;return i.default.forEach(t.children(),function r(a){var o=n;i.default.forEach(t.children(a),r),e[a]={low:o,lim:n++}}),e}(t);i.default.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=Math.min(e[n].low,e[r].low),u=Math.max(e[n].lim,e[r].lim),c=void 0;c=n;do{c=t.parent(c),a.push(c)}while(c&&(e[c].low>s||u>e[c].lim));for(i=c,c=r;(c=t.parent(c))!==i;)o.push(c);return{path:a.concat(o.reverse()),lca:i}}(t,e,i.v,i.w),o=a.path,s=a.lca,u=0,c=o[u],l=!0;n!==i.w;){if(r=t.node(n),l){for(;(c=o[u])!==s&&t.node(c).maxRank<r.rank;)u++;c===s&&(l=!1)}if(!l){for(;u<o.length-1&&t.node(c=o[u+1]).minRank<=r.rank;)u++;c=o[u]}t.setParent(n,c),n=t.successors(n)[0]}})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=u(n(0)),i=n(2),a=u(n(4)),o=n(3),s=n(1);function u(t){return t&&t.__esModule?t:{default:t}}var c=i.alg.preorder,l=i.alg.postorder;function d(t){t=(0,s.simplify)(t),(0,o.longestPath)(t);var e=(0,a.default)(t);_(e),f(e,t);for(var n=void 0;n=p(e);)y(e,t,n,m(e,t,n))}function f(t,e){var n=l(t,t.nodes());n=n.slice(0,n.length-1),r.default.forEach(n,function(n){!function(t,e,n){var r=t.node(n).parent;t.edge(n,r).cutvalue=h(t,e,n)}(t,e,n)})}function h(t,e,n){var i=t.node(n).parent,a=!0,o=e.edge(n,i),s=0;return o||(a=!1,o=e.edge(i,n)),s=o.weight,r.default.forEach(e.nodeEdges(n),function(r){var o,u,c=r.v===n,l=c?r.w:r.v;if(l!==i){var d=c===a,f=e.edge(r).weight;if(s+=d?f:-f,o=n,u=l,t.hasEdge(o,u)){var h=t.edge(n,l).cutvalue;s+=d?-h:h}}}),s}function _(t,e){arguments.length<2&&(e=t.nodes()[0]),function t(e,n,i,a,o){var s=i,u=e.node(a);return n[a]=!0,r.default.forEach(e.neighbors(a),function(o){r.default.has(n,o)||(i=t(e,n,i,o,a))}),u.low=s,u.lim=i++,o?u.parent=o:delete u.parent,i}(t,{},1,e)}function p(t){return r.default.find(t.edges(),function(e){return t.edge(e).cutvalue<0})}function m(t,e,n){var i=n.v,a=n.w;e.hasEdge(i,a)||(i=n.w,a=n.v);var s=t.node(i),u=t.node(a),c=s,l=!1;s.lim>u.lim&&(c=u,l=!0);var d=r.default.filter(e.edges(),function(e){return l===g(t,t.node(e.v),c)&&l!==g(t,t.node(e.w),c)});return r.default.minBy(d,function(t){return(0,o.slack)(e,t)})}function y(t,e,n,i){var a=n.v,o=n.w;t.removeEdge(a,o),t.setEdge(i.v,i.w,{}),_(t),f(t,e),function(t,e){var n=r.default.find(t.nodes(),function(t){return!e.node(t).parent}),i=c(t,n);i=i.slice(1),r.default.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 g(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}d.initLowLimValues=_,d.initCutValues=f,d.calcCutValue=h,d.leaveEdge=p,d.enterEdge=m,d.exchangeEdges=y,e.default=d},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=o(n(4)),a=o(n(20));function o(t){return t&&t.__esModule?t:{default:t}}var s=r.longestPath;function u(t){(0,a.default)(t)}e.default=function(t){switch(t.graph().ranker){case"network-simplex":u(t);break;case"tight-tree":!function(t){(0,r.longestPath)(t),(0,i.default)(t)}(t);break;case"longest-path":s(t);break;default:u(t)}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=a(n(0)),i=a(n(1));function a(t){return t&&t.__esModule?t:{default:t}}e.default={run:function(t){t.graph().dummyChains=[],r.default.forEach(t.edges(),function(e){!function(t,e){var n=e.v,r=t.node(n).rank,a=e.w,o=t.node(a).rank,s=e.name,u=t.edge(e),c=u.labelRank;if(o!==r+1){t.removeEdge(e);var l=void 0,d=void 0,f=void 0;for(f=0,++r;r<o;++f,++r)u.points=[],d={width:0,height:0,edgeLabel:u,edgeObj:e,rank:r},l=i.default.addDummyNode(t,"edge",d,"_d"),r===c&&(d.width=u.width,d.height=u.height,d.dummy="edge-label",d.labelpos=u.labelpos),t.setEdge(n,l,{weight:u.weight},s),0===f&&t.graph().dummyChains.push(l),n=l;t.setEdge(n,a,{weight:u.weight},s)}}(t,e)})},undo:function(t){r.default.forEach(t.graph().dummyChains,function(e){var n=t.node(e),r=n.edgeLabel,i=null;for(t.setEdge(n.edgeObj,r);n.dummy;)i=t.successors(e)[0],t.removeNode(e),r.points.push({x:n.x,y:n.y}),"edge-label"===n.dummy&&(r.x=n.x,r.y=n.y,r.width=n.width,r.height=n.height),e=i,n=t.node(e)})}}},function(t,e,n){"use strict";function r(){var t={};t._next=t._prev=t,this._sentinel=t}function i(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function a(t,e){if("_next"!==t&&"_prev"!==t)return e}Object.defineProperty(e,"__esModule",{value:!0}),r.prototype.dequeue=function(){var t=this._sentinel,e=t._prev;if(e!==t)return i(e),e},r.prototype.enqueue=function(t){var e=this._sentinel;t._prev&&t._next&&i(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e},r.prototype.toString=function(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,a)),n=n._prev;return"["+t.join(", ")+"]"},e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=o(n(0)),i=n(2),a=o(n(23));function o(t){return t&&t.__esModule?t:{default:t}}var s=r.default.constant(1);function u(t,e,n,i,a){var o=a?[]:void 0;return r.default.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.default.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)}e.default=function(t,e){if(t.nodeCount()<=1)return[];var n=function(t,e){var n=new i.Graph,o=0,s=0;r.default.forEach(t.nodes(),function(t){n.setNode(t,{v:t,in:0,out:0})}),r.default.forEach(t.edges(),function(t){var r=n.edge(t.v,t.w)||0,i=e(t),a=r+i;n.setEdge(t.v,t.w,a),s=Math.max(s,n.node(t.v).out+=i),o=Math.max(o,n.node(t.w).in+=i)});var u=r.default.range(s+o+3).map(function(){return new a.default}),l=o+1;return r.default.forEach(n.nodes(),function(t){c(u,l,n.node(t))}),{graph:n,buckets:u,zeroIdx:l}}(t,e||s),o=function(t,e,n){for(var r=[],i=e[e.length-1],a=e[0],o=void 0;t.nodeCount();){for(;o=a.dequeue();)u(t,e,n,o);for(;o=i.dequeue();)u(t,e,n,o);if(t.nodeCount())for(var s=e.length-2;s>0;--s)if(o=e[s].dequeue()){r=r.concat(u(t,e,n,o,!0));break}}return r}(n.graph,n.buckets,n.zeroIdx);return r.default.flatten(r.default.map(o,function(e){return t.outEdges(e.v,e.w)}),!0)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=a(n(0)),i=a(n(24));function a(t){return t&&t.__esModule?t:{default:t}}e.default={run:function(t){var e="greedy"===t.graph().acyclicer?(0,i.default)(t,function(t){return function(e){return t.edge(e).weight}}(t)):function(t){var e=[],n={},i={};return r.default.forEach(t.nodes(),function a(o){r.default.has(i,o)||(i[o]=!0,n[o]=!0,r.default.forEach(t.outEdges(o),function(t){r.default.has(n,t.w)?e.push(t):a(t.w)}),delete n[o])}),e}(t);r.default.forEach(e,function(e){var n=t.edge(e);t.removeEdge(e),n.forwardName=e.name,n.reversed=!0,t.setEdge(e.w,e.v,n,r.default.uniqueId("rev"))})},undo:function(t){r.default.forEach(t.edges(),function(e){var n=t.edge(e);if(n.reversed){t.removeEdge(e);var r=n.forwardName;delete n.reversed,delete n.forwardName,t.setEdge(e.w,e.v,n,r)}})}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=m(n(0)),i=n(2),a=m(n(25)),o=m(n(22)),s=m(n(21)),u=n(1),c=m(u),l=m(n(19)),d=m(n(18)),f=m(n(17)),h=m(n(16)),_=m(n(15)),p=m(n(6));function m(t){return t&&t.__esModule?t:{default:t}}var y=["nodesep","edgesep","ranksep","marginx","marginy"],g={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},v=["acyclicer","ranker","rankdir","align"],M=["width","height"],b={width:0,height:0},k=["minlen","weight","width","height","labeloffset"],L={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},w=["labelpos"];function x(t,e){return r.default.mapValues(r.default.pick(t,e),Number)}function T(t){var e={};return r.default.forEach(t,function(t,n){e[n.toLowerCase()]=t}),e}e.default=function(t,e){var n=e&&e.debugTiming?c.default.time:c.default.notime;n("layout",function(){var e=n(" buildLayoutGraph",function(){return function(t){var e=new i.Graph({multigraph:!0,compound:!0}),n=T(t.graph());return e.setGraph(r.default.merge({},g,x(n,y),r.default.pick(n,v))),r.default.forEach(t.nodes(),function(n){var i=T(t.node(n));e.setNode(n,r.default.defaults(x(i,M),b)),e.setParent(n,t.parent(n))}),r.default.forEach(t.edges(),function(n){var i=T(t.edge(n));e.setEdge(n,r.default.merge({},L,x(i,k),r.default.pick(i,w)))}),e}(t)});n(" runLayout",function(){!function(t,e){e(" makeSpaceForEdgeLabels",function(){!function(t){var e=t.graph();e.ranksep/=2,r.default.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.default.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(){a.default.run(t)}),e(" nestingGraph.run",function(){d.default.run(t)}),e(" rank",function(){(0,s.default)(c.default.asNonCompoundGraph(t))}),e(" injectEdgeLabelProxies",function(){!function(t){r.default.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};c.default.addDummyNode(t,"edge-proxy",i,"_ep")}})}(t)}),e(" removeEmptyRanks",function(){(0,u.removeEmptyRanks)(t)}),e(" nestingGraph.cleanup",function(){d.default.cleanup(t)}),e(" normalizeRanks",function(){(0,u.normalizeRanks)(t)}),e(" assignRankMinMax",function(){!function(t){var e=0;r.default.forEach(t.nodes(),function(n){var r=t.node(n);r.borderTop&&(r.minRank=t.node(r.borderTop).rank,r.maxRank=t.node(r.borderBottom).rank,e=Math.max(e,r.maxRank))}),t.graph().maxRank=e}(t)}),e(" removeEdgeLabelProxies",function(){!function(t){r.default.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(){o.default.run(t)}),e(" parentDummyChains",function(){(0,l.default)(t)}),e(" addBorderSegments",function(){(0,f.default)(t)}),e(" order",function(){(0,_.default)(t)}),e(" insertSelfEdges",function(){!function(t){var e=c.default.buildLayerMatrix(t);r.default.forEach(e,function(e){var n=0;r.default.forEach(e,function(e,i){var a=t.node(e);a.order=i+n,r.default.forEach(a.selfEdges,function(e){c.default.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(){h.default.adjust(t)}),e(" position",function(){(0,p.default)(t)}),e(" positionSelfEdges",function(){!function(t){r.default.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.default.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.default.last(n.borderLeft)),s=t.node(r.default.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.default.forEach(t.nodes(),function(e){"border"===t.node(e).dummy&&t.removeNode(e)})}(t)}),e(" normalize.undo",function(){o.default.undo(t)}),e(" fixupEdgeLabelCoords",function(){!function(t){r.default.forEach(t.edges(),function(e){var n=t.edge(e);if(r.default.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(){h.default.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,u=o.marginy||0;function c(t){var r=t.x,o=t.y,s=t.width,u=t.height;e=Math.min(e,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,o-u/2),a=Math.max(a,o+u/2)}r.default.forEach(t.nodes(),function(e){c(t.node(e))}),r.default.forEach(t.edges(),function(e){var n=t.edge(e);r.default.has(n,"x")&&c(n)}),e-=s,i-=u,r.default.forEach(t.nodes(),function(n){var r=t.node(n);r.x-=e,r.y-=i}),r.default.forEach(t.edges(),function(n){var a=t.edge(n);r.default.forEach(a.points,function(t){t.x-=e,t.y-=i}),r.default.has(a,"x")&&(a.x-=e),r.default.has(a,"y")&&(a.y-=i)}),o.width=n-e+s,o.height=a-i+u}(t)}),e(" assignNodeIntersects",function(){!function(t){r.default.forEach(t.edges(),function(e){var n=t.edge(e),r=t.node(e.v),i=t.node(e.w),a=null,o=null;n.points?(a=n.points[0],o=n.points[n.points.length-1]):(n.points=[],a=i,o=r),n.points.unshift(c.default.intersectRect(r,a)),n.points.push(c.default.intersectRect(i,o))})}(t)}),e(" reversePoints",function(){!function(t){r.default.forEach(t.edges(),function(e){var n=t.edge(e);n.reversed&&n.points.reverse()})}(t)}),e(" acyclic.undo",function(){a.default.undo(t)})}(e,n)}),n(" updateInputGraph",function(){!function(t,e){r.default.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.default.forEach(t.edges(),function(n){var i=t.edge(n),a=e.edge(n);i.points=a.points,r.default.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)})})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(26))&&r.__esModule?r:{default:r};e.default={layout:i.default}}])},function(t,e,n){"use strict";(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,3],r=[1,5],i=[1,8,9,10,11,13,18,30,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],a=[2,2],o=[1,12],s=[1,13],u=[1,14],c=[1,15],l=[1,31],d=[1,33],f=[1,22],h=[1,34],_=[1,24],p=[1,25],m=[1,26],y=[1,27],g=[1,28],v=[1,38],M=[1,40],b=[1,35],k=[1,39],L=[1,45],w=[1,44],x=[1,36],T=[1,37],D=[1,41],Y=[1,42],S=[1,43],E=[1,8,9,10,11,13,18,30,32,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],A=[1,53],C=[1,52],j=[1,54],O=[1,72],H=[1,80],P=[1,81],F=[1,66],N=[1,65],B=[1,85],R=[1,84],I=[1,82],z=[1,83],W=[1,73],q=[1,68],U=[1,67],V=[1,63],$=[1,75],G=[1,76],J=[1,77],X=[1,78],Z=[1,79],K=[1,70],Q=[1,69],tt=[8,9,11],et=[8,9,11,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64],nt=[1,115],rt=[8,9,10,11,13,15,18,36,38,40,42,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,86,88,89,91,92,94,95,96,97,98],it=[8,9,10,11,12,13,15,16,17,18,30,32,36,37,38,39,40,41,42,43,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,71,72,73,74,75,78,81,84,86,88,89,91,92,94,95,96,97,98],at=[1,117],ot=[1,118],st=[8,9,10,11,13,18,30,32,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],ut=[8,9,10,11,12,13,15,16,17,18,30,32,37,39,41,43,46,50,51,52,53,54,56,57,58,59,60,61,62,63,64,65,71,72,73,74,75,78,81,84,86,88,89,91,92,94,95,96,97,98],ct=[13,18,46,81,86,88,89,91,92,94,95,96,97,98],lt=[13,18,46,49,65,81,86,88,89,91,92,94,95,96,97,98],dt=[1,191],ft=[1,188],ht=[1,195],_t=[1,192],pt=[1,189],mt=[1,196],yt=[1,186],gt=[1,187],vt=[1,190],Mt=[1,193],bt=[1,194],kt=[1,213],Lt=[8,9,11,86],wt=[8,9,10,11,46,71,80,81,84,86,88,89,90,91,92],xt={trace:function(){},yy:{},symbols_:{error:2,mermaidDoc:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,DIR:13,FirstStmtSeperator:14,TAGEND:15,TAGSTART:16,UP:17,DOWN:18,ending:19,endToken:20,spaceList:21,spaceListNewline:22,verticeStatement:23,separator:24,styleStatement:25,linkStyleStatement:26,classDefStatement:27,classStatement:28,clickStatement:29,subgraph:30,text:31,end:32,vertex:33,link:34,alphaNum:35,SQS:36,SQE:37,PS:38,PE:39,"(-":40,"-)":41,DIAMOND_START:42,DIAMOND_STOP:43,alphaNumStatement:44,alphaNumToken:45,MINUS:46,linkStatement:47,arrowText:48,TESTSTR:49,"--":50,ARROW_POINT:51,ARROW_CIRCLE:52,ARROW_CROSS:53,ARROW_OPEN:54,"-.":55,DOTTED_ARROW_POINT:56,DOTTED_ARROW_CIRCLE:57,DOTTED_ARROW_CROSS:58,DOTTED_ARROW_OPEN:59,"==":60,THICK_ARROW_POINT:61,THICK_ARROW_CIRCLE:62,THICK_ARROW_CROSS:63,THICK_ARROW_OPEN:64,PIPE:65,textToken:66,STR:67,commentText:68,commentToken:69,keywords:70,STYLE:71,LINKSTYLE:72,CLASSDEF:73,CLASS:74,CLICK:75,textNoTags:76,textNoTagsToken:77,DEFAULT:78,stylesOpt:79,HEX:80,NUM:81,INTERPOLATE:82,commentStatement:83,PCT:84,style:85,COMMA:86,styleComponent:87,ALPHA:88,COLON:89,UNIT:90,BRKT:91,DOT:92,graphCodeTokens:93,PUNCTUATION:94,UNICODE_TEXT:95,PLUS:96,EQUALS:97,MULT:98,TAG_START:99,TAG_END:100,QUOTE:101,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"DIR",15:"TAGEND",16:"TAGSTART",17:"UP",18:"DOWN",30:"subgraph",32:"end",36:"SQS",37:"SQE",38:"PS",39:"PE",40:"(-",41:"-)",42:"DIAMOND_START",43:"DIAMOND_STOP",46:"MINUS",49:"TESTSTR",50:"--",51:"ARROW_POINT",52:"ARROW_CIRCLE",53:"ARROW_CROSS",54:"ARROW_OPEN",55:"-.",56:"DOTTED_ARROW_POINT",57:"DOTTED_ARROW_CIRCLE",58:"DOTTED_ARROW_CROSS",59:"DOTTED_ARROW_OPEN",60:"==",61:"THICK_ARROW_POINT",62:"THICK_ARROW_CIRCLE",63:"THICK_ARROW_CROSS",64:"THICK_ARROW_OPEN",65:"PIPE",67:"STR",71:"STYLE",72:"LINKSTYLE",73:"CLASSDEF",74:"CLASS",75:"CLICK",78:"DEFAULT",80:"HEX",81:"NUM",82:"INTERPOLATE",84:"PCT",86:"COMMA",88:"ALPHA",89:"COLON",90:"UNIT",91:"BRKT",92:"DOT",94:"PUNCTUATION",95:"UNICODE_TEXT",96:"PLUS",97:"EQUALS",98:"MULT",99:"TAG_START",100:"TAG_END",101:"QUOTE"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,4],[4,4],[4,4],[4,4],[4,4],[19,2],[19,1],[20,1],[20,1],[20,1],[14,1],[14,1],[14,2],[22,2],[22,2],[22,1],[22,1],[21,2],[21,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,5],[7,4],[24,1],[24,1],[24,1],[23,3],[23,1],[33,4],[33,5],[33,6],[33,7],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,1],[33,2],[35,1],[35,2],[44,1],[44,1],[44,1],[44,1],[34,2],[34,3],[34,3],[34,1],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[48,3],[31,1],[31,2],[31,1],[68,1],[68,2],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[76,1],[76,2],[27,5],[27,5],[28,5],[29,5],[29,7],[29,5],[29,7],[25,5],[25,5],[26,5],[26,5],[26,9],[26,9],[26,7],[26,7],[83,3],[79,1],[79,3],[85,1],[85,2],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[69,1],[69,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[77,1],[77,1],[77,1],[77,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 2:this.$=[];break;case 3:a[s]!==[]&&a[s-1].push(a[s]),this.$=a[s-1];break;case 4:case 57:case 59:case 60:case 92:case 94:case 95:case 108:this.$=a[s];break;case 11:r.setDirection(a[s-1]),this.$=a[s-1];break;case 12:r.setDirection("LR"),this.$=a[s-1];break;case 13:r.setDirection("RL"),this.$=a[s-1];break;case 14:r.setDirection("BT"),this.$=a[s-1];break;case 15:r.setDirection("TB"),this.$=a[s-1];break;case 30:this.$=a[s-1];break;case 31:case 32:case 33:case 34:case 35:this.$=[];break;case 36:this.$=r.addSubGraph(a[s-1],a[s-3]);break;case 37:this.$=r.addSubGraph(a[s-1],void 0);break;case 41:r.addLink(a[s-2],a[s],a[s-1]),this.$=[a[s-2],a[s]];break;case 42:this.$=[a[s]];break;case 43:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"square");break;case 44:this.$=a[s-4],r.addVertex(a[s-4],a[s-2],"square");break;case 45:this.$=a[s-5],r.addVertex(a[s-5],a[s-2],"circle");break;case 46:this.$=a[s-6],r.addVertex(a[s-6],a[s-3],"circle");break;case 47:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"ellipse");break;case 48:this.$=a[s-4],r.addVertex(a[s-4],a[s-2],"ellipse");break;case 49:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"round");break;case 50:this.$=a[s-4],r.addVertex(a[s-4],a[s-2],"round");break;case 51:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"diamond");break;case 52:this.$=a[s-4],r.addVertex(a[s-4],a[s-2],"diamond");break;case 53:this.$=a[s-3],r.addVertex(a[s-3],a[s-1],"odd");break;case 54:this.$=a[s-4],r.addVertex(a[s-4],a[s-2],"odd");break;case 55:this.$=a[s],r.addVertex(a[s]);break;case 56:this.$=a[s-1],r.addVertex(a[s-1]);break;case 58:case 93:case 96:case 109:this.$=a[s-1]+""+a[s];break;case 61:this.$="v";break;case 62:this.$="-";break;case 63:a[s-1].text=a[s],this.$=a[s-1];break;case 64:case 65:a[s-2].text=a[s-1],this.$=a[s-2];break;case 66:this.$=a[s];break;case 67:this.$={type:"arrow",stroke:"normal",text:a[s-1]};break;case 68:this.$={type:"arrow_circle",stroke:"normal",text:a[s-1]};break;case 69:this.$={type:"arrow_cross",stroke:"normal",text:a[s-1]};break;case 70:this.$={type:"arrow_open",stroke:"normal",text:a[s-1]};break;case 71:this.$={type:"arrow",stroke:"dotted",text:a[s-1]};break;case 72:this.$={type:"arrow_circle",stroke:"dotted",text:a[s-1]};break;case 73:this.$={type:"arrow_cross",stroke:"dotted",text:a[s-1]};break;case 74:this.$={type:"arrow_open",stroke:"dotted",text:a[s-1]};break;case 75:this.$={type:"arrow",stroke:"thick",text:a[s-1]};break;case 76:this.$={type:"arrow_circle",stroke:"thick",text:a[s-1]};break;case 77:this.$={type:"arrow_cross",stroke:"thick",text:a[s-1]};break;case 78:this.$={type:"arrow_open",stroke:"thick",text:a[s-1]};break;case 79:this.$={type:"arrow",stroke:"normal"};break;case 80:this.$={type:"arrow_circle",stroke:"normal"};break;case 81:this.$={type:"arrow_cross",stroke:"normal"};break;case 82:this.$={type:"arrow_open",stroke:"normal"};break;case 83:this.$={type:"arrow",stroke:"dotted"};break;case 84:this.$={type:"arrow_circle",stroke:"dotted"};break;case 85:this.$={type:"arrow_cross",stroke:"dotted"};break;case 86:this.$={type:"arrow_open",stroke:"dotted"};break;case 87:this.$={type:"arrow",stroke:"thick"};break;case 88:this.$={type:"arrow_circle",stroke:"thick"};break;case 89:this.$={type:"arrow_cross",stroke:"thick"};break;case 90:this.$={type:"arrow_open",stroke:"thick"};break;case 91:this.$=a[s-1];break;case 110:case 111:this.$=a[s-4],r.addClass(a[s-2],a[s]);break;case 112:this.$=a[s-4],r.setClass(a[s-2],a[s]);break;case 113:this.$=a[s-4],r.setClickEvent(a[s-2],a[s],void 0,void 0);break;case 114:this.$=a[s-6],r.setClickEvent(a[s-4],a[s-2],void 0,a[s]);break;case 115:this.$=a[s-4],r.setClickEvent(a[s-2],void 0,a[s],void 0);break;case 116:this.$=a[s-6],r.setClickEvent(a[s-4],void 0,a[s-2],a[s]);break;case 117:this.$=a[s-4],r.addVertex(a[s-2],void 0,void 0,a[s]);break;case 118:case 119:case 120:this.$=a[s-4],r.updateLink(a[s-2],a[s]);break;case 121:case 122:this.$=a[s-8],r.updateLinkInterpolate(a[s-6],a[s-2]),r.updateLink(a[s-6],a[s]);break;case 123:case 124:this.$=a[s-6],r.updateLinkInterpolate(a[s-4],a[s]);break;case 126:this.$=[a[s]];break;case 127:a[s-2].push(a[s]),this.$=a[s-2];break;case 129:this.$=a[s-1]+a[s]}},table:[{3:1,4:2,9:e,10:n,12:r},{1:[3]},t(i,a,{5:6}),{4:7,9:e,10:n,12:r},{4:8,9:e,10:n,12:r},{10:[1,9]},{1:[2,1],6:10,7:11,8:o,9:s,10:u,11:c,13:l,18:d,23:16,25:17,26:18,27:19,28:20,29:21,30:f,33:23,35:29,44:30,45:32,46:h,71:_,72:p,73:m,74:y,75:g,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},t(i,[2,9]),t(i,[2,10]),{13:[1,46],15:[1,47],16:[1,48],17:[1,49],18:[1,50]},t(E,[2,3]),t(E,[2,4]),t(E,[2,5]),t(E,[2,6]),t(E,[2,7]),t(E,[2,8]),{8:A,9:C,11:j,24:51},{8:A,9:C,11:j,24:55},{8:A,9:C,11:j,24:56},{8:A,9:C,11:j,24:57},{8:A,9:C,11:j,24:58},{8:A,9:C,11:j,24:59},{8:A,9:C,10:O,11:j,12:H,13:P,15:F,16:N,17:B,18:R,24:61,30:I,31:60,32:z,45:71,46:W,50:q,60:U,66:62,67:V,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},t(tt,[2,42],{34:86,47:87,50:[1,88],51:[1,91],52:[1,92],53:[1,93],54:[1,94],55:[1,89],56:[1,95],57:[1,96],58:[1,97],59:[1,98],60:[1,90],61:[1,99],62:[1,100],63:[1,101],64:[1,102]}),{10:[1,103]},{10:[1,104]},{10:[1,105]},{10:[1,106]},{10:[1,107]},t(et,[2,55],{45:32,21:113,44:114,10:nt,13:l,15:[1,112],18:d,36:[1,108],38:[1,109],40:[1,110],42:[1,111],46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S}),t(rt,[2,57]),t(rt,[2,59]),t(rt,[2,60]),t(rt,[2,61]),t(rt,[2,62]),t(it,[2,154]),t(it,[2,155]),t(it,[2,156]),t(it,[2,157]),t(it,[2,158]),t(it,[2,159]),t(it,[2,160]),t(it,[2,161]),t(it,[2,162]),t(it,[2,163]),t(it,[2,164]),{8:at,9:ot,10:nt,14:116,21:119},{8:at,9:ot,10:nt,14:120,21:119},{8:at,9:ot,10:nt,14:121,21:119},{8:at,9:ot,10:nt,14:122,21:119},{8:at,9:ot,10:nt,14:123,21:119},t(E,[2,30]),t(E,[2,38]),t(E,[2,39]),t(E,[2,40]),t(E,[2,31]),t(E,[2,32]),t(E,[2,33]),t(E,[2,34]),t(E,[2,35]),{8:A,9:C,10:O,11:j,12:H,13:P,15:F,16:N,17:B,18:R,24:124,30:I,32:z,45:71,46:W,50:q,60:U,66:125,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},t(st,a,{5:126}),t(ut,[2,92]),t(ut,[2,94]),t(ut,[2,143]),t(ut,[2,144]),t(ut,[2,145]),t(ut,[2,146]),t(ut,[2,147]),t(ut,[2,148]),t(ut,[2,149]),t(ut,[2,150]),t(ut,[2,151]),t(ut,[2,152]),t(ut,[2,153]),t(ut,[2,97]),t(ut,[2,98]),t(ut,[2,99]),t(ut,[2,100]),t(ut,[2,101]),t(ut,[2,102]),t(ut,[2,103]),t(ut,[2,104]),t(ut,[2,105]),t(ut,[2,106]),t(ut,[2,107]),{13:l,18:d,33:127,35:29,44:30,45:32,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},t(ct,[2,66],{48:128,49:[1,129],65:[1,130]}),{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,31:131,32:z,45:71,46:W,50:q,60:U,66:62,67:V,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,31:132,32:z,45:71,46:W,50:q,60:U,66:62,67:V,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,31:133,32:z,45:71,46:W,50:q,60:U,66:62,67:V,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},t(lt,[2,79]),t(lt,[2,80]),t(lt,[2,81]),t(lt,[2,82]),t(lt,[2,83]),t(lt,[2,84]),t(lt,[2,85]),t(lt,[2,86]),t(lt,[2,87]),t(lt,[2,88]),t(lt,[2,89]),t(lt,[2,90]),{13:l,18:d,35:134,44:30,45:32,46:h,80:[1,135],81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{78:[1,136],81:[1,137]},{13:l,18:d,35:139,44:30,45:32,46:h,78:[1,138],81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{13:l,18:d,35:140,44:30,45:32,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{13:l,18:d,35:141,44:30,45:32,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,31:142,32:z,45:71,46:W,50:q,60:U,66:62,67:V,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,31:144,32:z,38:[1,143],45:71,46:W,50:q,60:U,66:62,67:V,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,31:145,32:z,45:71,46:W,50:q,60:U,66:62,67:V,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,31:146,32:z,45:71,46:W,50:q,60:U,66:62,67:V,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,31:147,32:z,45:71,46:W,50:q,60:U,66:62,67:V,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},t(et,[2,56]),t(rt,[2,58]),t(et,[2,29],{21:148,10:nt}),t(i,[2,11]),t(i,[2,21]),t(i,[2,22]),{9:[1,149]},t(i,[2,12]),t(i,[2,13]),t(i,[2,14]),t(i,[2,15]),t(st,a,{5:150}),t(ut,[2,93]),{6:10,7:11,8:o,9:s,10:u,11:c,13:l,18:d,23:16,25:17,26:18,27:19,28:20,29:21,30:f,32:[1,151],33:23,35:29,44:30,45:32,46:h,71:_,72:p,73:m,74:y,75:g,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},t(tt,[2,41]),t(ct,[2,63],{10:[1,152]}),{10:[1,153]},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,31:154,32:z,45:71,46:W,50:q,60:U,66:62,67:V,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,32:z,45:71,46:W,50:q,51:[1,155],52:[1,156],53:[1,157],54:[1,158],60:U,66:125,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,32:z,45:71,46:W,50:q,56:[1,159],57:[1,160],58:[1,161],59:[1,162],60:U,66:125,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,32:z,45:71,46:W,50:q,60:U,61:[1,163],62:[1,164],63:[1,165],64:[1,166],66:125,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:[1,167],13:l,18:d,44:114,45:32,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:[1,168]},{10:[1,169]},{10:[1,170]},{10:[1,171]},{10:[1,172],13:l,18:d,44:114,45:32,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:[1,173],13:l,18:d,44:114,45:32,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:[1,174],13:l,18:d,44:114,45:32,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,32:z,37:[1,175],45:71,46:W,50:q,60:U,66:125,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,31:176,32:z,45:71,46:W,50:q,60:U,66:62,67:V,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,32:z,39:[1,177],45:71,46:W,50:q,60:U,66:125,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,32:z,41:[1,178],45:71,46:W,50:q,60:U,66:125,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,32:z,43:[1,179],45:71,46:W,50:q,60:U,66:125,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,32:z,37:[1,180],45:71,46:W,50:q,60:U,66:125,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},t(et,[2,28]),t(i,[2,23]),{6:10,7:11,8:o,9:s,10:u,11:c,13:l,18:d,23:16,25:17,26:18,27:19,28:20,29:21,30:f,32:[1,181],33:23,35:29,44:30,45:32,46:h,71:_,72:p,73:m,74:y,75:g,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},t(E,[2,37]),t(ct,[2,65]),t(ct,[2,64]),{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,32:z,45:71,46:W,50:q,60:U,65:[1,182],66:125,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},t(ct,[2,67]),t(ct,[2,68]),t(ct,[2,69]),t(ct,[2,70]),t(ct,[2,71]),t(ct,[2,72]),t(ct,[2,73]),t(ct,[2,74]),t(ct,[2,75]),t(ct,[2,76]),t(ct,[2,77]),t(ct,[2,78]),{10:dt,46:ft,71:ht,79:183,80:_t,81:pt,84:mt,85:184,87:185,88:yt,89:gt,90:vt,91:Mt,92:bt},{10:dt,46:ft,71:ht,79:197,80:_t,81:pt,84:mt,85:184,87:185,88:yt,89:gt,90:vt,91:Mt,92:bt},{10:dt,46:ft,71:ht,79:198,80:_t,81:pt,82:[1,199],84:mt,85:184,87:185,88:yt,89:gt,90:vt,91:Mt,92:bt},{10:dt,46:ft,71:ht,79:200,80:_t,81:pt,82:[1,201],84:mt,85:184,87:185,88:yt,89:gt,90:vt,91:Mt,92:bt},{10:dt,46:ft,71:ht,79:202,80:_t,81:pt,84:mt,85:184,87:185,88:yt,89:gt,90:vt,91:Mt,92:bt},{10:dt,46:ft,71:ht,79:203,80:_t,81:pt,84:mt,85:184,87:185,88:yt,89:gt,90:vt,91:Mt,92:bt},{13:l,18:d,35:204,44:30,45:32,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{13:l,18:d,35:205,44:30,45:32,46:h,67:[1,206],81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},t(et,[2,43],{21:207,10:nt}),{10:O,12:H,13:P,15:F,16:N,17:B,18:R,30:I,32:z,39:[1,208],45:71,46:W,50:q,60:U,66:125,70:74,71:$,72:G,73:J,74:X,75:Z,77:64,78:K,81:v,84:Q,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},t(et,[2,49],{21:209,10:nt}),t(et,[2,47],{21:210,10:nt}),t(et,[2,51],{21:211,10:nt}),t(et,[2,53],{21:212,10:nt}),t(E,[2,36]),t([10,13,18,46,81,86,88,89,91,92,94,95,96,97,98],[2,91]),t(tt,[2,117],{86:kt}),t(Lt,[2,126],{87:214,10:dt,46:ft,71:ht,80:_t,81:pt,84:mt,88:yt,89:gt,90:vt,91:Mt,92:bt}),t(wt,[2,128]),t(wt,[2,130]),t(wt,[2,131]),t(wt,[2,132]),t(wt,[2,133]),t(wt,[2,134]),t(wt,[2,135]),t(wt,[2,136]),t(wt,[2,137]),t(wt,[2,138]),t(wt,[2,139]),t(wt,[2,140]),t(tt,[2,118],{86:kt}),t(tt,[2,119],{86:kt}),{10:[1,215]},t(tt,[2,120],{86:kt}),{10:[1,216]},t(tt,[2,110],{86:kt}),t(tt,[2,111],{86:kt}),t(tt,[2,112],{45:32,44:114,13:l,18:d,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S}),t(tt,[2,113],{45:32,44:114,10:[1,217],13:l,18:d,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S}),t(tt,[2,115],{10:[1,218]}),t(et,[2,44]),{39:[1,219]},t(et,[2,50]),t(et,[2,48]),t(et,[2,52]),t(et,[2,54]),{10:dt,46:ft,71:ht,80:_t,81:pt,84:mt,85:220,87:185,88:yt,89:gt,90:vt,91:Mt,92:bt},t(wt,[2,129]),{13:l,18:d,35:221,44:30,45:32,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{13:l,18:d,35:222,44:30,45:32,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S},{67:[1,223]},{67:[1,224]},t(et,[2,45],{21:225,10:nt}),t(Lt,[2,127],{87:214,10:dt,46:ft,71:ht,80:_t,81:pt,84:mt,88:yt,89:gt,90:vt,91:Mt,92:bt}),t(tt,[2,123],{45:32,44:114,10:[1,226],13:l,18:d,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S}),t(tt,[2,124],{45:32,44:114,10:[1,227],13:l,18:d,46:h,81:v,86:M,88:b,89:k,91:L,92:w,94:x,95:T,96:D,97:Y,98:S}),t(tt,[2,114]),t(tt,[2,116]),t(et,[2,46]),{10:dt,46:ft,71:ht,79:228,80:_t,81:pt,84:mt,85:184,87:185,88:yt,89:gt,90:vt,91:Mt,92:bt},{10:dt,46:ft,71:ht,79:229,80:_t,81:pt,84:mt,85:184,87:185,88:yt,89:gt,90:vt,91:Mt,92:bt},t(tt,[2,121],{86:kt}),t(tt,[2,122],{86:kt})],defaultActions:{},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="",u=0,c=0,l=0,d=1,f=a.slice.call(arguments,1),h=Object.create(this.lexer),_={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(_.yy[p]=this.yy[p]);h.setInput(t,_.yy),_.yy.lexer=h,_.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var m=h.yylloc;a.push(m);var y=h.options&&h.options.ranges;"function"==typeof _.yy.parseError?this.parseError=_.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var g,v,M,b,k,L,w,x,T,D,Y={};;){if(M=n[n.length-1],this.defaultActions[M]?b=this.defaultActions[M]:(null!==g&&void 0!==g||(D=void 0,"number"!=typeof(D=r.pop()||h.lex()||d)&&(D instanceof Array&&(D=(r=D).pop()),D=e.symbols_[D]||D),g=D),b=o[M]&&o[M][g]),void 0===b||!b.length||!b[0]){var S="";for(L in T=[],o[M])this.terminals_[L]&&L>2&&T.push("'"+this.terminals_[L]+"'");S=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[g]||g)+"'":"Parse error on line "+(u+1)+": Unexpected "+(g==d?"end of input":"'"+(this.terminals_[g]||g)+"'"),this.parseError(S,{text:h.match,token:this.terminals_[g]||g,line:h.yylineno,loc:m,expected:T})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+M+", token: "+g);switch(b[0]){case 1:n.push(g),i.push(h.yytext),a.push(h.yylloc),n.push(b[1]),g=null,v?(g=v,v=null):(c=h.yyleng,s=h.yytext,u=h.yylineno,m=h.yylloc,l>0&&l--);break;case 2:if(w=this.productions_[b[1]][1],Y.$=i[i.length-w],Y._$={first_line:a[a.length-(w||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(w||1)].first_column,last_column:a[a.length-1].last_column},y&&(Y._$.range=[a[a.length-(w||1)].range[0],a[a.length-1].range[1]]),void 0!==(k=this.performAction.apply(Y,[s,c,u,_.yy,b[1],i,a].concat(f))))return k;w&&(n=n.slice(0,-1*w*2),i=i.slice(0,-1*w),a=a.slice(0,-1*w)),n.push(this.productions_[b[1]][0]),i.push(Y.$),a.push(Y._$),x=o[n[n.length-2]][n[n.length-1]],n.push(x);break;case 3:return!0}}return!0}},Tt={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;a<i.length;a++)if((n=this._input.match(this.rules[i[a]]))&&(!e||n[0].length>e[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:break;case 1:this.begin("string");break;case 2:this.popState();break;case 3:return"STR";case 4:return 71;case 5:return 78;case 6:return 72;case 7:return 82;case 8:return 73;case 9:return 74;case 10:return 75;case 11:return 12;case 12:return 30;case 13:return 32;case 14:case 15:case 16:case 17:case 18:case 19:return 13;case 20:return 81;case 21:return 91;case 22:return 89;case 23:return 8;case 24:return 86;case 25:return 98;case 26:return 16;case 27:return 15;case 28:return 17;case 29:return 18;case 30:return 53;case 31:return 51;case 32:return 52;case 33:return 54;case 34:return 58;case 35:return 56;case 36:return 57;case 37:return 59;case 38:return 58;case 39:return 56;case 40:return 57;case 41:return 59;case 42:return 63;case 43:return 61;case 44:return 62;case 45:return 64;case 46:return 50;case 47:return 55;case 48:return 60;case 49:return 40;case 50:return 41;case 51:return 46;case 52:return 92;case 53:return 96;case 54:return 84;case 55:case 56:return 97;case 57:return 88;case 58:return 94;case 59:return 95;case 60:return 65;case 61:return 38;case 62:return 39;case 63:return 36;case 64:return 37;case 65:return 42;case 66:return 43;case 67:return 101;case 68:return 9;case 69:return 10;case 70:return 11}},rules:[/^(?:%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:v\b)/,/^(?:\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*==[x]\s*)/,/^(?:\s*==>\s*)/,/^(?:\s*==[o]\s*)/,/^(?:\s*==[\=]\s*)/,/^(?:\s*--\s*)/,/^(?:\s*-\.\s*)/,/^(?:\s*==\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[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])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\n+)/,/^(?:\s)/,/^(?:$)/],conditions:{string:{rules:[2,3],inclusive:!1},INITIAL:{rules:[0,1,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,33,34,35,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],inclusive:!0}}};function Dt(){this.yy={}}return xt.lexer=Tt,Dt.prototype=xt,xt.Parser=Dt,new Dt}();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(7).readFileSync(n(6).normalize(r[1]),"utf8");return e.parser.parse(i)},void 0!==r&&n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(5),n(4)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getSubGraphs=e.indexNodes=e.getDepthFirstPos=e.addSubGraph=e.defaultStyle=e.clear=e.getClasses=e.getEdges=e.getVertices=e.getDirection=e.bindFunctions=e.setClickEvent=e.getTooltip=e.setClass=e.setDirection=e.addClass=e.updateLink=e.updateLinkInterpolate=e.addLink=e.addVertex=void 0;var r,i="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},a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(3)),o=n(2),s=n(10),u=(r=s)&&r.__esModule?r:{default:r};var c={},l=[],d=[],f=[],h={},_=0,p=void 0,m=[],y=e.addVertex=function(t,e,n,r){var i=void 0;void 0!==t&&0!==t.trim().length&&(void 0===c[t]&&(c[t]={id:t,styles:[],classes:[]}),void 0!==e&&('"'===(i=e.trim())[0]&&'"'===i[i.length-1]&&(i=i.substring(1,i.length-1)),c[t].text=i),void 0!==n&&(c[t].type=n),void 0!==n&&(c[t].type=n),void 0!==r&&null!==r&&r.forEach(function(e){c[t].styles.push(e)}))},g=e.addLink=function(t,e,n,r){o.logger.info("Got edge...",t,e);var i={start:t,end:e,type:void 0,text:""};void 0!==(r=n.text)&&(i.text=r.trim(),'"'===i.text[0]&&'"'===i.text[i.text.length-1]&&(i.text=i.text.substring(1,i.text.length-1))),void 0!==n&&(i.type=n.type,i.stroke=n.stroke),l.push(i)},v=e.updateLinkInterpolate=function(t,e){"default"===t?l.defaultInterpolate=e:l[t].interpolate=e},M=e.updateLink=function(t,e){"default"===t?l.defaultStyle=e:(-1===u.default.isSubstringInArray("fill",e)&&e.push("fill:none"),l[t].style=e)},b=e.addClass=function(t,e){void 0===d[t]&&(d[t]={id:t,styles:[]}),void 0!==e&&null!==e&&e.forEach(function(e){d[t].styles.push(e)})},k=e.setDirection=function(t){p=t},L=e.setClass=function(t,e){t.indexOf(",")>0?t.split(",").forEach(function(t){void 0!==c[t]&&c[t].classes.push(e)}):void 0!==c[t]&&c[t].classes.push(e)},w=function(t,e){void 0!==e&&(h[t]=e)},x=function(t,e){void 0!==e&&void 0!==c[t]&&m.push(function(n){var r=a.select(n).select('[id="'+t+'"]');null!==r&&r.on("click",function(){window[e](t)})})},T=function(t,e){void 0!==e&&void 0!==c[t]&&m.push(function(n){var r=a.select(n).select('[id="'+t+'"]');null!==r&&r.on("click",function(){window.open(e,"newTab")})})},D=e.getTooltip=function(t){return h[t]},Y=e.setClickEvent=function(t,e,n,r){t.indexOf(",")>0?t.split(",").forEach(function(i){w(i,r),x(i,e),T(i,n),L(t,"clickable")}):(w(t,r),x(t,e),T(t,n),L(t,"clickable"))},S=e.bindFunctions=function(t){m.forEach(function(e){e(t)})},E=e.getDirection=function(){return p},A=e.getVertices=function(){return c},C=e.getEdges=function(){return l},j=e.getClasses=function(){return d},O=function(t){var e=a.select(".mermaidTooltip");null===(e._groups||e)[0][0]&&(e=a.select("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),a.select(t).select("svg").selectAll("g.node").on("mouseover",function(){var t=a.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",n.left+(n.right-n.left)/2+"px").style("top",n.top-14+document.body.scrollTop+"px"),t.classed("hover",!0)}}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),a.select(this).classed("hover",!1)})};m.push(O);var H=e.clear=function(){c={},d={},l=[],(m=[]).push(O),f=[],_=0,h=[]},P=e.defaultStyle=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},F=e.addSubGraph=function(t,e){var n,r,a,o=[];n=o.concat.apply(o,t),r={boolean:{},number:{},string:{}},a=[],o=n.filter(function(t){var e=void 0===t?"undefined":i(t);return""!==t.trim()&&(e in r?!r[e].hasOwnProperty(t)&&(r[e][t]=!0):!(a.indexOf(t)>=0)&&a.push(t))});var s={id:"subGraph"+_,nodes:o,title:e.trim()};return f.push(s),_+=1,s.id},N=function(t){for(var e=0;e<f.length;e++)if(f[e].id===t)return e;return-1},B=-1,R=[],I=e.getDepthFirstPos=function(t){return R[t]},z=e.indexNodes=function(){B=-1,f.length>0&&function t(e,n){var r=f[n].nodes;if(!((B+=1)>2e3)){if(R[B]=n,f[n].id===e)return{result:!0,count:0};for(var i=0,a=1;i<r.length;){var o=N(r[i]);if(o>=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",f.length-1)},W=e.getSubGraphs=function(){return f};e.default={addVertex:y,addLink:g,updateLinkInterpolate:v,updateLink:M,addClass:b,setDirection:k,setClass:L,getTooltip:D,setClickEvent:Y,bindFunctions:S,getDirection:E,getVertices:A,getEdges:C,getClasses:j,clear:H,defaultStyle:P,addSubGraph:F,getDepthFirstPos:I,indexNodes:z,getSubGraphs:W}},function(t,e,n){var r=n(1);t.exports=function(t,e,n){r.isArray(e)||(e=[e]);var i=(t.isDirected()?t.successors:t.neighbors).bind(t);const a=[],o={};return r.each(e,function(e){if(!t.hasNode(e))throw new Error("Graph does not have node: "+e);!function t(e,n,i,a,o,s){r.has(a,n)||(a[n]=!0,i||s.push(n),r.each(o(n),function(n){t(e,n,i,a,o,s)}),i&&s.push(n))}(t,e,"post"===n,o,i,a)}),a}},function(t,e,n){const r=n(1);function i(t){const e={},n={},i=[];if(r.each(t.sinks(),function o(s){if(r.has(n,s))throw new a;r.has(e,s)||(n[s]=!0,e[s]=!0,r.each(t.predecessors(s),o),delete n[s],i.push(s))}),r.size(e)!==t.nodeCount())throw new a;return i}function a(){}t.exports=i,i.CycleException=a,a.prototype=new Error},function(t,e,n){var r=n(1);t.exports=function(t){let e=0;const n=[],i={},a=[];return t.nodes().forEach(function(o){r.has(i,o)||function o(s){var u=i[s]={onStack:!0,lowlink:e,index:e++};if(n.push(s),t.successors(s).forEach(function(t){r.has(i,t)?i[t].onStack&&(u.lowlink=Math.min(u.lowlink,i[t].index)):(o(t),u.lowlink=Math.min(u.lowlink,i[t].lowlink))}),u.lowlink===u.index){const t=[];let e;do{e=n.pop(),i[e].onStack=!1,t.push(e)}while(s!==e);a.push(t)}}(o)}),a}},function(t,e,n){const r=n(1);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){const e=this._arr,n=2*t,r=n+1;let i=t;n<e.length&&(i=e[n].priority<e[i].priority?n:i,r<e.length&&(i=e[r].priority<e[i].priority?r:i),i!==t&&(this._swap(t,i),this._heapify(i)))},i.prototype._decrease=function(t){for(var e,n=this._arr,r=n[t].priority;0!==t&&!(n[e=t>>1].priority<r);)this._swap(t,e),t=e},i.prototype._swap=function(t,e){var n=this._arr,r=this._keyIndices,i=n[t],a=n[e];n[t]=a,n[e]=i,r[a.key]=t,r[i.key]=e}},function(t,e,n){const r=n(1),i=n(27);t.exports=function(t,e,n,r){return function(t,e,n,r){const a={},o=new i;let s,u;var c=function(t){const e=t.v!==s?t.v:t.w,r=a[e],i=n(t),c=u.distance+i;if(i<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+t+" Weight: "+i);c<r.distance&&(r.distance=c,r.predecessor=s,o.decrease(e,c))};t.nodes().forEach(function(t){var n=t===e?0:Number.POSITIVE_INFINITY;a[t]={distance:n},o.add(t,n)});for(;o.size()>0&&(s=o.removeMin(),(u=a[s]).distance!==Number.POSITIVE_INFINITY);)r(s).forEach(c);return a}(t,String(e),n||a,r||function(e){return t.outEdges(e)})};var a=r.constant(1)},function(t,e,n){!function(t){"use strict";t.defineLocale("zh-tw",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("zh-hk",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"週日_週一_週二_週三_週四_週五_週六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日dddd HH:mm",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"中午"===e?t>=11?t:t+12:"下午"===e||"晚上"===e?t+12:void 0},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|週)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"週";default:return t}},relativeTime:{future:"%s內",past:"%s前",s:"幾秒",ss:"%d 秒",m:"1 分鐘",mm:"%d 分鐘",h:"1 小時",hh:"%d 小時",d:"1 天",dd:"%d 天",M:"1 個月",MM:"%d 個月",y:"1 年",yy:"%d 年"}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("zh-cn",{months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},meridiemParse:/凌晨|早上|上午|中午|下午|晚上/,meridiemHour:function(t,e){return 12===t&&(t=0),"凌晨"===e||"早上"===e||"上午"===e?t:"下午"===e||"晚上"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var r=100*t+e;return r<600?"凌晨":r<900?"早上":r<1130?"上午":r<1230?"中午":r<1800?"下午":"晚上"},calendar:{sameDay:"[今天]LT",nextDay:"[明天]LT",nextWeek:"[下]ddddLT",lastDay:"[昨天]LT",lastWeek:"[上]ddddLT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}(日|月|周)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";case"M":return t+"月";case"w":case"W":return t+"周";default:return t}},relativeTime:{future:"%s内",past:"%s前",s:"几秒",ss:"%d 秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("yo",{months:"Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀".split("_"),monthsShort:"Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀".split("_"),weekdays:"Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta".split("_"),weekdaysShort:"Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá".split("_"),weekdaysMin:"Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Ònì ni] LT",nextDay:"[Ọ̀la ni] LT",nextWeek:"dddd [Ọsẹ̀ tón'bọ] [ni] LT",lastDay:"[Àna ni] LT",lastWeek:"dddd [Ọsẹ̀ tólọ́] [ni] LT",sameElse:"L"},relativeTime:{future:"ní %s",past:"%s kọjá",s:"ìsẹjú aayá die",ss:"aayá %d",m:"ìsẹjú kan",mm:"ìsẹjú %d",h:"wákati kan",hh:"wákati %d",d:"ọjọ́ kan",dd:"ọjọ́ %d",M:"osù kan",MM:"osù %d",y:"ọdún kan",yy:"ọdún %d"},dayOfMonthOrdinalParse:/ọjọ́\s\d{1,2}/,ordinal:"ọjọ́ %d",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("x-pseudo",{months:"J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér".split("_"),monthsShort:"J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc".split("_"),monthsParseExact:!0,weekdays:"S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý".split("_"),weekdaysShort:"S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát".split("_"),weekdaysMin:"S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[T~ódá~ý át] LT",nextDay:"[T~ómó~rró~w át] LT",nextWeek:"dddd [át] LT",lastDay:"[Ý~ést~érdá~ý át] LT",lastWeek:"[L~ást] dddd [át] LT",sameElse:"L"},relativeTime:{future:"í~ñ %s",past:"%s á~gó",s:"á ~féw ~sécó~ñds",ss:"%d s~écóñ~ds",m:"á ~míñ~úté",mm:"%d m~íñú~tés",h:"á~ñ hó~úr",hh:"%d h~óúrs",d:"á ~dáý",dd:"%d d~áýs",M:"á ~móñ~th",MM:"%d m~óñt~hs",y:"á ~ýéár",yy:"%d ý~éárs"},dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(t){var e=t%10,n=1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("vi",{months:"tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12".split("_"),monthsShort:"Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12".split("_"),monthsParseExact:!0,weekdays:"chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy".split("_"),weekdaysShort:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysMin:"CN_T2_T3_T4_T5_T6_T7".split("_"),weekdaysParseExact:!0,meridiemParse:/sa|ch/i,isPM:function(t){return/^ch$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"sa":"SA":n?"ch":"CH"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [năm] YYYY",LLL:"D MMMM [năm] YYYY HH:mm",LLLL:"dddd, D MMMM [năm] YYYY HH:mm",l:"DD/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[Hôm nay lúc] LT",nextDay:"[Ngày mai lúc] LT",nextWeek:"dddd [tuần tới lúc] LT",lastDay:"[Hôm qua lúc] LT",lastWeek:"dddd [tuần rồi lúc] LT",sameElse:"L"},relativeTime:{future:"%s tới",past:"%s trước",s:"vài giây",ss:"%d giây",m:"một phút",mm:"%d phút",h:"một giờ",hh:"%d giờ",d:"một ngày",dd:"%d ngày",M:"một tháng",MM:"%d tháng",y:"một năm",yy:"%d năm"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("uz-latn",{months:"Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr".split("_"),monthsShort:"Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek".split("_"),weekdays:"Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba".split("_"),weekdaysShort:"Yak_Dush_Sesh_Chor_Pay_Jum_Shan".split("_"),weekdaysMin:"Ya_Du_Se_Cho_Pa_Ju_Sha".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Bugun soat] LT [da]",nextDay:"[Ertaga] LT [da]",nextWeek:"dddd [kuni soat] LT [da]",lastDay:"[Kecha soat] LT [da]",lastWeek:"[O'tgan] dddd [kuni soat] LT [da]",sameElse:"L"},relativeTime:{future:"Yaqin %s ichida",past:"Bir necha %s oldin",s:"soniya",ss:"%d soniya",m:"bir daqiqa",mm:"%d daqiqa",h:"bir soat",hh:"%d soat",d:"bir kun",dd:"%d kun",M:"bir oy",MM:"%d oy",y:"bir yil",yy:"%d yil"},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("uz",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба".split("_"),weekdaysShort:"Якш_Душ_Сеш_Чор_Пай_Жум_Шан".split("_"),weekdaysMin:"Як_Ду_Се_Чо_Па_Жу_Ша".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"D MMMM YYYY, dddd HH:mm"},calendar:{sameDay:"[Бугун соат] LT [да]",nextDay:"[Эртага] LT [да]",nextWeek:"dddd [куни соат] LT [да]",lastDay:"[Кеча соат] LT [да]",lastWeek:"[Утган] dddd [куни соат] LT [да]",sameElse:"L"},relativeTime:{future:"Якин %s ичида",past:"Бир неча %s олдин",s:"фурсат",ss:"%d фурсат",m:"бир дакика",mm:"%d дакика",h:"бир соат",hh:"%d соат",d:"бир кун",dd:"%d кун",M:"бир ой",MM:"%d ой",y:"бир йил",yy:"%d йил"},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";var e=["جنوری","فروری","مارچ","اپریل","مئی","جون","جولائی","اگست","ستمبر","اکتوبر","نومبر","دسمبر"],n=["اتوار","پیر","منگل","بدھ","جمعرات","جمعہ","ہفتہ"];t.defineLocale("ur",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[آج بوقت] LT",nextDay:"[کل بوقت] LT",nextWeek:"dddd [بوقت] LT",lastDay:"[گذشتہ روز بوقت] LT",lastWeek:"[گذشتہ] dddd [بوقت] LT",sameElse:"L"},relativeTime:{future:"%s بعد",past:"%s قبل",s:"چند سیکنڈ",ss:"%d سیکنڈ",m:"ایک منٹ",mm:"%d منٹ",h:"ایک گھنٹہ",hh:"%d گھنٹے",d:"ایک دن",dd:"%d دن",M:"ایک ماہ",MM:"%d ماہ",y:"ایک سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n){var r,i,a={ss:e?"секунда_секунди_секунд":"секунду_секунди_секунд",mm:e?"хвилина_хвилини_хвилин":"хвилину_хвилини_хвилин",hh:e?"година_години_годин":"годину_години_годин",dd:"день_дні_днів",MM:"місяць_місяці_місяців",yy:"рік_роки_років"};return"m"===n?e?"хвилина":"хвилину":"h"===n?e?"година":"годину":t+" "+(r=+t,i=a[n].split("_"),r%10==1&&r%100!=11?i[0]:r%10>=2&&r%10<=4&&(r%100<10||r%100>=20)?i[1]:i[2])}function n(t){return function(){return t+"о"+(11===this.hours()?"б":"")+"] LT"}}t.defineLocale("uk",{months:{format:"січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня".split("_"),standalone:"січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень".split("_")},monthsShort:"січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд".split("_"),weekdays:function(t,e){var n={nominative:"неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота".split("_"),accusative:"неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу".split("_"),genitive:"неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи".split("_")};if(!t)return n.nominative;var r=/(\[[ВвУу]\]) ?dddd/.test(e)?"accusative":/\[?(?:минулої|наступної)? ?\] ?dddd/.test(e)?"genitive":"nominative";return n[r][t.day()]},weekdaysShort:"нд_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY р.",LLL:"D MMMM YYYY р., HH:mm",LLLL:"dddd, D MMMM YYYY р., HH:mm"},calendar:{sameDay:n("[Сьогодні "),nextDay:n("[Завтра "),lastDay:n("[Вчора "),nextWeek:n("[У] dddd ["),lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return n("[Минулої] dddd [").call(this);case 1:case 2:case 4:return n("[Минулого] dddd [").call(this)}},sameElse:"L"},relativeTime:{future:"за %s",past:"%s тому",s:"декілька секунд",ss:e,m:e,mm:e,h:"годину",hh:e,d:"день",dd:e,M:"місяць",MM:e,y:"рік",yy:e},meridiemParse:/ночі|ранку|дня|вечора/,isPM:function(t){return/^(дня|вечора)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночі":t<12?"ранку":t<17?"дня":"вечора"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t+"-й";case"D":return t+"-го";default:return t}},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ug-cn",{months:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),monthsShort:"يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر".split("_"),weekdays:"يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە".split("_"),weekdaysShort:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),weekdaysMin:"يە_دۈ_سە_چا_پە_جۈ_شە".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY-يىلىM-ئاينىڭD-كۈنى",LLL:"YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm",LLLL:"dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm"},meridiemParse:/يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,meridiemHour:function(t,e){return 12===t&&(t=0),"يېرىم كېچە"===e||"سەھەر"===e||"چۈشتىن بۇرۇن"===e?t:"چۈشتىن كېيىن"===e||"كەچ"===e?t+12:t>=11?t:t+12},meridiem:function(t,e,n){var r=100*t+e;return r<600?"يېرىم كېچە":r<900?"سەھەر":r<1130?"چۈشتىن بۇرۇن":r<1230?"چۈش":r<1800?"چۈشتىن كېيىن":"كەچ"},calendar:{sameDay:"[بۈگۈن سائەت] LT",nextDay:"[ئەتە سائەت] LT",nextWeek:"[كېلەركى] dddd [سائەت] LT",lastDay:"[تۆنۈگۈن] LT",lastWeek:"[ئالدىنقى] dddd [سائەت] LT",sameElse:"L"},relativeTime:{future:"%s كېيىن",past:"%s بۇرۇن",s:"نەچچە سېكونت",ss:"%d سېكونت",m:"بىر مىنۇت",mm:"%d مىنۇت",h:"بىر سائەت",hh:"%d سائەت",d:"بىر كۈن",dd:"%d كۈن",M:"بىر ئاي",MM:"%d ئاي",y:"بىر يىل",yy:"%d يىل"},dayOfMonthOrdinalParse:/\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"-كۈنى";case"w":case"W":return t+"-ھەپتە";default:return t}},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("tzm-latn",{months:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),monthsShort:"innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir".split("_"),weekdays:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysShort:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),weekdaysMin:"asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[asdkh g] LT",nextDay:"[aska g] LT",nextWeek:"dddd [g] LT",lastDay:"[assant g] LT",lastWeek:"dddd [g] LT",sameElse:"L"},relativeTime:{future:"dadkh s yan %s",past:"yan %s",s:"imik",ss:"%d imik",m:"minuḍ",mm:"%d minuḍ",h:"saɛa",hh:"%d tassaɛin",d:"ass",dd:"%d ossan",M:"ayowr",MM:"%d iyyirn",y:"asgas",yy:"%d isgasn"},week:{dow:6,doy:12}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("tzm",{months:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),monthsShort:"ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ".split("_"),weekdays:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysShort:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),weekdaysMin:"ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ⴰⵙⴷⵅ ⴴ] LT",nextDay:"[ⴰⵙⴽⴰ ⴴ] LT",nextWeek:"dddd [ⴴ] LT",lastDay:"[ⴰⵚⴰⵏⵜ ⴴ] LT",lastWeek:"dddd [ⴴ] LT",sameElse:"L"},relativeTime:{future:"ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s",past:"ⵢⴰⵏ %s",s:"ⵉⵎⵉⴽ",ss:"%d ⵉⵎⵉⴽ",m:"ⵎⵉⵏⵓⴺ",mm:"%d ⵎⵉⵏⵓⴺ",h:"ⵙⴰⵄⴰ",hh:"%d ⵜⴰⵙⵙⴰⵄⵉⵏ",d:"ⴰⵙⵙ",dd:"%d oⵙⵙⴰⵏ",M:"ⴰⵢoⵓⵔ",MM:"%d ⵉⵢⵢⵉⵔⵏ",y:"ⴰⵙⴳⴰⵙ",yy:"%d ⵉⵙⴳⴰⵙⵏ"},week:{dow:6,doy:12}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={s:["viensas secunds","'iensas secunds"],ss:[t+" secunds",t+" secunds"],m:["'n míut","'iens míut"],mm:[t+" míuts",t+" míuts"],h:["'n þora","'iensa þora"],hh:[t+" þoras",t+" þoras"],d:["'n ziua","'iensa ziua"],dd:[t+" ziuas",t+" ziuas"],M:["'n mes","'iens mes"],MM:[t+" mesen",t+" mesen"],y:["'n ar","'iens ar"],yy:[t+" ars",t+" ars"]};return r?i[n][0]:e?i[n][0]:i[n][1]}t.defineLocale("tzl",{months:"Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar".split("_"),monthsShort:"Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec".split("_"),weekdays:"Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi".split("_"),weekdaysShort:"Súl_Lún_Mai_Már_Xhú_Vié_Sát".split("_"),weekdaysMin:"Sú_Lú_Ma_Má_Xh_Vi_Sá".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"D. MMMM [dallas] YYYY",LLL:"D. MMMM [dallas] YYYY HH.mm",LLLL:"dddd, [li] D. MMMM [dallas] YYYY HH.mm"},meridiemParse:/d\'o|d\'a/i,isPM:function(t){return"d'o"===t.toLowerCase()},meridiem:function(t,e,n){return t>11?n?"d'o":"D'O":n?"d'a":"D'A"},calendar:{sameDay:"[oxhi à] LT",nextDay:"[demà à] LT",nextWeek:"dddd [à] LT",lastDay:"[ieiri à] LT",lastWeek:"[sür el] dddd [lasteu à] LT",sameElse:"L"},relativeTime:{future:"osprei %s",past:"ja%s",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"'inci",5:"'inci",8:"'inci",70:"'inci",80:"'inci",2:"'nci",7:"'nci",20:"'nci",50:"'nci",3:"'üncü",4:"'üncü",100:"'üncü",6:"'ncı",9:"'uncu",10:"'uncu",30:"'uncu",60:"'ıncı",90:"'ıncı"};t.defineLocale("tr",{months:"Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık".split("_"),monthsShort:"Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara".split("_"),weekdays:"Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi".split("_"),weekdaysShort:"Paz_Pts_Sal_Çar_Per_Cum_Cts".split("_"),weekdaysMin:"Pz_Pt_Sa_Ça_Pe_Cu_Ct".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[yarın saat] LT",nextWeek:"[gelecek] dddd [saat] LT",lastDay:"[dün] LT",lastWeek:"[geçen] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s önce",s:"birkaç saniye",ss:"%d saniye",m:"bir dakika",mm:"%d dakika",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir yıl",yy:"%d yıl"},ordinal:function(t,n){switch(n){case"d":case"D":case"Do":case"DD":return t;default:if(0===t)return t+"'ıncı";var r=t%10,i=t%100-r,a=t>=100?100:null;return t+(e[r]||e[i]||e[a])}},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";var e="pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut".split("_");function n(t,n,r,i){var a=function(t){var n=Math.floor(t%1e3/100),r=Math.floor(t%100/10),i=t%10,a="";return n>0&&(a+=e[n]+"vatlh"),r>0&&(a+=(""!==a?" ":"")+e[r]+"maH"),i>0&&(a+=(""!==a?" ":"")+e[i]),""===a?"pagh":a}(t);switch(r){case"ss":return a+" lup";case"mm":return a+" tup";case"hh":return a+" rep";case"dd":return a+" jaj";case"MM":return a+" jar";case"yy":return a+" DIS"}}t.defineLocale("tlh",{months:"tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’".split("_"),monthsShort:"jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’".split("_"),monthsParseExact:!0,weekdays:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysShort:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),weekdaysMin:"lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[DaHjaj] LT",nextDay:"[wa’leS] LT",nextWeek:"LLL",lastDay:"[wa’Hu’] LT",lastWeek:"LLL",sameElse:"L"},relativeTime:{future:function(t){var e=t;return e=-1!==t.indexOf("jaj")?e.slice(0,-3)+"leS":-1!==t.indexOf("jar")?e.slice(0,-3)+"waQ":-1!==t.indexOf("DIS")?e.slice(0,-3)+"nem":e+" pIq"},past:function(t){var e=t;return e=-1!==t.indexOf("jaj")?e.slice(0,-3)+"Hu’":-1!==t.indexOf("jar")?e.slice(0,-3)+"wen":-1!==t.indexOf("DIS")?e.slice(0,-3)+"ben":e+" ret"},s:"puS lup",ss:n,m:"wa’ tup",mm:n,h:"wa’ rep",hh:n,d:"wa’ jaj",dd:n,M:"wa’ jar",MM:n,y:"wa’ DIS",yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("tl-ph",{months:"Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre".split("_"),monthsShort:"Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis".split("_"),weekdays:"Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado".split("_"),weekdaysShort:"Lin_Lun_Mar_Miy_Huw_Biy_Sab".split("_"),weekdaysMin:"Li_Lu_Ma_Mi_Hu_Bi_Sab".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"MM/D/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY HH:mm",LLLL:"dddd, MMMM DD, YYYY HH:mm"},calendar:{sameDay:"LT [ngayong araw]",nextDay:"[Bukas ng] LT",nextWeek:"LT [sa susunod na] dddd",lastDay:"LT [kahapon]",lastWeek:"LT [noong nakaraang] dddd",sameElse:"L"},relativeTime:{future:"sa loob ng %s",past:"%s ang nakalipas",s:"ilang segundo",ss:"%d segundo",m:"isang minuto",mm:"%d minuto",h:"isang oras",hh:"%d oras",d:"isang araw",dd:"%d araw",M:"isang buwan",MM:"%d buwan",y:"isang taon",yy:"%d taon"},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:function(t){return t},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("th",{months:"มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม".split("_"),monthsShort:"ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.".split("_"),monthsParseExact:!0,weekdays:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์".split("_"),weekdaysShort:"อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์".split("_"),weekdaysMin:"อา._จ._อ._พ._พฤ._ศ._ส.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY เวลา H:mm",LLLL:"วันddddที่ D MMMM YYYY เวลา H:mm"},meridiemParse:/ก่อนเที่ยง|หลังเที่ยง/,isPM:function(t){return"หลังเที่ยง"===t},meridiem:function(t,e,n){return t<12?"ก่อนเที่ยง":"หลังเที่ยง"},calendar:{sameDay:"[วันนี้ เวลา] LT",nextDay:"[พรุ่งนี้ เวลา] LT",nextWeek:"dddd[หน้า เวลา] LT",lastDay:"[เมื่อวานนี้ เวลา] LT",lastWeek:"[วัน]dddd[ที่แล้ว เวลา] LT",sameElse:"L"},relativeTime:{future:"อีก %s",past:"%sที่แล้ว",s:"ไม่กี่วินาที",ss:"%d วินาที",m:"1 นาที",mm:"%d นาที",h:"1 ชั่วโมง",hh:"%d ชั่วโมง",d:"1 วัน",dd:"%d วัน",M:"1 เดือน",MM:"%d เดือน",y:"1 ปี",yy:"%d ปี"}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={0:"-ум",1:"-ум",2:"-юм",3:"-юм",4:"-ум",5:"-ум",6:"-ум",7:"-ум",8:"-ум",9:"-ум",10:"-ум",12:"-ум",13:"-ум",20:"-ум",30:"-юм",40:"-ум",50:"-ум",60:"-ум",70:"-ум",80:"-ум",90:"-ум",100:"-ум"};t.defineLocale("tg",{months:"январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр".split("_"),monthsShort:"янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек".split("_"),weekdays:"якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе".split("_"),weekdaysShort:"яшб_дшб_сшб_чшб_пшб_ҷум_шнб".split("_"),weekdaysMin:"яш_дш_сш_чш_пш_ҷм_шб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Имрӯз соати] LT",nextDay:"[Пагоҳ соати] LT",lastDay:"[Дирӯз соати] LT",nextWeek:"dddd[и] [ҳафтаи оянда соати] LT",lastWeek:"dddd[и] [ҳафтаи гузашта соати] LT",sameElse:"L"},relativeTime:{future:"баъди %s",past:"%s пеш",s:"якчанд сония",m:"як дақиқа",mm:"%d дақиқа",h:"як соат",hh:"%d соат",d:"як рӯз",dd:"%d рӯз",M:"як моҳ",MM:"%d моҳ",y:"як сол",yy:"%d сол"},meridiemParse:/шаб|субҳ|рӯз|бегоҳ/,meridiemHour:function(t,e){return 12===t&&(t=0),"шаб"===e?t<4?t:t+12:"субҳ"===e?t:"рӯз"===e?t>=11?t:t+12:"бегоҳ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"шаб":t<11?"субҳ":t<16?"рӯз":t<19?"бегоҳ":"шаб"},dayOfMonthOrdinalParse:/\d{1,2}-(ум|юм)/,ordinal:function(t){var n=t%10,r=t>=100?100:null;return t+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("tet",{months:"Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru".split("_"),monthsShort:"Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez".split("_"),weekdays:"Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu".split("_"),weekdaysShort:"Dom_Seg_Ters_Kua_Kint_Sest_Sab".split("_"),weekdaysMin:"Do_Seg_Te_Ku_Ki_Ses_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Ohin iha] LT",nextDay:"[Aban iha] LT",nextWeek:"dddd [iha] LT",lastDay:"[Horiseik iha] LT",lastWeek:"dddd [semana kotuk] [iha] LT",sameElse:"L"},relativeTime:{future:"iha %s",past:"%s liuba",s:"minutu balun",ss:"minutu %d",m:"minutu ida",mm:"minutu %d",h:"oras ida",hh:"oras %d",d:"loron ida",dd:"loron %d",M:"fulan ida",MM:"fulan %d",y:"tinan ida",yy:"tinan %d"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10,n=1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("te",{months:"జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జూలై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్".split("_"),monthsShort:"జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జూలై_ఆగ._సెప్._అక్టో._నవ._డిసె.".split("_"),monthsParseExact:!0,weekdays:"ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం".split("_"),weekdaysShort:"ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని".split("_"),weekdaysMin:"ఆ_సో_మం_బు_గు_శు_శ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[నేడు] LT",nextDay:"[రేపు] LT",nextWeek:"dddd, LT",lastDay:"[నిన్న] LT",lastWeek:"[గత] dddd, LT",sameElse:"L"},relativeTime:{future:"%s లో",past:"%s క్రితం",s:"కొన్ని క్షణాలు",ss:"%d సెకన్లు",m:"ఒక నిమిషం",mm:"%d నిమిషాలు",h:"ఒక గంట",hh:"%d గంటలు",d:"ఒక రోజు",dd:"%d రోజులు",M:"ఒక నెల",MM:"%d నెలలు",y:"ఒక సంవత్సరం",yy:"%d సంవత్సరాలు"},dayOfMonthOrdinalParse:/\d{1,2}వ/,ordinal:"%dవ",meridiemParse:/రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,meridiemHour:function(t,e){return 12===t&&(t=0),"రాత్రి"===e?t<4?t:t+12:"ఉదయం"===e?t:"మధ్యాహ్నం"===e?t>=10?t:t+12:"సాయంత్రం"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"రాత్రి":t<10?"ఉదయం":t<17?"మధ్యాహ్నం":t<20?"సాయంత్రం":"రాత్రి"},week:{dow:0,doy:6}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"௧",2:"௨",3:"௩",4:"௪",5:"௫",6:"௬",7:"௭",8:"௮",9:"௯",0:"௦"},n={"௧":"1","௨":"2","௩":"3","௪":"4","௫":"5","௬":"6","௭":"7","௮":"8","௯":"9","௦":"0"};t.defineLocale("ta",{months:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),monthsShort:"ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்".split("_"),weekdays:"ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை".split("_"),weekdaysShort:"ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி".split("_"),weekdaysMin:"ஞா_தி_செ_பு_வி_வெ_ச".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, HH:mm",LLLL:"dddd, D MMMM YYYY, HH:mm"},calendar:{sameDay:"[இன்று] LT",nextDay:"[நாளை] LT",nextWeek:"dddd, LT",lastDay:"[நேற்று] LT",lastWeek:"[கடந்த வாரம்] dddd, LT",sameElse:"L"},relativeTime:{future:"%s இல்",past:"%s முன்",s:"ஒரு சில விநாடிகள்",ss:"%d விநாடிகள்",m:"ஒரு நிமிடம்",mm:"%d நிமிடங்கள்",h:"ஒரு மணி நேரம்",hh:"%d மணி நேரம்",d:"ஒரு நாள்",dd:"%d நாட்கள்",M:"ஒரு மாதம்",MM:"%d மாதங்கள்",y:"ஒரு வருடம்",yy:"%d ஆண்டுகள்"},dayOfMonthOrdinalParse:/\d{1,2}வது/,ordinal:function(t){return t+"வது"},preparse:function(t){return t.replace(/[௧௨௩௪௫௬௭௮௯௦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,meridiem:function(t,e,n){return t<2?" யாமம்":t<6?" வைகறை":t<10?" காலை":t<14?" நண்பகல்":t<18?" எற்பாடு":t<22?" மாலை":" யாமம்"},meridiemHour:function(t,e){return 12===t&&(t=0),"யாமம்"===e?t<2?t:t+12:"வைகறை"===e||"காலை"===e?t:"நண்பகல்"===e&&t>=10?t:t+12},week:{dow:0,doy:6}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("sw",{months:"Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des".split("_"),weekdays:"Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi".split("_"),weekdaysShort:"Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos".split("_"),weekdaysMin:"J2_J3_J4_J5_Al_Ij_J1".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[leo saa] LT",nextDay:"[kesho saa] LT",nextWeek:"[wiki ijayo] dddd [saat] LT",lastDay:"[jana] LT",lastWeek:"[wiki iliyopita] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s baadaye",past:"tokea %s",s:"hivi punde",ss:"sekunde %d",m:"dakika moja",mm:"dakika %d",h:"saa limoja",hh:"masaa %d",d:"siku moja",dd:"masiku %d",M:"mwezi mmoja",MM:"miezi %d",y:"mwaka mmoja",yy:"miaka %d"},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(e|a)/,ordinal:function(t){var e=t%10,n=1==~~(t%100/10)?"e":1===e?"a":2===e?"a":"e";return t+n},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ss",{months:"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split("_"),monthsShort:"Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo".split("_"),weekdays:"Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo".split("_"),weekdaysShort:"Lis_Umb_Lsb_Les_Lsi_Lsh_Umg".split("_"),weekdaysMin:"Li_Us_Lb_Lt_Ls_Lh_Ug".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Namuhla nga] LT",nextDay:"[Kusasa nga] LT",nextWeek:"dddd [nga] LT",lastDay:"[Itolo nga] LT",lastWeek:"dddd [leliphelile] [nga] LT",sameElse:"L"},relativeTime:{future:"nga %s",past:"wenteka nga %s",s:"emizuzwana lomcane",ss:"%d mzuzwana",m:"umzuzu",mm:"%d emizuzu",h:"lihora",hh:"%d emahora",d:"lilanga",dd:"%d emalanga",M:"inyanga",MM:"%d tinyanga",y:"umnyaka",yy:"%d iminyaka"},meridiemParse:/ekuseni|emini|entsambama|ebusuku/,meridiem:function(t,e,n){return t<11?"ekuseni":t<15?"emini":t<19?"entsambama":"ebusuku"},meridiemHour:function(t,e){return 12===t&&(t=0),"ekuseni"===e?t:"emini"===e?t>=11?t:t+12:"entsambama"===e||"ebusuku"===e?0===t?0:t+12:void 0},dayOfMonthOrdinalParse:/\d{1,2}/,ordinal:"%d",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={words:{ss:["секунда","секунде","секунди"],m:["један минут","једне минуте"],mm:["минут","минуте","минута"],h:["један сат","једног сата"],hh:["сат","сата","сати"],dd:["дан","дана","дана"],MM:["месец","месеца","месеци"],yy:["година","године","година"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+" "+e.correctGrammaticalCase(t,i)}};t.defineLocale("sr-cyrl",{months:"јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар".split("_"),monthsShort:"јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.".split("_"),monthsParseExact:!0,weekdays:"недеља_понедељак_уторак_среда_четвртак_петак_субота".split("_"),weekdaysShort:"нед._пон._уто._сре._чет._пет._суб.".split("_"),weekdaysMin:"не_по_ут_ср_че_пе_су".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[данас у] LT",nextDay:"[сутра у] LT",nextWeek:function(){switch(this.day()){case 0:return"[у] [недељу] [у] LT";case 3:return"[у] [среду] [у] LT";case 6:return"[у] [суботу] [у] LT";case 1:case 2:case 4:case 5:return"[у] dddd [у] LT"}},lastDay:"[јуче у] LT",lastWeek:function(){return["[прошле] [недеље] [у] LT","[прошлог] [понедељка] [у] LT","[прошлог] [уторка] [у] LT","[прошле] [среде] [у] LT","[прошлог] [четвртка] [у] LT","[прошлог] [петка] [у] LT","[прошле] [суботе] [у] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"за %s",past:"пре %s",s:"неколико секунди",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"дан",dd:e.translate,M:"месец",MM:e.translate,y:"годину",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={words:{ss:["sekunda","sekunde","sekundi"],m:["jedan minut","jedne minute"],mm:["minut","minute","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mesec","meseca","meseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+" "+e.correctGrammaticalCase(t,i)}};t.defineLocale("sr",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sre._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedelju] [u] LT";case 3:return"[u] [sredu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedelje] [u] LT","[prošlog] [ponedeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"pre %s",s:"nekoliko sekundi",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("sq",{months:"Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor".split("_"),monthsShort:"Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj".split("_"),weekdays:"E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë".split("_"),weekdaysShort:"Die_Hën_Mar_Mër_Enj_Pre_Sht".split("_"),weekdaysMin:"D_H_Ma_Më_E_P_Sh".split("_"),weekdaysParseExact:!0,meridiemParse:/PD|MD/,isPM:function(t){return"M"===t.charAt(0)},meridiem:function(t,e,n){return t<12?"PD":"MD"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Sot në] LT",nextDay:"[Nesër në] LT",nextWeek:"dddd [në] LT",lastDay:"[Dje në] LT",lastWeek:"dddd [e kaluar në] LT",sameElse:"L"},relativeTime:{future:"në %s",past:"%s më parë",s:"disa sekonda",ss:"%d sekonda",m:"një minutë",mm:"%d minuta",h:"një orë",hh:"%d orë",d:"një ditë",dd:"%d ditë",M:"një muaj",MM:"%d muaj",y:"një vit",yy:"%d vite"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i=t+" ";switch(n){case"s":return e||r?"nekaj sekund":"nekaj sekundami";case"ss":return i+=1===t?e?"sekundo":"sekundi":2===t?e||r?"sekundi":"sekundah":t<5?e||r?"sekunde":"sekundah":"sekund";case"m":return e?"ena minuta":"eno minuto";case"mm":return i+=1===t?e?"minuta":"minuto":2===t?e||r?"minuti":"minutama":t<5?e||r?"minute":"minutami":e||r?"minut":"minutami";case"h":return e?"ena ura":"eno uro";case"hh":return i+=1===t?e?"ura":"uro":2===t?e||r?"uri":"urama":t<5?e||r?"ure":"urami":e||r?"ur":"urami";case"d":return e||r?"en dan":"enim dnem";case"dd":return i+=1===t?e||r?"dan":"dnem":2===t?e||r?"dni":"dnevoma":e||r?"dni":"dnevi";case"M":return e||r?"en mesec":"enim mesecem";case"MM":return i+=1===t?e||r?"mesec":"mesecem":2===t?e||r?"meseca":"mesecema":t<5?e||r?"mesece":"meseci":e||r?"mesecev":"meseci";case"y":return e||r?"eno leto":"enim letom";case"yy":return i+=1===t?e||r?"leto":"letom":2===t?e||r?"leti":"letoma":t<5?e||r?"leta":"leti":e||r?"let":"leti"}}t.defineLocale("sl",{months:"januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota".split("_"),weekdaysShort:"ned._pon._tor._sre._čet._pet._sob.".split("_"),weekdaysMin:"ne_po_to_sr_če_pe_so".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danes ob] LT",nextDay:"[jutri ob] LT",nextWeek:function(){switch(this.day()){case 0:return"[v] [nedeljo] [ob] LT";case 3:return"[v] [sredo] [ob] LT";case 6:return"[v] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[v] dddd [ob] LT"}},lastDay:"[včeraj ob] LT",lastWeek:function(){switch(this.day()){case 0:return"[prejšnjo] [nedeljo] [ob] LT";case 3:return"[prejšnjo] [sredo] [ob] LT";case 6:return"[prejšnjo] [soboto] [ob] LT";case 1:case 2:case 4:case 5:return"[prejšnji] dddd [ob] LT"}},sameElse:"L"},relativeTime:{future:"čez %s",past:"pred %s",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";var e="január_február_marec_apríl_máj_jún_júl_august_september_október_november_december".split("_"),n="jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec".split("_");function r(t){return t>1&&t<5}function i(t,e,n,i){var a=t+" ";switch(n){case"s":return e||i?"pár sekúnd":"pár sekundami";case"ss":return e||i?a+(r(t)?"sekundy":"sekúnd"):a+"sekundami";case"m":return e?"minúta":i?"minútu":"minútou";case"mm":return e||i?a+(r(t)?"minúty":"minút"):a+"minútami";case"h":return e?"hodina":i?"hodinu":"hodinou";case"hh":return e||i?a+(r(t)?"hodiny":"hodín"):a+"hodinami";case"d":return e||i?"deň":"dňom";case"dd":return e||i?a+(r(t)?"dni":"dní"):a+"dňami";case"M":return e||i?"mesiac":"mesiacom";case"MM":return e||i?a+(r(t)?"mesiace":"mesiacov"):a+"mesiacmi";case"y":return e||i?"rok":"rokom";case"yy":return e||i?a+(r(t)?"roky":"rokov"):a+"rokmi"}}t.defineLocale("sk",{months:e,monthsShort:n,weekdays:"nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota".split("_"),weekdaysShort:"ne_po_ut_st_št_pi_so".split("_"),weekdaysMin:"ne_po_ut_st_št_pi_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm"},calendar:{sameDay:"[dnes o] LT",nextDay:"[zajtra o] LT",nextWeek:function(){switch(this.day()){case 0:return"[v nedeľu o] LT";case 1:case 2:return"[v] dddd [o] LT";case 3:return"[v stredu o] LT";case 4:return"[vo štvrtok o] LT";case 5:return"[v piatok o] LT";case 6:return"[v sobotu o] LT"}},lastDay:"[včera o] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulú nedeľu o] LT";case 1:case 2:return"[minulý] dddd [o] LT";case 3:return"[minulú stredu o] LT";case 4:case 5:return"[minulý] dddd [o] LT";case 6:return"[minulú sobotu o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"pred %s",s:i,ss:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("si",{months:"ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්".split("_"),monthsShort:"ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ".split("_"),weekdays:"ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා".split("_"),weekdaysShort:"ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන".split("_"),weekdaysMin:"ඉ_ස_අ_බ_බ්‍ර_සි_සෙ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"a h:mm",LTS:"a h:mm:ss",L:"YYYY/MM/DD",LL:"YYYY MMMM D",LLL:"YYYY MMMM D, a h:mm",LLLL:"YYYY MMMM D [වැනි] dddd, a h:mm:ss"},calendar:{sameDay:"[අද] LT[ට]",nextDay:"[හෙට] LT[ට]",nextWeek:"dddd LT[ට]",lastDay:"[ඊයේ] LT[ට]",lastWeek:"[පසුගිය] dddd LT[ට]",sameElse:"L"},relativeTime:{future:"%sකින්",past:"%sකට පෙර",s:"තත්පර කිහිපය",ss:"තත්පර %d",m:"මිනිත්තුව",mm:"මිනිත්තු %d",h:"පැය",hh:"පැය %d",d:"දිනය",dd:"දින %d",M:"මාසය",MM:"මාස %d",y:"වසර",yy:"වසර %d"},dayOfMonthOrdinalParse:/\d{1,2} වැනි/,ordinal:function(t){return t+" වැනි"},meridiemParse:/පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,isPM:function(t){return"ප.ව."===t||"පස් වරු"===t},meridiem:function(t,e,n){return t>11?n?"ප.ව.":"පස් වරු":n?"පෙ.ව.":"පෙර වරු"}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("se",{months:"ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu".split("_"),monthsShort:"ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov".split("_"),weekdays:"sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat".split("_"),weekdaysShort:"sotn_vuos_maŋ_gask_duor_bear_láv".split("_"),weekdaysMin:"s_v_m_g_d_b_L".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"MMMM D. [b.] YYYY",LLL:"MMMM D. [b.] YYYY [ti.] HH:mm",LLLL:"dddd, MMMM D. [b.] YYYY [ti.] HH:mm"},calendar:{sameDay:"[otne ti] LT",nextDay:"[ihttin ti] LT",nextWeek:"dddd [ti] LT",lastDay:"[ikte ti] LT",lastWeek:"[ovddit] dddd [ti] LT",sameElse:"L"},relativeTime:{future:"%s geažes",past:"maŋit %s",s:"moadde sekunddat",ss:"%d sekunddat",m:"okta minuhta",mm:"%d minuhtat",h:"okta diimmu",hh:"%d diimmut",d:"okta beaivi",dd:"%d beaivvit",M:"okta mánnu",MM:"%d mánut",y:"okta jahki",yy:"%d jagit"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e=["جنوري","فيبروري","مارچ","اپريل","مئي","جون","جولاءِ","آگسٽ","سيپٽمبر","آڪٽوبر","نومبر","ڊسمبر"],n=["آچر","سومر","اڱارو","اربع","خميس","جمع","ڇنڇر"];t.defineLocale("sd",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:n,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd، D MMMM YYYY HH:mm"},meridiemParse:/صبح|شام/,isPM:function(t){return"شام"===t},meridiem:function(t,e,n){return t<12?"صبح":"شام"},calendar:{sameDay:"[اڄ] LT",nextDay:"[سڀاڻي] LT",nextWeek:"dddd [اڳين هفتي تي] LT",lastDay:"[ڪالهه] LT",lastWeek:"[گزريل هفتي] dddd [تي] LT",sameElse:"L"},relativeTime:{future:"%s پوء",past:"%s اڳ",s:"چند سيڪنڊ",ss:"%d سيڪنڊ",m:"هڪ منٽ",mm:"%d منٽ",h:"هڪ ڪلاڪ",hh:"%d ڪلاڪ",d:"هڪ ڏينهن",dd:"%d ڏينهن",M:"هڪ مهينو",MM:"%d مهينا",y:"هڪ سال",yy:"%d سال"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n){var r,i,a={ss:e?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:e?"минута_минуты_минут":"минуту_минуты_минут",hh:"час_часа_часов",dd:"день_дня_дней",MM:"месяц_месяца_месяцев",yy:"год_года_лет"};return"m"===n?e?"минута":"минуту":t+" "+(r=+t,i=a[n].split("_"),r%10==1&&r%100!=11?i[0]:r%10>=2&&r%10<=4&&(r%100<10||r%100>=20)?i[1]:i[2])}var n=[/^янв/i,/^фев/i,/^мар/i,/^апр/i,/^ма[йя]/i,/^июн/i,/^июл/i,/^авг/i,/^сен/i,/^окт/i,/^ноя/i,/^дек/i];t.defineLocale("ru",{months:{format:"января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря".split("_"),standalone:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_")},monthsShort:{format:"янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.".split("_"),standalone:"янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.".split("_")},weekdays:{standalone:"воскресенье_понедельник_вторник_среда_четверг_пятница_суббота".split("_"),format:"воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу".split("_"),isFormat:/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/},weekdaysShort:"вс_пн_вт_ср_чт_пт_сб".split("_"),weekdaysMin:"вс_пн_вт_ср_чт_пт_сб".split("_"),monthsParse:n,longMonthsParse:n,shortMonthsParse:n,monthsRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsShortRegex:/^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,monthsStrictRegex:/^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,monthsShortStrictRegex:/^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., H:mm",LLLL:"dddd, D MMMM YYYY г., H:mm"},calendar:{sameDay:"[Сегодня в] LT",nextDay:"[Завтра в] LT",lastDay:"[Вчера в] LT",nextWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В следующее] dddd [в] LT";case 1:case 2:case 4:return"[В следующий] dddd [в] LT";case 3:case 5:case 6:return"[В следующую] dddd [в] LT"}},lastWeek:function(t){if(t.week()===this.week())return 2===this.day()?"[Во] dddd [в] LT":"[В] dddd [в] LT";switch(this.day()){case 0:return"[В прошлое] dddd [в] LT";case 1:case 2:case 4:return"[В прошлый] dddd [в] LT";case 3:case 5:case 6:return"[В прошлую] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"через %s",past:"%s назад",s:"несколько секунд",ss:e,m:e,mm:e,h:"час",hh:e,d:"день",dd:e,M:"месяц",MM:e,y:"год",yy:e},meridiemParse:/ночи|утра|дня|вечера/i,isPM:function(t){return/^(дня|вечера)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночи":t<12?"утра":t<17?"дня":"вечера"},dayOfMonthOrdinalParse:/\d{1,2}-(й|го|я)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":return t+"-й";case"D":return t+"-го";case"w":case"W":return t+"-я";default:return t}},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n){var r=" ";return(t%100>=20||t>=100&&t%100==0)&&(r=" de "),t+r+{ss:"secunde",mm:"minute",hh:"ore",dd:"zile",MM:"luni",yy:"ani"}[n]}t.defineLocale("ro",{months:"ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie".split("_"),monthsShort:"ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"duminică_luni_marți_miercuri_joi_vineri_sâmbătă".split("_"),weekdaysShort:"Dum_Lun_Mar_Mie_Joi_Vin_Sâm".split("_"),weekdaysMin:"Du_Lu_Ma_Mi_Jo_Vi_Sâ".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[azi la] LT",nextDay:"[mâine la] LT",nextWeek:"dddd [la] LT",lastDay:"[ieri la] LT",lastWeek:"[fosta] dddd [la] LT",sameElse:"L"},relativeTime:{future:"peste %s",past:"%s în urmă",s:"câteva secunde",ss:e,m:"un minut",mm:e,h:"o oră",hh:e,d:"o zi",dd:e,M:"o lună",MM:e,y:"un an",yy:e},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("pt-br",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY [às] HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY [às] HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"poucos segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº"})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("pt",{months:"janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro".split("_"),monthsShort:"jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez".split("_"),weekdays:"Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado".split("_"),weekdaysShort:"Dom_Seg_Ter_Qua_Qui_Sex_Sáb".split("_"),weekdaysMin:"Do_2ª_3ª_4ª_5ª_6ª_Sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY HH:mm",LLLL:"dddd, D [de] MMMM [de] YYYY HH:mm"},calendar:{sameDay:"[Hoje às] LT",nextDay:"[Amanhã às] LT",nextWeek:"dddd [às] LT",lastDay:"[Ontem às] LT",lastWeek:function(){return 0===this.day()||6===this.day()?"[Último] dddd [às] LT":"[Última] dddd [às] LT"},sameElse:"L"},relativeTime:{future:"em %s",past:"há %s",s:"segundos",ss:"%d segundos",m:"um minuto",mm:"%d minutos",h:"uma hora",hh:"%d horas",d:"um dia",dd:"%d dias",M:"um mês",MM:"%d meses",y:"um ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e="styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień".split("_"),n="stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia".split("_");function r(t){return t%10<5&&t%10>1&&~~(t/10)%10!=1}function i(t,e,n){var i=t+" ";switch(n){case"ss":return i+(r(t)?"sekundy":"sekund");case"m":return e?"minuta":"minutę";case"mm":return i+(r(t)?"minuty":"minut");case"h":return e?"godzina":"godzinę";case"hh":return i+(r(t)?"godziny":"godzin");case"MM":return i+(r(t)?"miesiące":"miesięcy");case"yy":return i+(r(t)?"lata":"lat")}}t.defineLocale("pl",{months:function(t,r){return t?""===r?"("+n[t.month()]+"|"+e[t.month()]+")":/D MMMM/.test(r)?n[t.month()]:e[t.month()]:e},monthsShort:"sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru".split("_"),weekdays:"niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota".split("_"),weekdaysShort:"ndz_pon_wt_śr_czw_pt_sob".split("_"),weekdaysMin:"Nd_Pn_Wt_Śr_Cz_Pt_So".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Dziś o] LT",nextDay:"[Jutro o] LT",nextWeek:function(){switch(this.day()){case 0:return"[W niedzielę o] LT";case 2:return"[We wtorek o] LT";case 3:return"[W środę o] LT";case 6:return"[W sobotę o] LT";default:return"[W] dddd [o] LT"}},lastDay:"[Wczoraj o] LT",lastWeek:function(){switch(this.day()){case 0:return"[W zeszłą niedzielę o] LT";case 3:return"[W zeszłą środę o] LT";case 6:return"[W zeszłą sobotę o] LT";default:return"[W zeszły] dddd [o] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"%s temu",s:"kilka sekund",ss:i,m:i,mm:i,h:i,hh:i,d:"1 dzień",dd:"%d dni",M:"miesiąc",MM:i,y:"rok",yy:i},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"੧",2:"੨",3:"੩",4:"੪",5:"੫",6:"੬",7:"੭",8:"੮",9:"੯",0:"੦"},n={"੧":"1","੨":"2","੩":"3","੪":"4","੫":"5","੬":"6","੭":"7","੮":"8","੯":"9","੦":"0"};t.defineLocale("pa-in",{months:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),monthsShort:"ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ".split("_"),weekdays:"ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ".split("_"),weekdaysShort:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),weekdaysMin:"ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ".split("_"),longDateFormat:{LT:"A h:mm ਵਜੇ",LTS:"A h:mm:ss ਵਜੇ",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm ਵਜੇ",LLLL:"dddd, D MMMM YYYY, A h:mm ਵਜੇ"},calendar:{sameDay:"[ਅਜ] LT",nextDay:"[ਕਲ] LT",nextWeek:"dddd, LT",lastDay:"[ਕਲ] LT",lastWeek:"[ਪਿਛਲੇ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ਵਿੱਚ",past:"%s ਪਿਛਲੇ",s:"ਕੁਝ ਸਕਿੰਟ",ss:"%d ਸਕਿੰਟ",m:"ਇਕ ਮਿੰਟ",mm:"%d ਮਿੰਟ",h:"ਇੱਕ ਘੰਟਾ",hh:"%d ਘੰਟੇ",d:"ਇੱਕ ਦਿਨ",dd:"%d ਦਿਨ",M:"ਇੱਕ ਮਹੀਨਾ",MM:"%d ਮਹੀਨੇ",y:"ਇੱਕ ਸਾਲ",yy:"%d ਸਾਲ"},preparse:function(t){return t.replace(/[੧੨੩੪੫੬੭੮੯੦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ਰਾਤ"===e?t<4?t:t+12:"ਸਵੇਰ"===e?t:"ਦੁਪਹਿਰ"===e?t>=10?t:t+12:"ਸ਼ਾਮ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ਰਾਤ":t<10?"ਸਵੇਰ":t<17?"ਦੁਪਹਿਰ":t<20?"ਸ਼ਾਮ":"ਰਾਤ"},week:{dow:0,doy:6}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("nn",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag".split("_"),weekdaysShort:"sun_mån_tys_ons_tor_fre_lau".split("_"),weekdaysMin:"su_må_ty_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[I dag klokka] LT",nextDay:"[I morgon klokka] LT",nextWeek:"dddd [klokka] LT",lastDay:"[I går klokka] LT",lastWeek:"[Føregåande] dddd [klokka] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s sidan",s:"nokre sekund",ss:"%d sekund",m:"eit minutt",mm:"%d minutt",h:"ein time",hh:"%d timar",d:"ein dag",dd:"%d dagar",M:"ein månad",MM:"%d månader",y:"eit år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;t.defineLocale("nl-be",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.".split("_"),n="jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec".split("_"),r=[/^jan/i,/^feb/i,/^maart|mrt.?$/i,/^apr/i,/^mei$/i,/^jun[i.]?$/i,/^jul[i.]?$/i,/^aug/i,/^sep/i,/^okt/i,/^nov/i,/^dec/i],i=/^(januari|februari|maart|april|mei|april|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;t.defineLocale("nl",{months:"januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(januari|februari|maart|mei|ju[nl]i|april|augustus|september|oktober|november|december)/i,monthsShortStrictRegex:/^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag".split("_"),weekdaysShort:"zo._ma._di._wo._do._vr._za.".split("_"),weekdaysMin:"zo_ma_di_wo_do_vr_za".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[vandaag om] LT",nextDay:"[morgen om] LT",nextWeek:"dddd [om] LT",lastDay:"[gisteren om] LT",lastWeek:"[afgelopen] dddd [om] LT",sameElse:"L"},relativeTime:{future:"over %s",past:"%s geleden",s:"een paar seconden",ss:"%d seconden",m:"één minuut",mm:"%d minuten",h:"één uur",hh:"%d uur",d:"één dag",dd:"%d dagen",M:"één maand",MM:"%d maanden",y:"één jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};t.defineLocale("ne",{months:"जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर".split("_"),monthsShort:"जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.".split("_"),monthsParseExact:!0,weekdays:"आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार".split("_"),weekdaysShort:"आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.".split("_"),weekdaysMin:"आ._सो._मं._बु._बि._शु._श.".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"Aको h:mm बजे",LTS:"Aको h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, Aको h:mm बजे",LLLL:"dddd, D MMMM YYYY, Aको h:mm बजे"},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/राति|बिहान|दिउँसो|साँझ/,meridiemHour:function(t,e){return 12===t&&(t=0),"राति"===e?t<4?t:t+12:"बिहान"===e?t:"दिउँसो"===e?t>=10?t:t+12:"साँझ"===e?t+12:void 0},meridiem:function(t,e,n){return t<3?"राति":t<12?"बिहान":t<16?"दिउँसो":t<20?"साँझ":"राति"},calendar:{sameDay:"[आज] LT",nextDay:"[भोलि] LT",nextWeek:"[आउँदो] dddd[,] LT",lastDay:"[हिजो] LT",lastWeek:"[गएको] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%sमा",past:"%s अगाडि",s:"केही क्षण",ss:"%d सेकेण्ड",m:"एक मिनेट",mm:"%d मिनेट",h:"एक घण्टा",hh:"%d घण्टा",d:"एक दिन",dd:"%d दिन",M:"एक महिना",MM:"%d महिना",y:"एक बर्ष",yy:"%d बर्ष"},week:{dow:0,doy:6}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("nb",{months:"januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.".split("_"),monthsParseExact:!0,weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"sø._ma._ti._on._to._fr._lø.".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] HH:mm",LLLL:"dddd D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[forrige] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"noen sekunder",ss:"%d sekunder",m:"ett minutt",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dager",M:"en måned",MM:"%d måneder",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"၁",2:"၂",3:"၃",4:"၄",5:"၅",6:"၆",7:"၇",8:"၈",9:"၉",0:"၀"},n={"၁":"1","၂":"2","၃":"3","၄":"4","၅":"5","၆":"6","၇":"7","၈":"8","၉":"9","၀":"0"};t.defineLocale("my",{months:"ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ".split("_"),monthsShort:"ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ".split("_"),weekdays:"တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ".split("_"),weekdaysShort:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),weekdaysMin:"နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[ယနေ.] LT [မှာ]",nextDay:"[မနက်ဖြန်] LT [မှာ]",nextWeek:"dddd LT [မှာ]",lastDay:"[မနေ.က] LT [မှာ]",lastWeek:"[ပြီးခဲ့သော] dddd LT [မှာ]",sameElse:"L"},relativeTime:{future:"လာမည့် %s မှာ",past:"လွန်ခဲ့သော %s က",s:"စက္ကန်.အနည်းငယ်",ss:"%d စက္ကန့်",m:"တစ်မိနစ်",mm:"%d မိနစ်",h:"တစ်နာရီ",hh:"%d နာရီ",d:"တစ်ရက်",dd:"%d ရက်",M:"တစ်လ",MM:"%d လ",y:"တစ်နှစ်",yy:"%d နှစ်"},preparse:function(t){return t.replace(/[၁၂၃၄၅၆၇၈၉၀]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("mt",{months:"Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru".split("_"),monthsShort:"Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ".split("_"),weekdays:"Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt".split("_"),weekdaysShort:"Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib".split("_"),weekdaysMin:"Ħa_Tn_Tl_Er_Ħa_Ġi_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Illum fil-]LT",nextDay:"[Għada fil-]LT",nextWeek:"dddd [fil-]LT",lastDay:"[Il-bieraħ fil-]LT",lastWeek:"dddd [li għadda] [fil-]LT",sameElse:"L"},relativeTime:{future:"f’ %s",past:"%s ilu",s:"ftit sekondi",ss:"%d sekondi",m:"minuta",mm:"%d minuti",h:"siegħa",hh:"%d siegħat",d:"ġurnata",dd:"%d ġranet",M:"xahar",MM:"%d xhur",y:"sena",yy:"%d sni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ms-my",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ms",{months:"Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember".split("_"),monthsShort:"Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis".split("_"),weekdays:"Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu".split("_"),weekdaysShort:"Ahd_Isn_Sel_Rab_Kha_Jum_Sab".split("_"),weekdaysMin:"Ah_Is_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|tengahari|petang|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"tengahari"===e?t>=11?t:t+12:"petang"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"tengahari":t<19?"petang":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Esok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kelmarin pukul] LT",lastWeek:"dddd [lepas pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lepas",s:"beberapa saat",ss:"%d saat",m:"seminit",mm:"%d minit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};function r(t,e,n,r){var i="";if(e)switch(n){case"s":i="काही सेकंद";break;case"ss":i="%d सेकंद";break;case"m":i="एक मिनिट";break;case"mm":i="%d मिनिटे";break;case"h":i="एक तास";break;case"hh":i="%d तास";break;case"d":i="एक दिवस";break;case"dd":i="%d दिवस";break;case"M":i="एक महिना";break;case"MM":i="%d महिने";break;case"y":i="एक वर्ष";break;case"yy":i="%d वर्षे"}else switch(n){case"s":i="काही सेकंदां";break;case"ss":i="%d सेकंदां";break;case"m":i="एका मिनिटा";break;case"mm":i="%d मिनिटां";break;case"h":i="एका तासा";break;case"hh":i="%d तासां";break;case"d":i="एका दिवसा";break;case"dd":i="%d दिवसां";break;case"M":i="एका महिन्या";break;case"MM":i="%d महिन्यां";break;case"y":i="एका वर्षा";break;case"yy":i="%d वर्षां"}return i.replace(/%d/i,t)}t.defineLocale("mr",{months:"जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर".split("_"),monthsShort:"जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm वाजता",LTS:"A h:mm:ss वाजता",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm वाजता",LLLL:"dddd, D MMMM YYYY, A h:mm वाजता"},calendar:{sameDay:"[आज] LT",nextDay:"[उद्या] LT",nextWeek:"dddd, LT",lastDay:"[काल] LT",lastWeek:"[मागील] dddd, LT",sameElse:"L"},relativeTime:{future:"%sमध्ये",past:"%sपूर्वी",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/रात्री|सकाळी|दुपारी|सायंकाळी/,meridiemHour:function(t,e){return 12===t&&(t=0),"रात्री"===e?t<4?t:t+12:"सकाळी"===e?t:"दुपारी"===e?t>=10?t:t+12:"सायंकाळी"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात्री":t<10?"सकाळी":t<17?"दुपारी":t<20?"सायंकाळी":"रात्री"},week:{dow:0,doy:6}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ml",{months:"ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ".split("_"),monthsShort:"ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.".split("_"),monthsParseExact:!0,weekdays:"ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച".split("_"),weekdaysShort:"ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി".split("_"),weekdaysMin:"ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ".split("_"),longDateFormat:{LT:"A h:mm -നു",LTS:"A h:mm:ss -നു",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm -നു",LLLL:"dddd, D MMMM YYYY, A h:mm -നു"},calendar:{sameDay:"[ഇന്ന്] LT",nextDay:"[നാളെ] LT",nextWeek:"dddd, LT",lastDay:"[ഇന്നലെ] LT",lastWeek:"[കഴിഞ്ഞ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s കഴിഞ്ഞ്",past:"%s മുൻപ്",s:"അൽപ നിമിഷങ്ങൾ",ss:"%d സെക്കൻഡ്",m:"ഒരു മിനിറ്റ്",mm:"%d മിനിറ്റ്",h:"ഒരു മണിക്കൂർ",hh:"%d മണിക്കൂർ",d:"ഒരു ദിവസം",dd:"%d ദിവസം",M:"ഒരു മാസം",MM:"%d മാസം",y:"ഒരു വർഷം",yy:"%d വർഷം"},meridiemParse:/രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,meridiemHour:function(t,e){return 12===t&&(t=0),"രാത്രി"===e&&t>=4||"ഉച്ച കഴിഞ്ഞ്"===e||"വൈകുന്നേരം"===e?t+12:t},meridiem:function(t,e,n){return t<4?"രാത്രി":t<12?"രാവിലെ":t<17?"ഉച്ച കഴിഞ്ഞ്":t<20?"വൈകുന്നേരം":"രാത്രി"}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("mk",{months:"јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември".split("_"),monthsShort:"јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек".split("_"),weekdays:"недела_понеделник_вторник_среда_четврток_петок_сабота".split("_"),weekdaysShort:"нед_пон_вто_сре_чет_пет_саб".split("_"),weekdaysMin:"нe_пo_вт_ср_че_пе_сa".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Денес во] LT",nextDay:"[Утре во] LT",nextWeek:"[Во] dddd [во] LT",lastDay:"[Вчера во] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[Изминатата] dddd [во] LT";case 1:case 2:case 4:case 5:return"[Изминатиот] dddd [во] LT"}},sameElse:"L"},relativeTime:{future:"после %s",past:"пред %s",s:"неколку секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дена",M:"месец",MM:"%d месеци",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-ев":0===n?t+"-ен":n>10&&n<20?t+"-ти":1===e?t+"-ви":2===e?t+"-ри":7===e||8===e?t+"-ми":t+"-ти"},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("mi",{months:"Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea".split("_"),monthsShort:"Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki".split("_"),monthsRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,monthsShortStrictRegex:/(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,weekdays:"Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei".split("_"),weekdaysShort:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),weekdaysMin:"Ta_Ma_Tū_We_Tāi_Pa_Hā".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [i] HH:mm",LLLL:"dddd, D MMMM YYYY [i] HH:mm"},calendar:{sameDay:"[i teie mahana, i] LT",nextDay:"[apopo i] LT",nextWeek:"dddd [i] LT",lastDay:"[inanahi i] LT",lastWeek:"dddd [whakamutunga i] LT",sameElse:"L"},relativeTime:{future:"i roto i %s",past:"%s i mua",s:"te hēkona ruarua",ss:"%d hēkona",m:"he meneti",mm:"%d meneti",h:"te haora",hh:"%d haora",d:"he ra",dd:"%d ra",M:"he marama",MM:"%d marama",y:"he tau",yy:"%d tau"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={words:{ss:["sekund","sekunda","sekundi"],m:["jedan minut","jednog minuta"],mm:["minut","minuta","minuta"],h:["jedan sat","jednog sata"],hh:["sat","sata","sati"],dd:["dan","dana","dana"],MM:["mjesec","mjeseca","mjeseci"],yy:["godina","godine","godina"]},correctGrammaticalCase:function(t,e){return 1===t?e[0]:t>=2&&t<=4?e[1]:e[2]},translate:function(t,n,r){var i=e.words[r];return 1===r.length?n?i[0]:i[1]:t+" "+e.correctGrammaticalCase(t,i)}};t.defineLocale("me",{months:"januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sjutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[juče u] LT",lastWeek:function(){return["[prošle] [nedjelje] [u] LT","[prošlog] [ponedjeljka] [u] LT","[prošlog] [utorka] [u] LT","[prošle] [srijede] [u] LT","[prošlog] [četvrtka] [u] LT","[prošlog] [petka] [u] LT","[prošle] [subote] [u] LT"][this.day()]},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"nekoliko sekundi",ss:e.translate,m:e.translate,mm:e.translate,h:e.translate,hh:e.translate,d:"dan",dd:e.translate,M:"mjesec",MM:e.translate,y:"godinu",yy:e.translate},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={ss:"sekundes_sekundēm_sekunde_sekundes".split("_"),m:"minūtes_minūtēm_minūte_minūtes".split("_"),mm:"minūtes_minūtēm_minūte_minūtes".split("_"),h:"stundas_stundām_stunda_stundas".split("_"),hh:"stundas_stundām_stunda_stundas".split("_"),d:"dienas_dienām_diena_dienas".split("_"),dd:"dienas_dienām_diena_dienas".split("_"),M:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),MM:"mēneša_mēnešiem_mēnesis_mēneši".split("_"),y:"gada_gadiem_gads_gadi".split("_"),yy:"gada_gadiem_gads_gadi".split("_")};function n(t,e,n){return n?e%10==1&&e%100!=11?t[2]:t[3]:e%10==1&&e%100!=11?t[0]:t[1]}function r(t,r,i){return t+" "+n(e[i],t,r)}function i(t,r,i){return n(e[i],t,r)}t.defineLocale("lv",{months:"janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris".split("_"),monthsShort:"jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec".split("_"),weekdays:"svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena".split("_"),weekdaysShort:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysMin:"Sv_P_O_T_C_Pk_S".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY.",LL:"YYYY. [gada] D. MMMM",LLL:"YYYY. [gada] D. MMMM, HH:mm",LLLL:"YYYY. [gada] D. MMMM, dddd, HH:mm"},calendar:{sameDay:"[Šodien pulksten] LT",nextDay:"[Rīt pulksten] LT",nextWeek:"dddd [pulksten] LT",lastDay:"[Vakar pulksten] LT",lastWeek:"[Pagājušā] dddd [pulksten] LT",sameElse:"L"},relativeTime:{future:"pēc %s",past:"pirms %s",s:function(t,e){return e?"dažas sekundes":"dažām sekundēm"},ss:r,m:i,mm:r,h:i,hh:r,d:i,dd:r,M:i,MM:r,y:i,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={ss:"sekundė_sekundžių_sekundes",m:"minutė_minutės_minutę",mm:"minutės_minučių_minutes",h:"valanda_valandos_valandą",hh:"valandos_valandų_valandas",d:"diena_dienos_dieną",dd:"dienos_dienų_dienas",M:"mėnuo_mėnesio_mėnesį",MM:"mėnesiai_mėnesių_mėnesius",y:"metai_metų_metus",yy:"metai_metų_metus"};function n(t,e,n,r){return e?i(n)[0]:r?i(n)[1]:i(n)[2]}function r(t){return t%10==0||t>10&&t<20}function i(t){return e[t].split("_")}function a(t,e,a,o){var s=t+" ";return 1===t?s+n(0,e,a[0],o):e?s+(r(t)?i(a)[1]:i(a)[0]):o?s+i(a)[1]:s+(r(t)?i(a)[1]:i(a)[2])}t.defineLocale("lt",{months:{format:"sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio".split("_"),standalone:"sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis".split("_"),isFormat:/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/},monthsShort:"sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd".split("_"),weekdays:{format:"sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį".split("_"),standalone:"sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis".split("_"),isFormat:/dddd HH:mm/},weekdaysShort:"Sek_Pir_Ant_Tre_Ket_Pen_Šeš".split("_"),weekdaysMin:"S_P_A_T_K_Pn_Š".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY [m.] MMMM D [d.]",LLL:"YYYY [m.] MMMM D [d.], HH:mm [val.]",LLLL:"YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]",l:"YYYY-MM-DD",ll:"YYYY [m.] MMMM D [d.]",lll:"YYYY [m.] MMMM D [d.], HH:mm [val.]",llll:"YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]"},calendar:{sameDay:"[Šiandien] LT",nextDay:"[Rytoj] LT",nextWeek:"dddd LT",lastDay:"[Vakar] LT",lastWeek:"[Praėjusį] dddd LT",sameElse:"L"},relativeTime:{future:"po %s",past:"prieš %s",s:function(t,e,n,r){return e?"kelios sekundės":r?"kelių sekundžių":"kelias sekundes"},ss:a,m:n,mm:a,h:n,hh:a,d:n,dd:a,M:n,MM:a,y:n,yy:a},dayOfMonthOrdinalParse:/\d{1,2}-oji/,ordinal:function(t){return t+"-oji"},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("lo",{months:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),monthsShort:"ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ".split("_"),weekdays:"ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysShort:"ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ".split("_"),weekdaysMin:"ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"ວັນdddd D MMMM YYYY HH:mm"},meridiemParse:/ຕອນເຊົ້າ|ຕອນແລງ/,isPM:function(t){return"ຕອນແລງ"===t},meridiem:function(t,e,n){return t<12?"ຕອນເຊົ້າ":"ຕອນແລງ"},calendar:{sameDay:"[ມື້ນີ້ເວລາ] LT",nextDay:"[ມື້ອື່ນເວລາ] LT",nextWeek:"[ວັນ]dddd[ໜ້າເວລາ] LT",lastDay:"[ມື້ວານນີ້ເວລາ] LT",lastWeek:"[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT",sameElse:"L"},relativeTime:{future:"ອີກ %s",past:"%sຜ່ານມາ",s:"ບໍ່ເທົ່າໃດວິນາທີ",ss:"%d ວິນາທີ",m:"1 ນາທີ",mm:"%d ນາທີ",h:"1 ຊົ່ວໂມງ",hh:"%d ຊົ່ວໂມງ",d:"1 ມື້",dd:"%d ມື້",M:"1 ເດືອນ",MM:"%d ເດືອນ",y:"1 ປີ",yy:"%d ປີ"},dayOfMonthOrdinalParse:/(ທີ່)\d{1,2}/,ordinal:function(t){return"ທີ່"+t}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={m:["eng Minutt","enger Minutt"],h:["eng Stonn","enger Stonn"],d:["een Dag","engem Dag"],M:["ee Mount","engem Mount"],y:["ee Joer","engem Joer"]};return e?i[n][0]:i[n][1]}function n(t){if(t=parseInt(t,10),isNaN(t))return!1;if(t<0)return!0;if(t<10)return 4<=t&&t<=7;if(t<100){var e=t%10,r=t/10;return n(0===e?r:e)}if(t<1e4){for(;t>=10;)t/=10;return n(t)}return n(t/=1e3)}t.defineLocale("lb",{months:"Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg".split("_"),weekdaysShort:"So._Mé._Dë._Më._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mé_Dë_Më_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm [Auer]",LTS:"H:mm:ss [Auer]",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm [Auer]",LLLL:"dddd, D. MMMM YYYY H:mm [Auer]"},calendar:{sameDay:"[Haut um] LT",sameElse:"L",nextDay:"[Muer um] LT",nextWeek:"dddd [um] LT",lastDay:"[Gëschter um] LT",lastWeek:function(){switch(this.day()){case 2:case 4:return"[Leschten] dddd [um] LT";default:return"[Leschte] dddd [um] LT"}}},relativeTime:{future:function(t){return n(t.substr(0,t.indexOf(" ")))?"a "+t:"an "+t},past:function(t){return n(t.substr(0,t.indexOf(" ")))?"viru "+t:"virun "+t},s:"e puer Sekonnen",ss:"%d Sekonnen",m:e,mm:"%d Minutten",h:e,hh:"%d Stonnen",d:e,dd:"%d Deeg",M:e,MM:"%d Méint",y:e,yy:"%d Joer"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={0:"-чү",1:"-чи",2:"-чи",3:"-чү",4:"-чү",5:"-чи",6:"-чы",7:"-чи",8:"-чи",9:"-чу",10:"-чу",20:"-чы",30:"-чу",40:"-чы",50:"-чү",60:"-чы",70:"-чи",80:"-чи",90:"-чу",100:"-чү"};t.defineLocale("ky",{months:"январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь".split("_"),monthsShort:"янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек".split("_"),weekdays:"Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби".split("_"),weekdaysShort:"Жек_Дүй_Шей_Шар_Бей_Жум_Ише".split("_"),weekdaysMin:"Жк_Дй_Шй_Шр_Бй_Жм_Иш".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгүн саат] LT",nextDay:"[Эртең саат] LT",nextWeek:"dddd [саат] LT",lastDay:"[Кече саат] LT",lastWeek:"[Өткен аптанын] dddd [күнү] [саат] LT",sameElse:"L"},relativeTime:{future:"%s ичинде",past:"%s мурун",s:"бирнече секунд",ss:"%d секунд",m:"бир мүнөт",mm:"%d мүнөт",h:"бир саат",hh:"%d саат",d:"бир күн",dd:"%d күн",M:"бир ай",MM:"%d ай",y:"бир жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(чи|чы|чү|чу)/,ordinal:function(t){var n=t%10,r=t>=100?100:null;return t+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ko",{months:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),monthsShort:"1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월".split("_"),weekdays:"일요일_월요일_화요일_수요일_목요일_금요일_토요일".split("_"),weekdaysShort:"일_월_화_수_목_금_토".split("_"),weekdaysMin:"일_월_화_수_목_금_토".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY년 MMMM D일",LLL:"YYYY년 MMMM D일 A h:mm",LLLL:"YYYY년 MMMM D일 dddd A h:mm",l:"YYYY.MM.DD.",ll:"YYYY년 MMMM D일",lll:"YYYY년 MMMM D일 A h:mm",llll:"YYYY년 MMMM D일 dddd A h:mm"},calendar:{sameDay:"오늘 LT",nextDay:"내일 LT",nextWeek:"dddd LT",lastDay:"어제 LT",lastWeek:"지난주 dddd LT",sameElse:"L"},relativeTime:{future:"%s 후",past:"%s 전",s:"몇 초",ss:"%d초",m:"1분",mm:"%d분",h:"한 시간",hh:"%d시간",d:"하루",dd:"%d일",M:"한 달",MM:"%d달",y:"일 년",yy:"%d년"},dayOfMonthOrdinalParse:/\d{1,2}(일|월|주)/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"일";case"M":return t+"월";case"w":case"W":return t+"주";default:return t}},meridiemParse:/오전|오후/,isPM:function(t){return"오후"===t},meridiem:function(t,e,n){return t<12?"오전":"오후"}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"೧",2:"೨",3:"೩",4:"೪",5:"೫",6:"೬",7:"೭",8:"೮",9:"೯",0:"೦"},n={"೧":"1","೨":"2","೩":"3","೪":"4","೫":"5","೬":"6","೭":"7","೮":"8","೯":"9","೦":"0"};t.defineLocale("kn",{months:"ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್".split("_"),monthsShort:"ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ".split("_"),monthsParseExact:!0,weekdays:"ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ".split("_"),weekdaysShort:"ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ".split("_"),weekdaysMin:"ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[ಇಂದು] LT",nextDay:"[ನಾಳೆ] LT",nextWeek:"dddd, LT",lastDay:"[ನಿನ್ನೆ] LT",lastWeek:"[ಕೊನೆಯ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ನಂತರ",past:"%s ಹಿಂದೆ",s:"ಕೆಲವು ಕ್ಷಣಗಳು",ss:"%d ಸೆಕೆಂಡುಗಳು",m:"ಒಂದು ನಿಮಿಷ",mm:"%d ನಿಮಿಷ",h:"ಒಂದು ಗಂಟೆ",hh:"%d ಗಂಟೆ",d:"ಒಂದು ದಿನ",dd:"%d ದಿನ",M:"ಒಂದು ತಿಂಗಳು",MM:"%d ತಿಂಗಳು",y:"ಒಂದು ವರ್ಷ",yy:"%d ವರ್ಷ"},preparse:function(t){return t.replace(/[೧೨೩೪೫೬೭೮೯೦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,meridiemHour:function(t,e){return 12===t&&(t=0),"ರಾತ್ರಿ"===e?t<4?t:t+12:"ಬೆಳಿಗ್ಗೆ"===e?t:"ಮಧ್ಯಾಹ್ನ"===e?t>=10?t:t+12:"ಸಂಜೆ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"ರಾತ್ರಿ":t<10?"ಬೆಳಿಗ್ಗೆ":t<17?"ಮಧ್ಯಾಹ್ನ":t<20?"ಸಂಜೆ":"ರಾತ್ರಿ"},dayOfMonthOrdinalParse:/\d{1,2}(ನೇ)/,ordinal:function(t){return t+"ನೇ"},week:{dow:0,doy:6}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("km",{months:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),monthsShort:"មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ".split("_"),weekdays:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysShort:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),weekdaysMin:"អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[ថ្ងៃនេះ ម៉ោង] LT",nextDay:"[ស្អែក ម៉ោង] LT",nextWeek:"dddd [ម៉ោង] LT",lastDay:"[ម្សិលមិញ ម៉ោង] LT",lastWeek:"dddd [សប្តាហ៍មុន] [ម៉ោង] LT",sameElse:"L"},relativeTime:{future:"%sទៀត",past:"%sមុន",s:"ប៉ុន្មានវិនាទី",ss:"%d វិនាទី",m:"មួយនាទី",mm:"%d នាទី",h:"មួយម៉ោង",hh:"%d ម៉ោង",d:"មួយថ្ងៃ",dd:"%d ថ្ងៃ",M:"មួយខែ",MM:"%d ខែ",y:"មួយឆ្នាំ",yy:"%d ឆ្នាំ"},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={0:"-ші",1:"-ші",2:"-ші",3:"-ші",4:"-ші",5:"-ші",6:"-шы",7:"-ші",8:"-ші",9:"-шы",10:"-шы",20:"-шы",30:"-шы",40:"-шы",50:"-ші",60:"-шы",70:"-ші",80:"-ші",90:"-шы",100:"-ші"};t.defineLocale("kk",{months:"қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан".split("_"),monthsShort:"қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел".split("_"),weekdays:"жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі".split("_"),weekdaysShort:"жек_дүй_сей_сәр_бей_жұм_сен".split("_"),weekdaysMin:"жк_дй_сй_ср_бй_жм_сн".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Бүгін сағат] LT",nextDay:"[Ертең сағат] LT",nextWeek:"dddd [сағат] LT",lastDay:"[Кеше сағат] LT",lastWeek:"[Өткен аптаның] dddd [сағат] LT",sameElse:"L"},relativeTime:{future:"%s ішінде",past:"%s бұрын",s:"бірнеше секунд",ss:"%d секунд",m:"бір минут",mm:"%d минут",h:"бір сағат",hh:"%d сағат",d:"бір күн",dd:"%d күн",M:"бір ай",MM:"%d ай",y:"бір жыл",yy:"%d жыл"},dayOfMonthOrdinalParse:/\d{1,2}-(ші|шы)/,ordinal:function(t){var n=t%10,r=t>=100?100:null;return t+(e[t]||e[n]||e[r])},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ka",{months:{standalone:"იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი".split("_"),format:"იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს".split("_")},monthsShort:"იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ".split("_"),weekdays:{standalone:"კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი".split("_"),format:"კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს".split("_"),isFormat:/(წინა|შემდეგ)/},weekdaysShort:"კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ".split("_"),weekdaysMin:"კვ_ორ_სა_ოთ_ხუ_პა_შა".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[დღეს] LT[-ზე]",nextDay:"[ხვალ] LT[-ზე]",lastDay:"[გუშინ] LT[-ზე]",nextWeek:"[შემდეგ] dddd LT[-ზე]",lastWeek:"[წინა] dddd LT-ზე",sameElse:"L"},relativeTime:{future:function(t){return/(წამი|წუთი|საათი|წელი)/.test(t)?t.replace(/ი$/,"ში"):t+"ში"},past:function(t){return/(წამი|წუთი|საათი|დღე|თვე)/.test(t)?t.replace(/(ი|ე)$/,"ის უკან"):/წელი/.test(t)?t.replace(/წელი$/,"წლის უკან"):void 0},s:"რამდენიმე წამი",ss:"%d წამი",m:"წუთი",mm:"%d წუთი",h:"საათი",hh:"%d საათი",d:"დღე",dd:"%d დღე",M:"თვე",MM:"%d თვე",y:"წელი",yy:"%d წელი"},dayOfMonthOrdinalParse:/0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,ordinal:function(t){return 0===t?t:1===t?t+"-ლი":t<20||t<=100&&t%20==0||t%100==0?"მე-"+t:t+"-ე"},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("jv",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des".split("_"),weekdays:"Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu".split("_"),weekdaysShort:"Min_Sen_Sel_Reb_Kem_Jem_Sep".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sp".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/enjing|siyang|sonten|ndalu/,meridiemHour:function(t,e){return 12===t&&(t=0),"enjing"===e?t:"siyang"===e?t>=11?t:t+12:"sonten"===e||"ndalu"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"enjing":t<15?"siyang":t<19?"sonten":"ndalu"},calendar:{sameDay:"[Dinten puniko pukul] LT",nextDay:"[Mbenjang pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kala wingi pukul] LT",lastWeek:"dddd [kepengker pukul] LT",sameElse:"L"},relativeTime:{future:"wonten ing %s",past:"%s ingkang kepengker",s:"sawetawis detik",ss:"%d detik",m:"setunggal menit",mm:"%d menit",h:"setunggal jam",hh:"%d jam",d:"sedinten",dd:"%d dinten",M:"sewulan",MM:"%d wulan",y:"setaun",yy:"%d taun"},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ja",{months:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),weekdays:"日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日".split("_"),weekdaysShort:"日_月_火_水_木_金_土".split("_"),weekdaysMin:"日_月_火_水_木_金_土".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日 HH:mm",LLLL:"YYYY年M月D日 HH:mm dddd",l:"YYYY/MM/DD",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日 HH:mm dddd"},meridiemParse:/午前|午後/i,isPM:function(t){return"午後"===t},meridiem:function(t,e,n){return t<12?"午前":"午後"},calendar:{sameDay:"[今日] LT",nextDay:"[明日] LT",nextWeek:"[来週]dddd LT",lastDay:"[昨日] LT",lastWeek:"[前週]dddd LT",sameElse:"L"},dayOfMonthOrdinalParse:/\d{1,2}日/,ordinal:function(t,e){switch(e){case"d":case"D":case"DDD":return t+"日";default:return t}},relativeTime:{future:"%s後",past:"%s前",s:"数秒",ss:"%d秒",m:"1分",mm:"%d分",h:"1時間",hh:"%d時間",d:"1日",dd:"%d日",M:"1ヶ月",MM:"%dヶ月",y:"1年",yy:"%d年"}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("it",{months:"gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre".split("_"),monthsShort:"gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic".split("_"),weekdays:"domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato".split("_"),weekdaysShort:"dom_lun_mar_mer_gio_ven_sab".split("_"),weekdaysMin:"do_lu_ma_me_gi_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Oggi alle] LT",nextDay:"[Domani alle] LT",nextWeek:"dddd [alle] LT",lastDay:"[Ieri alle] LT",lastWeek:function(){switch(this.day()){case 0:return"[la scorsa] dddd [alle] LT";default:return"[lo scorso] dddd [alle] LT"}},sameElse:"L"},relativeTime:{future:function(t){return(/^[0-9].+$/.test(t)?"tra":"in")+" "+t},past:"%s fa",s:"alcuni secondi",ss:"%d secondi",m:"un minuto",mm:"%d minuti",h:"un'ora",hh:"%d ore",d:"un giorno",dd:"%d giorni",M:"un mese",MM:"%d mesi",y:"un anno",yy:"%d anni"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t){return t%100==11||t%10!=1}function n(t,n,r,i){var a=t+" ";switch(r){case"s":return n||i?"nokkrar sekúndur":"nokkrum sekúndum";case"ss":return e(t)?a+(n||i?"sekúndur":"sekúndum"):a+"sekúnda";case"m":return n?"mínúta":"mínútu";case"mm":return e(t)?a+(n||i?"mínútur":"mínútum"):n?a+"mínúta":a+"mínútu";case"hh":return e(t)?a+(n||i?"klukkustundir":"klukkustundum"):a+"klukkustund";case"d":return n?"dagur":i?"dag":"degi";case"dd":return e(t)?n?a+"dagar":a+(i?"daga":"dögum"):n?a+"dagur":a+(i?"dag":"degi");case"M":return n?"mánuður":i?"mánuð":"mánuði";case"MM":return e(t)?n?a+"mánuðir":a+(i?"mánuði":"mánuðum"):n?a+"mánuður":a+(i?"mánuð":"mánuði");case"y":return n||i?"ár":"ári";case"yy":return e(t)?a+(n||i?"ár":"árum"):a+(n||i?"ár":"ári")}}t.defineLocale("is",{months:"janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember".split("_"),monthsShort:"jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des".split("_"),weekdays:"sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur".split("_"),weekdaysShort:"sun_mán_þri_mið_fim_fös_lau".split("_"),weekdaysMin:"Su_Má_Þr_Mi_Fi_Fö_La".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY [kl.] H:mm",LLLL:"dddd, D. MMMM YYYY [kl.] H:mm"},calendar:{sameDay:"[í dag kl.] LT",nextDay:"[á morgun kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[í gær kl.] LT",lastWeek:"[síðasta] dddd [kl.] LT",sameElse:"L"},relativeTime:{future:"eftir %s",past:"fyrir %s síðan",s:n,ss:n,m:n,mm:n,h:"klukkustund",hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("id",{months:"Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des".split("_"),weekdays:"Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu".split("_"),weekdaysShort:"Min_Sen_Sel_Rab_Kam_Jum_Sab".split("_"),weekdaysMin:"Mg_Sn_Sl_Rb_Km_Jm_Sb".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [pukul] HH.mm",LLLL:"dddd, D MMMM YYYY [pukul] HH.mm"},meridiemParse:/pagi|siang|sore|malam/,meridiemHour:function(t,e){return 12===t&&(t=0),"pagi"===e?t:"siang"===e?t>=11?t:t+12:"sore"===e||"malam"===e?t+12:void 0},meridiem:function(t,e,n){return t<11?"pagi":t<15?"siang":t<19?"sore":"malam"},calendar:{sameDay:"[Hari ini pukul] LT",nextDay:"[Besok pukul] LT",nextWeek:"dddd [pukul] LT",lastDay:"[Kemarin pukul] LT",lastWeek:"dddd [lalu pukul] LT",sameElse:"L"},relativeTime:{future:"dalam %s",past:"%s yang lalu",s:"beberapa detik",ss:"%d detik",m:"semenit",mm:"%d menit",h:"sejam",hh:"%d jam",d:"sehari",dd:"%d hari",M:"sebulan",MM:"%d bulan",y:"setahun",yy:"%d tahun"},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("hy-am",{months:{format:"հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի".split("_"),standalone:"հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր".split("_")},monthsShort:"հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ".split("_"),weekdays:"կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ".split("_"),weekdaysShort:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),weekdaysMin:"կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY թ.",LLL:"D MMMM YYYY թ., HH:mm",LLLL:"dddd, D MMMM YYYY թ., HH:mm"},calendar:{sameDay:"[այսօր] LT",nextDay:"[վաղը] LT",lastDay:"[երեկ] LT",nextWeek:function(){return"dddd [օրը ժամը] LT"},lastWeek:function(){return"[անցած] dddd [օրը ժամը] LT"},sameElse:"L"},relativeTime:{future:"%s հետո",past:"%s առաջ",s:"մի քանի վայրկյան",ss:"%d վայրկյան",m:"րոպե",mm:"%d րոպե",h:"ժամ",hh:"%d ժամ",d:"օր",dd:"%d օր",M:"ամիս",MM:"%d ամիս",y:"տարի",yy:"%d տարի"},meridiemParse:/գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,isPM:function(t){return/^(ցերեկվա|երեկոյան)$/.test(t)},meridiem:function(t){return t<4?"գիշերվա":t<12?"առավոտվա":t<17?"ցերեկվա":"երեկոյան"},dayOfMonthOrdinalParse:/\d{1,2}|\d{1,2}-(ին|րդ)/,ordinal:function(t,e){switch(e){case"DDD":case"w":case"W":case"DDDo":return 1===t?t+"-ին":t+"-րդ";default:return t}},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";var e="vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton".split(" ");function n(t,e,n,r){var i=t;switch(n){case"s":return r||e?"néhány másodperc":"néhány másodperce";case"ss":return i+(r||e)?" másodperc":" másodperce";case"m":return"egy"+(r||e?" perc":" perce");case"mm":return i+(r||e?" perc":" perce");case"h":return"egy"+(r||e?" óra":" órája");case"hh":return i+(r||e?" óra":" órája");case"d":return"egy"+(r||e?" nap":" napja");case"dd":return i+(r||e?" nap":" napja");case"M":return"egy"+(r||e?" hónap":" hónapja");case"MM":return i+(r||e?" hónap":" hónapja");case"y":return"egy"+(r||e?" év":" éve");case"yy":return i+(r||e?" év":" éve")}return""}function r(t){return(t?"":"[múlt] ")+"["+e[this.day()]+"] LT[-kor]"}t.defineLocale("hu",{months:"január_február_március_április_május_június_július_augusztus_szeptember_október_november_december".split("_"),monthsShort:"jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec".split("_"),weekdays:"vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat".split("_"),weekdaysShort:"vas_hét_kedd_sze_csüt_pén_szo".split("_"),weekdaysMin:"v_h_k_sze_cs_p_szo".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"YYYY.MM.DD.",LL:"YYYY. MMMM D.",LLL:"YYYY. MMMM D. H:mm",LLLL:"YYYY. MMMM D., dddd H:mm"},meridiemParse:/de|du/i,isPM:function(t){return"u"===t.charAt(1).toLowerCase()},meridiem:function(t,e,n){return t<12?!0===n?"de":"DE":!0===n?"du":"DU"},calendar:{sameDay:"[ma] LT[-kor]",nextDay:"[holnap] LT[-kor]",nextWeek:function(){return r.call(this,!0)},lastDay:"[tegnap] LT[-kor]",lastWeek:function(){return r.call(this,!1)},sameElse:"L"},relativeTime:{future:"%s múlva",past:"%s",s:n,ss:n,m:n,mm:n,h:n,hh:n,d:n,dd:n,M:n,MM:n,y:n,yy:n},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n){var r=t+" ";switch(n){case"ss":return r+=1===t?"sekunda":2===t||3===t||4===t?"sekunde":"sekundi";case"m":return e?"jedna minuta":"jedne minute";case"mm":return r+=1===t?"minuta":2===t||3===t||4===t?"minute":"minuta";case"h":return e?"jedan sat":"jednog sata";case"hh":return r+=1===t?"sat":2===t||3===t||4===t?"sata":"sati";case"dd":return r+=1===t?"dan":"dana";case"MM":return r+=1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci";case"yy":return r+=1===t?"godina":2===t||3===t||4===t?"godine":"godina"}}t.defineLocale("hr",{months:{format:"siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca".split("_"),standalone:"siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac".split("_")},monthsShort:"sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:e,m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"१",2:"२",3:"३",4:"४",5:"५",6:"६",7:"७",8:"८",9:"९",0:"०"},n={"१":"1","२":"2","३":"3","४":"4","५":"5","६":"6","७":"7","८":"8","९":"9","०":"0"};t.defineLocale("hi",{months:"जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर".split("_"),monthsShort:"जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.".split("_"),monthsParseExact:!0,weekdays:"रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार".split("_"),weekdaysShort:"रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि".split("_"),weekdaysMin:"र_सो_मं_बु_गु_शु_श".split("_"),longDateFormat:{LT:"A h:mm बजे",LTS:"A h:mm:ss बजे",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm बजे",LLLL:"dddd, D MMMM YYYY, A h:mm बजे"},calendar:{sameDay:"[आज] LT",nextDay:"[कल] LT",nextWeek:"dddd, LT",lastDay:"[कल] LT",lastWeek:"[पिछले] dddd, LT",sameElse:"L"},relativeTime:{future:"%s में",past:"%s पहले",s:"कुछ ही क्षण",ss:"%d सेकंड",m:"एक मिनट",mm:"%d मिनट",h:"एक घंटा",hh:"%d घंटे",d:"एक दिन",dd:"%d दिन",M:"एक महीने",MM:"%d महीने",y:"एक वर्ष",yy:"%d वर्ष"},preparse:function(t){return t.replace(/[१२३४५६७८९०]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/रात|सुबह|दोपहर|शाम/,meridiemHour:function(t,e){return 12===t&&(t=0),"रात"===e?t<4?t:t+12:"सुबह"===e?t:"दोपहर"===e?t>=10?t:t+12:"शाम"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"रात":t<10?"सुबह":t<17?"दोपहर":t<20?"शाम":"रात"},week:{dow:0,doy:6}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("he",{months:"ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר".split("_"),monthsShort:"ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳".split("_"),weekdays:"ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת".split("_"),weekdaysShort:"א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳".split("_"),weekdaysMin:"א_ב_ג_ד_ה_ו_ש".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D [ב]MMMM YYYY",LLL:"D [ב]MMMM YYYY HH:mm",LLLL:"dddd, D [ב]MMMM YYYY HH:mm",l:"D/M/YYYY",ll:"D MMM YYYY",lll:"D MMM YYYY HH:mm",llll:"ddd, D MMM YYYY HH:mm"},calendar:{sameDay:"[היום ב־]LT",nextDay:"[מחר ב־]LT",nextWeek:"dddd [בשעה] LT",lastDay:"[אתמול ב־]LT",lastWeek:"[ביום] dddd [האחרון בשעה] LT",sameElse:"L"},relativeTime:{future:"בעוד %s",past:"לפני %s",s:"מספר שניות",ss:"%d שניות",m:"דקה",mm:"%d דקות",h:"שעה",hh:function(t){return 2===t?"שעתיים":t+" שעות"},d:"יום",dd:function(t){return 2===t?"יומיים":t+" ימים"},M:"חודש",MM:function(t){return 2===t?"חודשיים":t+" חודשים"},y:"שנה",yy:function(t){return 2===t?"שנתיים":t%10==0&&10!==t?t+" שנה":t+" שנים"}},meridiemParse:/אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,isPM:function(t){return/^(אחה"צ|אחרי הצהריים|בערב)$/.test(t)},meridiem:function(t,e,n){return t<5?"לפנות בוקר":t<10?"בבוקר":t<12?n?'לפנה"צ':"לפני הצהריים":t<18?n?'אחה"צ':"אחרי הצהריים":"בערב"}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"૧",2:"૨",3:"૩",4:"૪",5:"૫",6:"૬",7:"૭",8:"૮",9:"૯",0:"૦"},n={"૧":"1","૨":"2","૩":"3","૪":"4","૫":"5","૬":"6","૭":"7","૮":"8","૯":"9","૦":"0"};t.defineLocale("gu",{months:"જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર".split("_"),monthsShort:"જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.".split("_"),monthsParseExact:!0,weekdays:"રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર".split("_"),weekdaysShort:"રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ".split("_"),weekdaysMin:"ર_સો_મં_બુ_ગુ_શુ_શ".split("_"),longDateFormat:{LT:"A h:mm વાગ્યે",LTS:"A h:mm:ss વાગ્યે",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm વાગ્યે",LLLL:"dddd, D MMMM YYYY, A h:mm વાગ્યે"},calendar:{sameDay:"[આજ] LT",nextDay:"[કાલે] LT",nextWeek:"dddd, LT",lastDay:"[ગઇકાલે] LT",lastWeek:"[પાછલા] dddd, LT",sameElse:"L"},relativeTime:{future:"%s મા",past:"%s પેહલા",s:"અમુક પળો",ss:"%d સેકંડ",m:"એક મિનિટ",mm:"%d મિનિટ",h:"એક કલાક",hh:"%d કલાક",d:"એક દિવસ",dd:"%d દિવસ",M:"એક મહિનો",MM:"%d મહિનો",y:"એક વર્ષ",yy:"%d વર્ષ"},preparse:function(t){return t.replace(/[૧૨૩૪૫૬૭૮૯૦]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/રાત|બપોર|સવાર|સાંજ/,meridiemHour:function(t,e){return 12===t&&(t=0),"રાત"===e?t<4?t:t+12:"સવાર"===e?t:"બપોર"===e?t>=10?t:t+12:"સાંજ"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"રાત":t<10?"સવાર":t<17?"બપોર":t<20?"સાંજ":"રાત"},week:{dow:0,doy:6}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={s:["thodde secondanim","thodde second"],ss:[t+" secondanim",t+" second"],m:["eka mintan","ek minute"],mm:[t+" mintanim",t+" mintam"],h:["eka horan","ek hor"],hh:[t+" horanim",t+" hor"],d:["eka disan","ek dis"],dd:[t+" disanim",t+" dis"],M:["eka mhoinean","ek mhoino"],MM:[t+" mhoineanim",t+" mhoine"],y:["eka vorsan","ek voros"],yy:[t+" vorsanim",t+" vorsam"]};return e?i[n][0]:i[n][1]}t.defineLocale("gom-latn",{months:"Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr".split("_"),monthsShort:"Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son'var".split("_"),weekdaysShort:"Ait._Som._Mon._Bud._Bre._Suk._Son.".split("_"),weekdaysMin:"Ai_Sm_Mo_Bu_Br_Su_Sn".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"A h:mm [vazta]",LTS:"A h:mm:ss [vazta]",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY A h:mm [vazta]",LLLL:"dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]",llll:"ddd, D MMM YYYY, A h:mm [vazta]"},calendar:{sameDay:"[Aiz] LT",nextDay:"[Faleam] LT",nextWeek:"[Ieta to] dddd[,] LT",lastDay:"[Kal] LT",lastWeek:"[Fatlo] dddd[,] LT",sameElse:"L"},relativeTime:{future:"%s",past:"%s adim",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}(er)/,ordinal:function(t,e){switch(e){case"D":return t+"er";default:case"M":case"Q":case"DDD":case"d":case"w":case"W":return t}},week:{dow:1,doy:4},meridiemParse:/rati|sokalli|donparam|sanje/,meridiemHour:function(t,e){return 12===t&&(t=0),"rati"===e?t<4?t:t+12:"sokalli"===e?t:"donparam"===e?t>12?t:t+12:"sanje"===e?t+12:void 0},meridiem:function(t,e,n){return t<4?"rati":t<12?"sokalli":t<16?"donparam":t<20?"sanje":"rati"}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("gl",{months:"xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro".split("_"),monthsShort:"xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"domingo_luns_martes_mércores_xoves_venres_sábado".split("_"),weekdaysShort:"dom._lun._mar._mér._xov._ven._sáb.".split("_"),weekdaysMin:"do_lu_ma_mé_xo_ve_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoxe "+(1!==this.hours()?"ás":"á")+"] LT"},nextDay:function(){return"[mañá "+(1!==this.hours()?"ás":"á")+"] LT"},nextWeek:function(){return"dddd ["+(1!==this.hours()?"ás":"a")+"] LT"},lastDay:function(){return"[onte "+(1!==this.hours()?"á":"a")+"] LT"},lastWeek:function(){return"[o] dddd [pasado "+(1!==this.hours()?"ás":"a")+"] LT"},sameElse:"L"},relativeTime:{future:function(t){return 0===t.indexOf("un")?"n"+t:"en "+t},past:"hai %s",s:"uns segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"unha hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un ano",yy:"%d anos"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("gd",{months:["Am Faoilleach","An Gearran","Am Màrt","An Giblean","An Cèitean","An t-Ògmhios","An t-Iuchar","An Lùnastal","An t-Sultain","An Dàmhair","An t-Samhain","An Dùbhlachd"],monthsShort:["Faoi","Gear","Màrt","Gibl","Cèit","Ògmh","Iuch","Lùn","Sult","Dàmh","Samh","Dùbh"],monthsParseExact:!0,weekdays:["Didòmhnaich","Diluain","Dimàirt","Diciadain","Diardaoin","Dihaoine","Disathairne"],weekdaysShort:["Did","Dil","Dim","Dic","Dia","Dih","Dis"],weekdaysMin:["Dò","Lu","Mà","Ci","Ar","Ha","Sa"],longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[An-diugh aig] LT",nextDay:"[A-màireach aig] LT",nextWeek:"dddd [aig] LT",lastDay:"[An-dè aig] LT",lastWeek:"dddd [seo chaidh] [aig] LT",sameElse:"L"},relativeTime:{future:"ann an %s",past:"bho chionn %s",s:"beagan diogan",ss:"%d diogan",m:"mionaid",mm:"%d mionaidean",h:"uair",hh:"%d uairean",d:"latha",dd:"%d latha",M:"mìos",MM:"%d mìosan",y:"bliadhna",yy:"%d bliadhna"},dayOfMonthOrdinalParse:/\d{1,2}(d|na|mh)/,ordinal:function(t){var e=1===t?"d":t%10==2?"na":"mh";return t+e},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e="jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.".split("_"),n="jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_");t.defineLocale("fy",{months:"jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:"snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon".split("_"),weekdaysShort:"si._mo._ti._wo._to._fr._so.".split("_"),weekdaysMin:"Si_Mo_Ti_Wo_To_Fr_So".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[hjoed om] LT",nextDay:"[moarn om] LT",nextWeek:"dddd [om] LT",lastDay:"[juster om] LT",lastWeek:"[ôfrûne] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oer %s",past:"%s lyn",s:"in pear sekonden",ss:"%d sekonden",m:"ien minút",mm:"%d minuten",h:"ien oere",hh:"%d oeren",d:"ien dei",dd:"%d dagen",M:"ien moanne",MM:"%d moannen",y:"ien jier",yy:"%d jierren"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("fr-ch",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("fr-ca",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|e)/,ordinal:function(t,e){switch(e){default:case"M":case"Q":case"D":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("fr",{months:"janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre".split("_"),monthsShort:"janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.".split("_"),monthsParseExact:!0,weekdays:"dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi".split("_"),weekdaysShort:"dim._lun._mar._mer._jeu._ven._sam.".split("_"),weekdaysMin:"di_lu_ma_me_je_ve_sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Aujourd’hui à] LT",nextDay:"[Demain à] LT",nextWeek:"dddd [à] LT",lastDay:"[Hier à] LT",lastWeek:"dddd [dernier à] LT",sameElse:"L"},relativeTime:{future:"dans %s",past:"il y a %s",s:"quelques secondes",ss:"%d secondes",m:"une minute",mm:"%d minutes",h:"une heure",hh:"%d heures",d:"un jour",dd:"%d jours",M:"un mois",MM:"%d mois",y:"un an",yy:"%d ans"},dayOfMonthOrdinalParse:/\d{1,2}(er|)/,ordinal:function(t,e){switch(e){case"D":return t+(1===t?"er":"");default:case"M":case"Q":case"DDD":case"d":return t+(1===t?"er":"e");case"w":case"W":return t+(1===t?"re":"e")}},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("fo",{months:"januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember".split("_"),monthsShort:"jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des".split("_"),weekdays:"sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur".split("_"),weekdaysShort:"sun_mán_týs_mik_hós_frí_ley".split("_"),weekdaysMin:"su_má_tý_mi_hó_fr_le".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D. MMMM, YYYY HH:mm"},calendar:{sameDay:"[Í dag kl.] LT",nextDay:"[Í morgin kl.] LT",nextWeek:"dddd [kl.] LT",lastDay:"[Í gjár kl.] LT",lastWeek:"[síðstu] dddd [kl] LT",sameElse:"L"},relativeTime:{future:"um %s",past:"%s síðani",s:"fá sekund",ss:"%d sekundir",m:"ein minutt",mm:"%d minuttir",h:"ein tími",hh:"%d tímar",d:"ein dagur",dd:"%d dagar",M:"ein mánaði",MM:"%d mánaðir",y:"eitt ár",yy:"%d ár"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),n=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",e[7],e[8],e[9]];function r(t,r,i,a){var o="";switch(i){case"s":return a?"muutaman sekunnin":"muutama sekunti";case"ss":return a?"sekunnin":"sekuntia";case"m":return a?"minuutin":"minuutti";case"mm":o=a?"minuutin":"minuuttia";break;case"h":return a?"tunnin":"tunti";case"hh":o=a?"tunnin":"tuntia";break;case"d":return a?"päivän":"päivä";case"dd":o=a?"päivän":"päivää";break;case"M":return a?"kuukauden":"kuukausi";case"MM":o=a?"kuukauden":"kuukautta";break;case"y":return a?"vuoden":"vuosi";case"yy":o=a?"vuoden":"vuotta"}return o=function(t,r){return t<10?r?n[t]:e[t]:t}(t,a)+" "+o}t.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:r,ss:r,m:r,mm:r,h:r,hh:r,d:r,dd:r,M:r,MM:r,y:r,yy:r},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"۱",2:"۲",3:"۳",4:"۴",5:"۵",6:"۶",7:"۷",8:"۸",9:"۹",0:"۰"},n={"۱":"1","۲":"2","۳":"3","۴":"4","۵":"5","۶":"6","۷":"7","۸":"8","۹":"9","۰":"0"};t.defineLocale("fa",{months:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),monthsShort:"ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر".split("_"),weekdays:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysShort:"یک‌شنبه_دوشنبه_سه‌شنبه_چهارشنبه_پنج‌شنبه_جمعه_شنبه".split("_"),weekdaysMin:"ی_د_س_چ_پ_ج_ش".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},meridiemParse:/قبل از ظهر|بعد از ظهر/,isPM:function(t){return/بعد از ظهر/.test(t)},meridiem:function(t,e,n){return t<12?"قبل از ظهر":"بعد از ظهر"},calendar:{sameDay:"[امروز ساعت] LT",nextDay:"[فردا ساعت] LT",nextWeek:"dddd [ساعت] LT",lastDay:"[دیروز ساعت] LT",lastWeek:"dddd [پیش] [ساعت] LT",sameElse:"L"},relativeTime:{future:"در %s",past:"%s پیش",s:"چند ثانیه",ss:"ثانیه d%",m:"یک دقیقه",mm:"%d دقیقه",h:"یک ساعت",hh:"%d ساعت",d:"یک روز",dd:"%d روز",M:"یک ماه",MM:"%d ماه",y:"یک سال",yy:"%d سال"},preparse:function(t){return t.replace(/[۰-۹]/g,function(t){return n[t]}).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},dayOfMonthOrdinalParse:/\d{1,2}م/,ordinal:"%dم",week:{dow:6,doy:12}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("eu",{months:"urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua".split("_"),monthsShort:"urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.".split("_"),monthsParseExact:!0,weekdays:"igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata".split("_"),weekdaysShort:"ig._al._ar._az._og._ol._lr.".split("_"),weekdaysMin:"ig_al_ar_az_og_ol_lr".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"YYYY[ko] MMMM[ren] D[a]",LLL:"YYYY[ko] MMMM[ren] D[a] HH:mm",LLLL:"dddd, YYYY[ko] MMMM[ren] D[a] HH:mm",l:"YYYY-M-D",ll:"YYYY[ko] MMM D[a]",lll:"YYYY[ko] MMM D[a] HH:mm",llll:"ddd, YYYY[ko] MMM D[a] HH:mm"},calendar:{sameDay:"[gaur] LT[etan]",nextDay:"[bihar] LT[etan]",nextWeek:"dddd LT[etan]",lastDay:"[atzo] LT[etan]",lastWeek:"[aurreko] dddd LT[etan]",sameElse:"L"},relativeTime:{future:"%s barru",past:"duela %s",s:"segundo batzuk",ss:"%d segundo",m:"minutu bat",mm:"%d minutu",h:"ordu bat",hh:"%d ordu",d:"egun bat",dd:"%d egun",M:"hilabete bat",MM:"%d hilabete",y:"urte bat",yy:"%d urte"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={s:["mõne sekundi","mõni sekund","paar sekundit"],ss:[t+"sekundi",t+"sekundit"],m:["ühe minuti","üks minut"],mm:[t+" minuti",t+" minutit"],h:["ühe tunni","tund aega","üks tund"],hh:[t+" tunni",t+" tundi"],d:["ühe päeva","üks päev"],M:["kuu aja","kuu aega","üks kuu"],MM:[t+" kuu",t+" kuud"],y:["ühe aasta","aasta","üks aasta"],yy:[t+" aasta",t+" aastat"]};return e?i[n][2]?i[n][2]:i[n][1]:r?i[n][0]:i[n][1]}t.defineLocale("et",{months:"jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember".split("_"),monthsShort:"jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets".split("_"),weekdays:"pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev".split("_"),weekdaysShort:"P_E_T_K_N_R_L".split("_"),weekdaysMin:"P_E_T_K_N_R_L".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[Täna,] LT",nextDay:"[Homme,] LT",nextWeek:"[Järgmine] dddd LT",lastDay:"[Eile,] LT",lastWeek:"[Eelmine] dddd LT",sameElse:"L"},relativeTime:{future:"%s pärast",past:"%s tagasi",s:e,ss:e,m:e,mm:e,h:e,hh:e,d:e,dd:"%d päeva",M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_");t.defineLocale("es-us",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsParseExact:!0,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"MM/DD/YYYY",LL:"MMMM [de] D [de] YYYY",LLL:"MMMM [de] D [de] YYYY h:mm A",LLLL:"dddd, MMMM [de] D [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:0,doy:6}})}(n(0))},function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es-do",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY h:mm A",LLLL:"dddd, D [de] MMMM [de] YYYY h:mm A"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e="ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.".split("_"),n="ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic".split("_"),r=[/^ene/i,/^feb/i,/^mar/i,/^abr/i,/^may/i,/^jun/i,/^jul/i,/^ago/i,/^sep/i,/^oct/i,/^nov/i,/^dic/i],i=/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;t.defineLocale("es",{months:"enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre".split("_"),monthsShort:function(t,r){return t?/-MMM-/.test(r)?n[t.month()]:e[t.month()]:e},monthsRegex:i,monthsShortRegex:i,monthsStrictRegex:/^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,monthsShortStrictRegex:/^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,monthsParse:r,longMonthsParse:r,shortMonthsParse:r,weekdays:"domingo_lunes_martes_miércoles_jueves_viernes_sábado".split("_"),weekdaysShort:"dom._lun._mar._mié._jue._vie._sáb.".split("_"),weekdaysMin:"do_lu_ma_mi_ju_vi_sá".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D [de] MMMM [de] YYYY",LLL:"D [de] MMMM [de] YYYY H:mm",LLLL:"dddd, D [de] MMMM [de] YYYY H:mm"},calendar:{sameDay:function(){return"[hoy a la"+(1!==this.hours()?"s":"")+"] LT"},nextDay:function(){return"[mañana a la"+(1!==this.hours()?"s":"")+"] LT"},nextWeek:function(){return"dddd [a la"+(1!==this.hours()?"s":"")+"] LT"},lastDay:function(){return"[ayer a la"+(1!==this.hours()?"s":"")+"] LT"},lastWeek:function(){return"[el] dddd [pasado a la"+(1!==this.hours()?"s":"")+"] LT"},sameElse:"L"},relativeTime:{future:"en %s",past:"hace %s",s:"unos segundos",ss:"%d segundos",m:"un minuto",mm:"%d minutos",h:"una hora",hh:"%d horas",d:"un día",dd:"%d días",M:"un mes",MM:"%d meses",y:"un año",yy:"%d años"},dayOfMonthOrdinalParse:/\d{1,2}º/,ordinal:"%dº",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("eo",{months:"januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec".split("_"),weekdays:"dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato".split("_"),weekdaysShort:"dim_lun_mard_merk_ĵaŭ_ven_sab".split("_"),weekdaysMin:"di_lu_ma_me_ĵa_ve_sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D[-a de] MMMM, YYYY",LLL:"D[-a de] MMMM, YYYY HH:mm",LLLL:"dddd, [la] D[-a de] MMMM, YYYY HH:mm"},meridiemParse:/[ap]\.t\.m/i,isPM:function(t){return"p"===t.charAt(0).toLowerCase()},meridiem:function(t,e,n){return t>11?n?"p.t.m.":"P.T.M.":n?"a.t.m.":"A.T.M."},calendar:{sameDay:"[Hodiaŭ je] LT",nextDay:"[Morgaŭ je] LT",nextWeek:"dddd [je] LT",lastDay:"[Hieraŭ je] LT",lastWeek:"[pasinta] dddd [je] LT",sameElse:"L"},relativeTime:{future:"post %s",past:"antaŭ %s",s:"sekundoj",ss:"%d sekundoj",m:"minuto",mm:"%d minutoj",h:"horo",hh:"%d horoj",d:"tago",dd:"%d tagoj",M:"monato",MM:"%d monatoj",y:"jaro",yy:"%d jaroj"},dayOfMonthOrdinalParse:/\d{1,2}a/,ordinal:"%da",week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("en-nz",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},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"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10,n=1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("en-il",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},relativeTime:{future:"in %s",past:"%s ago",s:"a few 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"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10,n=1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("en-ie",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},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"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10,n=1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("en-gb",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},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"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10,n=1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("en-ca",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"YYYY-MM-DD",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},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"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10,n=1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("en-au",{months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),monthsShort:"Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),weekdaysShort:"Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),weekdaysMin:"Su_Mo_Tu_We_Th_Fr_Sa".split("_"),longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},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"},dayOfMonthOrdinalParse:/\d{1,2}(st|nd|rd|th)/,ordinal:function(t){var e=t%10,n=1==~~(t%100/10)?"th":1===e?"st":2===e?"nd":3===e?"rd":"th";return t+n},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("el",{monthsNominativeEl:"Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος".split("_"),monthsGenitiveEl:"Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου".split("_"),months:function(t,e){return t?"string"==typeof e&&/D/.test(e.substring(0,e.indexOf("MMMM")))?this._monthsGenitiveEl[t.month()]:this._monthsNominativeEl[t.month()]:this._monthsNominativeEl},monthsShort:"Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ".split("_"),weekdays:"Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο".split("_"),weekdaysShort:"Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ".split("_"),weekdaysMin:"Κυ_Δε_Τρ_Τε_Πε_Πα_Σα".split("_"),meridiem:function(t,e,n){return t>11?n?"μμ":"ΜΜ":n?"πμ":"ΠΜ"},isPM:function(t){return"μ"===(t+"").toLowerCase()[0]},meridiemParse:/[ΠΜ]\.?Μ?\.?/i,longDateFormat:{LT:"h:mm A",LTS:"h:mm:ss A",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY h:mm A",LLLL:"dddd, D MMMM YYYY h:mm A"},calendarEl:{sameDay:"[Σήμερα {}] LT",nextDay:"[Αύριο {}] LT",nextWeek:"dddd [{}] LT",lastDay:"[Χθες {}] LT",lastWeek:function(){switch(this.day()){case 6:return"[το προηγούμενο] dddd [{}] LT";default:return"[την προηγούμενη] dddd [{}] LT"}},sameElse:"L"},calendar:function(t,e){var n,r=this._calendarEl[t],i=e&&e.hours();return((n=r)instanceof Function||"[object Function]"===Object.prototype.toString.call(n))&&(r=r.apply(e)),r.replace("{}",i%12==1?"στη":"στις")},relativeTime:{future:"σε %s",past:"%s πριν",s:"λίγα δευτερόλεπτα",ss:"%d δευτερόλεπτα",m:"ένα λεπτό",mm:"%d λεπτά",h:"μία ώρα",hh:"%d ώρες",d:"μία μέρα",dd:"%d μέρες",M:"ένας μήνας",MM:"%d μήνες",y:"ένας χρόνος",yy:"%d χρόνια"},dayOfMonthOrdinalParse:/\d{1,2}η/,ordinal:"%dη",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e=["ޖެނުއަރީ","ފެބްރުއަރީ","މާރިޗު","އޭޕްރީލު","މޭ","ޖޫން","ޖުލައި","އޯގަސްޓު","ސެޕްޓެމްބަރު","އޮކްޓޯބަރު","ނޮވެމްބަރު","ޑިސެމްބަރު"],n=["އާދިއްތަ","ހޯމަ","އަންގާރަ","ބުދަ","ބުރާސްފަތި","ހުކުރު","ހޮނިހިރު"];t.defineLocale("dv",{months:e,monthsShort:e,weekdays:n,weekdaysShort:n,weekdaysMin:"އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/M/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/މކ|މފ/,isPM:function(t){return"މފ"===t},meridiem:function(t,e,n){return t<12?"މކ":"މފ"},calendar:{sameDay:"[މިއަދު] LT",nextDay:"[މާދަމާ] LT",nextWeek:"dddd LT",lastDay:"[އިއްޔެ] LT",lastWeek:"[ފާއިތުވި] dddd LT",sameElse:"L"},relativeTime:{future:"ތެރޭގައި %s",past:"ކުރިން %s",s:"ސިކުންތުކޮޅެއް",ss:"d% ސިކުންތު",m:"މިނިޓެއް",mm:"މިނިޓު %d",h:"ގަޑިއިރެއް",hh:"ގަޑިއިރު %d",d:"ދުވަހެއް",dd:"ދުވަސް %d",M:"މަހެއް",MM:"މަސް %d",y:"އަހަރެއް",yy:"އަހަރު %d"},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/,/g,"،")},week:{dow:7,doy:12}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?i[n][0]:i[n][1]}t.defineLocale("de-ch",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?i[n][0]:i[n][1]}t.defineLocale("de-at",{months:"Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n,r){var i={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[t+" Tage",t+" Tagen"],M:["ein Monat","einem Monat"],MM:[t+" Monate",t+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[t+" Jahre",t+" Jahren"]};return e?i[n][0]:i[n][1]}t.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:e,mm:"%d Minuten",h:e,hh:"%d Stunden",d:e,dd:e,M:e,MM:e,y:e,yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("da",{months:"januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag".split("_"),weekdaysShort:"søn_man_tir_ons_tor_fre_lør".split("_"),weekdaysMin:"sø_ma_ti_on_to_fr_lø".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd [d.] D. MMMM YYYY [kl.] HH:mm"},calendar:{sameDay:"[i dag kl.] LT",nextDay:"[i morgen kl.] LT",nextWeek:"på dddd [kl.] LT",lastDay:"[i går kl.] LT",lastWeek:"[i] dddd[s kl.] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"%s siden",s:"få sekunder",ss:"%d sekunder",m:"et minut",mm:"%d minutter",h:"en time",hh:"%d timer",d:"en dag",dd:"%d dage",M:"en måned",MM:"%d måneder",y:"et år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("cy",{months:"Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr".split("_"),monthsShort:"Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag".split("_"),weekdays:"Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn".split("_"),weekdaysShort:"Sul_Llun_Maw_Mer_Iau_Gwe_Sad".split("_"),weekdaysMin:"Su_Ll_Ma_Me_Ia_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Heddiw am] LT",nextDay:"[Yfory am] LT",nextWeek:"dddd [am] LT",lastDay:"[Ddoe am] LT",lastWeek:"dddd [diwethaf am] LT",sameElse:"L"},relativeTime:{future:"mewn %s",past:"%s yn ôl",s:"ychydig eiliadau",ss:"%d eiliad",m:"munud",mm:"%d munud",h:"awr",hh:"%d awr",d:"diwrnod",dd:"%d diwrnod",M:"mis",MM:"%d mis",y:"blwyddyn",yy:"%d flynedd"},dayOfMonthOrdinalParse:/\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,ordinal:function(t){var e=t,n="";return e>20?n=40===e||50===e||60===e||80===e||100===e?"fed":"ain":e>0&&(n=["","af","il","ydd","ydd","ed","ed","ed","fed","fed","fed","eg","fed","eg","eg","fed","eg","eg","fed","eg","fed"][e]),t+n},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("cv",{months:"кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав".split("_"),monthsShort:"кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш".split("_"),weekdays:"вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун".split("_"),weekdaysShort:"выр_тун_ытл_юн_кӗҫ_эрн_шӑм".split("_"),weekdaysMin:"вр_тн_ыт_юн_кҫ_эр_шм".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD-MM-YYYY",LL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]",LLL:"YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm",LLLL:"dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm"},calendar:{sameDay:"[Паян] LT [сехетре]",nextDay:"[Ыран] LT [сехетре]",lastDay:"[Ӗнер] LT [сехетре]",nextWeek:"[Ҫитес] dddd LT [сехетре]",lastWeek:"[Иртнӗ] dddd LT [сехетре]",sameElse:"L"},relativeTime:{future:function(t){var e=/сехет$/i.exec(t)?"рен":/ҫул$/i.exec(t)?"тан":"ран";return t+e},past:"%s каялла",s:"пӗр-ик ҫеккунт",ss:"%d ҫеккунт",m:"пӗр минут",mm:"%d минут",h:"пӗр сехет",hh:"%d сехет",d:"пӗр кун",dd:"%d кун",M:"пӗр уйӑх",MM:"%d уйӑх",y:"пӗр ҫул",yy:"%d ҫул"},dayOfMonthOrdinalParse:/\d{1,2}-мӗш/,ordinal:"%d-мӗш",week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";var e="leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec".split("_"),n="led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro".split("_");function r(t){return t>1&&t<5&&1!=~~(t/10)}function i(t,e,n,i){var a=t+" ";switch(n){case"s":return e||i?"pár sekund":"pár sekundami";case"ss":return e||i?a+(r(t)?"sekundy":"sekund"):a+"sekundami";case"m":return e?"minuta":i?"minutu":"minutou";case"mm":return e||i?a+(r(t)?"minuty":"minut"):a+"minutami";case"h":return e?"hodina":i?"hodinu":"hodinou";case"hh":return e||i?a+(r(t)?"hodiny":"hodin"):a+"hodinami";case"d":return e||i?"den":"dnem";case"dd":return e||i?a+(r(t)?"dny":"dní"):a+"dny";case"M":return e||i?"měsíc":"měsícem";case"MM":return e||i?a+(r(t)?"měsíce":"měsíců"):a+"měsíci";case"y":return e||i?"rok":"rokem";case"yy":return e||i?a+(r(t)?"roky":"let"):a+"lety"}}t.defineLocale("cs",{months:e,monthsShort:n,monthsParse:function(t,e){var n,r=[];for(n=0;n<12;n++)r[n]=new RegExp("^"+t[n]+"$|^"+e[n]+"$","i");return r}(e,n),shortMonthsParse:function(t){var e,n=[];for(e=0;e<12;e++)n[e]=new RegExp("^"+t[e]+"$","i");return n}(n),longMonthsParse:function(t){var e,n=[];for(e=0;e<12;e++)n[e]=new RegExp("^"+t[e]+"$","i");return n}(e),weekdays:"neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota".split("_"),weekdaysShort:"ne_po_út_st_čt_pá_so".split("_"),weekdaysMin:"ne_po_út_st_čt_pá_so".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd D. MMMM YYYY H:mm",l:"D. M. YYYY"},calendar:{sameDay:"[dnes v] LT",nextDay:"[zítra v] LT",nextWeek:function(){switch(this.day()){case 0:return"[v neděli v] LT";case 1:case 2:return"[v] dddd [v] LT";case 3:return"[ve středu v] LT";case 4:return"[ve čtvrtek v] LT";case 5:return"[v pátek v] LT";case 6:return"[v sobotu v] LT"}},lastDay:"[včera v] LT",lastWeek:function(){switch(this.day()){case 0:return"[minulou neděli v] LT";case 1:case 2:return"[minulé] dddd [v] LT";case 3:return"[minulou středu v] LT";case 4:case 5:return"[minulý] dddd [v] LT";case 6:return"[minulou sobotu v] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"před %s",s:i,ss:i,m:i,mm:i,h:i,hh:i,d:i,dd:i,M:i,MM:i,y:i,yy:i},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ca",{months:{standalone:"gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre".split("_"),format:"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split("_"),isFormat:/D[oD]?(\s)+MMMM/},monthsShort:"gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.".split("_"),monthsParseExact:!0,weekdays:"diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte".split("_"),weekdaysShort:"dg._dl._dt._dc._dj._dv._ds.".split("_"),weekdaysMin:"dg_dl_dt_dc_dj_dv_ds".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM [de] YYYY",ll:"D MMM YYYY",LLL:"D MMMM [de] YYYY [a les] H:mm",lll:"D MMM YYYY, H:mm",LLLL:"dddd D MMMM [de] YYYY [a les] H:mm",llll:"ddd D MMM YYYY, H:mm"},calendar:{sameDay:function(){return"[avui a "+(1!==this.hours()?"les":"la")+"] LT"},nextDay:function(){return"[demà a "+(1!==this.hours()?"les":"la")+"] LT"},nextWeek:function(){return"dddd [a "+(1!==this.hours()?"les":"la")+"] LT"},lastDay:function(){return"[ahir a "+(1!==this.hours()?"les":"la")+"] LT"},lastWeek:function(){return"[el] dddd [passat a "+(1!==this.hours()?"les":"la")+"] LT"},sameElse:"L"},relativeTime:{future:"d'aquí %s",past:"fa %s",s:"uns segons",ss:"%d segons",m:"un minut",mm:"%d minuts",h:"una hora",hh:"%d hores",d:"un dia",dd:"%d dies",M:"un mes",MM:"%d mesos",y:"un any",yy:"%d anys"},dayOfMonthOrdinalParse:/\d{1,2}(r|n|t|è|a)/,ordinal:function(t,e){var n=1===t?"r":2===t?"n":3===t?"r":4===t?"t":"è";return"w"!==e&&"W"!==e||(n="a"),t+n},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n){var r=t+" ";switch(n){case"ss":return r+=1===t?"sekunda":2===t||3===t||4===t?"sekunde":"sekundi";case"m":return e?"jedna minuta":"jedne minute";case"mm":return r+=1===t?"minuta":2===t||3===t||4===t?"minute":"minuta";case"h":return e?"jedan sat":"jednog sata";case"hh":return r+=1===t?"sat":2===t||3===t||4===t?"sata":"sati";case"dd":return r+=1===t?"dan":"dana";case"MM":return r+=1===t?"mjesec":2===t||3===t||4===t?"mjeseca":"mjeseci";case"yy":return r+=1===t?"godina":2===t||3===t||4===t?"godine":"godina"}}t.defineLocale("bs",{months:"januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar".split("_"),monthsShort:"jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.".split("_"),monthsParseExact:!0,weekdays:"nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota".split("_"),weekdaysShort:"ned._pon._uto._sri._čet._pet._sub.".split("_"),weekdaysMin:"ne_po_ut_sr_če_pe_su".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY H:mm",LLLL:"dddd, D. MMMM YYYY H:mm"},calendar:{sameDay:"[danas u] LT",nextDay:"[sutra u] LT",nextWeek:function(){switch(this.day()){case 0:return"[u] [nedjelju] [u] LT";case 3:return"[u] [srijedu] [u] LT";case 6:return"[u] [subotu] [u] LT";case 1:case 2:case 4:case 5:return"[u] dddd [u] LT"}},lastDay:"[jučer u] LT",lastWeek:function(){switch(this.day()){case 0:case 3:return"[prošlu] dddd [u] LT";case 6:return"[prošle] [subote] [u] LT";case 1:case 2:case 4:case 5:return"[prošli] dddd [u] LT"}},sameElse:"L"},relativeTime:{future:"za %s",past:"prije %s",s:"par sekundi",ss:e,m:e,mm:e,h:e,hh:e,d:"dan",dd:e,M:"mjesec",MM:e,y:"godinu",yy:e},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n){return t+" "+function(t,e){return 2===e?function(t){var e={m:"v",b:"v",d:"z"};return void 0===e[t.charAt(0)]?t:e[t.charAt(0)]+t.substring(1)}(t):t}({mm:"munutenn",MM:"miz",dd:"devezh"}[n],t)}t.defineLocale("br",{months:"Genver_C'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu".split("_"),monthsShort:"Gen_C'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker".split("_"),weekdays:"Sul_Lun_Meurzh_Merc'her_Yaou_Gwener_Sadorn".split("_"),weekdaysShort:"Sul_Lun_Meu_Mer_Yao_Gwe_Sad".split("_"),weekdaysMin:"Su_Lu_Me_Mer_Ya_Gw_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"h[e]mm A",LTS:"h[e]mm:ss A",L:"DD/MM/YYYY",LL:"D [a viz] MMMM YYYY",LLL:"D [a viz] MMMM YYYY h[e]mm A",LLLL:"dddd, D [a viz] MMMM YYYY h[e]mm A"},calendar:{sameDay:"[Hiziv da] LT",nextDay:"[Warc'hoazh da] LT",nextWeek:"dddd [da] LT",lastDay:"[Dec'h da] LT",lastWeek:"dddd [paset da] LT",sameElse:"L"},relativeTime:{future:"a-benn %s",past:"%s 'zo",s:"un nebeud segondennoù",ss:"%d eilenn",m:"ur vunutenn",mm:e,h:"un eur",hh:"%d eur",d:"un devezh",dd:e,M:"ur miz",MM:e,y:"ur bloaz",yy:function(t){switch(function t(e){return e>9?t(e%10):e}(t)){case 1:case 3:case 4:case 5:case 9:return t+" bloaz";default:return t+" vloaz"}}},dayOfMonthOrdinalParse:/\d{1,2}(añ|vet)/,ordinal:function(t){var e=1===t?"añ":"vet";return t+e},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"༡",2:"༢",3:"༣",4:"༤",5:"༥",6:"༦",7:"༧",8:"༨",9:"༩",0:"༠"},n={"༡":"1","༢":"2","༣":"3","༤":"4","༥":"5","༦":"6","༧":"7","༨":"8","༩":"9","༠":"0"};t.defineLocale("bo",{months:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),monthsShort:"ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ".split("_"),weekdays:"གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་".split("_"),weekdaysShort:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),weekdaysMin:"ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་".split("_"),longDateFormat:{LT:"A h:mm",LTS:"A h:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm",LLLL:"dddd, D MMMM YYYY, A h:mm"},calendar:{sameDay:"[དི་རིང] LT",nextDay:"[སང་ཉིན] LT",nextWeek:"[བདུན་ཕྲག་རྗེས་མ], LT",lastDay:"[ཁ་སང] LT",lastWeek:"[བདུན་ཕྲག་མཐའ་མ] dddd, LT",sameElse:"L"},relativeTime:{future:"%s ལ་",past:"%s སྔན་ལ",s:"ལམ་སང",ss:"%d སྐར་ཆ།",m:"སྐར་མ་གཅིག",mm:"%d སྐར་མ",h:"ཆུ་ཚོད་གཅིག",hh:"%d ཆུ་ཚོད",d:"ཉིན་གཅིག",dd:"%d ཉིན་",M:"ཟླ་བ་གཅིག",MM:"%d ཟླ་བ",y:"ལོ་གཅིག",yy:"%d ལོ"},preparse:function(t){return t.replace(/[༡༢༣༤༥༦༧༨༩༠]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,meridiemHour:function(t,e){return 12===t&&(t=0),"མཚན་མོ"===e&&t>=4||"ཉིན་གུང"===e&&t<5||"དགོང་དག"===e?t+12:t},meridiem:function(t,e,n){return t<4?"མཚན་མོ":t<10?"ཞོགས་ཀས":t<17?"ཉིན་གུང":t<20?"དགོང་དག":"མཚན་མོ"},week:{dow:0,doy:6}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"১",2:"২",3:"৩",4:"৪",5:"৫",6:"৬",7:"৭",8:"৮",9:"৯",0:"০"},n={"১":"1","২":"2","৩":"3","৪":"4","৫":"5","৬":"6","৭":"7","৮":"8","৯":"9","০":"0"};t.defineLocale("bn",{months:"জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর".split("_"),monthsShort:"জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে".split("_"),weekdays:"রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার".split("_"),weekdaysShort:"রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি".split("_"),weekdaysMin:"রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি".split("_"),longDateFormat:{LT:"A h:mm সময়",LTS:"A h:mm:ss সময়",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY, A h:mm সময়",LLLL:"dddd, D MMMM YYYY, A h:mm সময়"},calendar:{sameDay:"[আজ] LT",nextDay:"[আগামীকাল] LT",nextWeek:"dddd, LT",lastDay:"[গতকাল] LT",lastWeek:"[গত] dddd, LT",sameElse:"L"},relativeTime:{future:"%s পরে",past:"%s আগে",s:"কয়েক সেকেন্ড",ss:"%d সেকেন্ড",m:"এক মিনিট",mm:"%d মিনিট",h:"এক ঘন্টা",hh:"%d ঘন্টা",d:"এক দিন",dd:"%d দিন",M:"এক মাস",MM:"%d মাস",y:"এক বছর",yy:"%d বছর"},preparse:function(t){return t.replace(/[১২৩৪৫৬৭৮৯০]/g,function(t){return n[t]})},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]})},meridiemParse:/রাত|সকাল|দুপুর|বিকাল|রাত/,meridiemHour:function(t,e){return 12===t&&(t=0),"রাত"===e&&t>=4||"দুপুর"===e&&t<5||"বিকাল"===e?t+12:t},meridiem:function(t,e,n){return t<4?"রাত":t<10?"সকাল":t<17?"দুপুর":t<20?"বিকাল":"রাত"},week:{dow:0,doy:6}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("bm",{months:"Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo".split("_"),monthsShort:"Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des".split("_"),weekdays:"Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri".split("_"),weekdaysShort:"Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib".split("_"),weekdaysMin:"Ka_Nt_Ta_Ar_Al_Ju_Si".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"MMMM [tile] D [san] YYYY",LLL:"MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm",LLLL:"dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm"},calendar:{sameDay:"[Bi lɛrɛ] LT",nextDay:"[Sini lɛrɛ] LT",nextWeek:"dddd [don lɛrɛ] LT",lastDay:"[Kunu lɛrɛ] LT",lastWeek:"dddd [tɛmɛnen lɛrɛ] LT",sameElse:"L"},relativeTime:{future:"%s kɔnɔ",past:"a bɛ %s bɔ",s:"sanga dama dama",ss:"sekondi %d",m:"miniti kelen",mm:"miniti %d",h:"lɛrɛ kelen",hh:"lɛrɛ %d",d:"tile kelen",dd:"tile %d",M:"kalo kelen",MM:"kalo %d",y:"san kelen",yy:"san %d"},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("bg",{months:"януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември".split("_"),monthsShort:"янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек".split("_"),weekdays:"неделя_понеделник_вторник_сряда_четвъртък_петък_събота".split("_"),weekdaysShort:"нед_пон_вто_сря_чет_пет_съб".split("_"),weekdaysMin:"нд_пн_вт_ср_чт_пт_сб".split("_"),longDateFormat:{LT:"H:mm",LTS:"H:mm:ss",L:"D.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY H:mm",LLLL:"dddd, D MMMM YYYY H:mm"},calendar:{sameDay:"[Днес в] LT",nextDay:"[Утре в] LT",nextWeek:"dddd [в] LT",lastDay:"[Вчера в] LT",lastWeek:function(){switch(this.day()){case 0:case 3:case 6:return"[В изминалата] dddd [в] LT";case 1:case 2:case 4:case 5:return"[В изминалия] dddd [в] LT"}},sameElse:"L"},relativeTime:{future:"след %s",past:"преди %s",s:"няколко секунди",ss:"%d секунди",m:"минута",mm:"%d минути",h:"час",hh:"%d часа",d:"ден",dd:"%d дни",M:"месец",MM:"%d месеца",y:"година",yy:"%d години"},dayOfMonthOrdinalParse:/\d{1,2}-(ев|ен|ти|ви|ри|ми)/,ordinal:function(t){var e=t%10,n=t%100;return 0===t?t+"-ев":0===n?t+"-ен":n>10&&n<20?t+"-ти":1===e?t+"-ви":2===e?t+"-ри":7===e||8===e?t+"-ми":t+"-ти"},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";function e(t,e,n){var r,i,a={ss:e?"секунда_секунды_секунд":"секунду_секунды_секунд",mm:e?"хвіліна_хвіліны_хвілін":"хвіліну_хвіліны_хвілін",hh:e?"гадзіна_гадзіны_гадзін":"гадзіну_гадзіны_гадзін",dd:"дзень_дні_дзён",MM:"месяц_месяцы_месяцаў",yy:"год_гады_гадоў"};return"m"===n?e?"хвіліна":"хвіліну":"h"===n?e?"гадзіна":"гадзіну":t+" "+(r=+t,i=a[n].split("_"),r%10==1&&r%100!=11?i[0]:r%10>=2&&r%10<=4&&(r%100<10||r%100>=20)?i[1]:i[2])}t.defineLocale("be",{months:{format:"студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня".split("_"),standalone:"студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань".split("_")},monthsShort:"студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж".split("_"),weekdays:{format:"нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу".split("_"),standalone:"нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота".split("_"),isFormat:/\[ ?[Вв] ?(?:мінулую|наступную)? ?\] ?dddd/},weekdaysShort:"нд_пн_ат_ср_чц_пт_сб".split("_"),weekdaysMin:"нд_пн_ат_ср_чц_пт_сб".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY г.",LLL:"D MMMM YYYY г., HH:mm",LLLL:"dddd, D MMMM YYYY г., HH:mm"},calendar:{sameDay:"[Сёння ў] LT",nextDay:"[Заўтра ў] LT",lastDay:"[Учора ў] LT",nextWeek:function(){return"[У] dddd [ў] LT"},lastWeek:function(){switch(this.day()){case 0:case 3:case 5:case 6:return"[У мінулую] dddd [ў] LT";case 1:case 2:case 4:return"[У мінулы] dddd [ў] LT"}},sameElse:"L"},relativeTime:{future:"праз %s",past:"%s таму",s:"некалькі секунд",m:e,mm:e,h:e,hh:e,d:"дзень",dd:e,M:"месяц",MM:e,y:"год",yy:e},meridiemParse:/ночы|раніцы|дня|вечара/,isPM:function(t){return/^(дня|вечара)$/.test(t)},meridiem:function(t,e,n){return t<4?"ночы":t<12?"раніцы":t<17?"дня":"вечара"},dayOfMonthOrdinalParse:/\d{1,2}-(і|ы|га)/,ordinal:function(t,e){switch(e){case"M":case"d":case"DDD":case"w":case"W":return t%10!=2&&t%10!=3||t%100==12||t%100==13?t+"-ы":t+"-і";case"D":return t+"-га";default:return t}},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"-inci",5:"-inci",8:"-inci",70:"-inci",80:"-inci",2:"-nci",7:"-nci",20:"-nci",50:"-nci",3:"-üncü",4:"-üncü",100:"-üncü",6:"-ncı",9:"-uncu",10:"-uncu",30:"-uncu",60:"-ıncı",90:"-ıncı"};t.defineLocale("az",{months:"yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr".split("_"),monthsShort:"yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek".split("_"),weekdays:"Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə".split("_"),weekdaysShort:"Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən".split("_"),weekdaysMin:"Bz_BE_ÇA_Çə_CA_Cü_Şə".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[bugün saat] LT",nextDay:"[sabah saat] LT",nextWeek:"[gələn həftə] dddd [saat] LT",lastDay:"[dünən] LT",lastWeek:"[keçən həftə] dddd [saat] LT",sameElse:"L"},relativeTime:{future:"%s sonra",past:"%s əvvəl",s:"birneçə saniyyə",ss:"%d saniyə",m:"bir dəqiqə",mm:"%d dəqiqə",h:"bir saat",hh:"%d saat",d:"bir gün",dd:"%d gün",M:"bir ay",MM:"%d ay",y:"bir il",yy:"%d il"},meridiemParse:/gecə|səhər|gündüz|axşam/,isPM:function(t){return/^(gündüz|axşam)$/.test(t)},meridiem:function(t,e,n){return t<4?"gecə":t<12?"səhər":t<17?"gündüz":"axşam"},dayOfMonthOrdinalParse:/\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,ordinal:function(t){if(0===t)return t+"-ıncı";var n=t%10,r=t%100-n,i=t>=100?100:null;return t+(e[n]||e[r]||e[i])},week:{dow:1,doy:7}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ar-tn",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:1,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"};t.defineLocale("ar-sa",{months:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},preparse:function(t){return t.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(t){return n[t]}).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},week:{dow:0,doy:6}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ar-ma",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:6,doy:12}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7",8:"8",9:"9",0:"0"},n=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},r={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},i=function(t){return function(e,i,a,o){var s=n(e),u=r[t][n(e)];return 2===s&&(u=u[i?0:1]),u.replace(/%d/i,e)}},a=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];t.defineLocale("ar-ly",{months:a,monthsShort:a,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:i("s"),ss:i("s"),m:i("m"),mm:i("m"),h:i("h"),hh:i("h"),d:i("d"),dd:i("d"),M:i("M"),MM:i("M"),y:i("y"),yy:i("y")},preparse:function(t){return t.replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ar-kw",{months:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),monthsShort:"يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر".split("_"),weekdays:"الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:12}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("ar-dz",{months:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),monthsShort:"جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر".split("_"),weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"أح_إث_ثلا_أر_خم_جم_سب".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},calendar:{sameDay:"[اليوم على الساعة] LT",nextDay:"[غدا على الساعة] LT",nextWeek:"dddd [على الساعة] LT",lastDay:"[أمس على الساعة] LT",lastWeek:"dddd [على الساعة] LT",sameElse:"L"},relativeTime:{future:"في %s",past:"منذ %s",s:"ثوان",ss:"%d ثانية",m:"دقيقة",mm:"%d دقائق",h:"ساعة",hh:"%d ساعات",d:"يوم",dd:"%d أيام",M:"شهر",MM:"%d أشهر",y:"سنة",yy:"%d سنوات"},week:{dow:0,doy:4}})}(n(0))},function(t,e,n){!function(t){"use strict";var e={1:"١",2:"٢",3:"٣",4:"٤",5:"٥",6:"٦",7:"٧",8:"٨",9:"٩",0:"٠"},n={"١":"1","٢":"2","٣":"3","٤":"4","٥":"5","٦":"6","٧":"7","٨":"8","٩":"9","٠":"0"},r=function(t){return 0===t?0:1===t?1:2===t?2:t%100>=3&&t%100<=10?3:t%100>=11?4:5},i={s:["أقل من ثانية","ثانية واحدة",["ثانيتان","ثانيتين"],"%d ثوان","%d ثانية","%d ثانية"],m:["أقل من دقيقة","دقيقة واحدة",["دقيقتان","دقيقتين"],"%d دقائق","%d دقيقة","%d دقيقة"],h:["أقل من ساعة","ساعة واحدة",["ساعتان","ساعتين"],"%d ساعات","%d ساعة","%d ساعة"],d:["أقل من يوم","يوم واحد",["يومان","يومين"],"%d أيام","%d يومًا","%d يوم"],M:["أقل من شهر","شهر واحد",["شهران","شهرين"],"%d أشهر","%d شهرا","%d شهر"],y:["أقل من عام","عام واحد",["عامان","عامين"],"%d أعوام","%d عامًا","%d عام"]},a=function(t){return function(e,n,a,o){var s=r(e),u=i[t][r(e)];return 2===s&&(u=u[n?0:1]),u.replace(/%d/i,e)}},o=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"];t.defineLocale("ar",{months:o,monthsShort:o,weekdays:"الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت".split("_"),weekdaysShort:"أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت".split("_"),weekdaysMin:"ح_ن_ث_ر_خ_ج_س".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"D/‏M/‏YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd D MMMM YYYY HH:mm"},meridiemParse:/ص|م/,isPM:function(t){return"م"===t},meridiem:function(t,e,n){return t<12?"ص":"م"},calendar:{sameDay:"[اليوم عند الساعة] LT",nextDay:"[غدًا عند الساعة] LT",nextWeek:"dddd [عند الساعة] LT",lastDay:"[أمس عند الساعة] LT",lastWeek:"dddd [عند الساعة] LT",sameElse:"L"},relativeTime:{future:"بعد %s",past:"منذ %s",s:a("s"),ss:a("s"),m:a("m"),mm:a("m"),h:a("h"),hh:a("h"),d:a("d"),dd:a("d"),M:a("M"),MM:a("M"),y:a("y"),yy:a("y")},preparse:function(t){return t.replace(/[١٢٣٤٥٦٧٨٩٠]/g,function(t){return n[t]}).replace(/،/g,",")},postformat:function(t){return t.replace(/\d/g,function(t){return e[t]}).replace(/,/g,"،")},week:{dow:6,doy:12}})}(n(0))},function(t,e,n){!function(t){"use strict";t.defineLocale("af",{months:"Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember".split("_"),monthsShort:"Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des".split("_"),weekdays:"Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag".split("_"),weekdaysShort:"Son_Maa_Din_Woe_Don_Vry_Sat".split("_"),weekdaysMin:"So_Ma_Di_Wo_Do_Vr_Sa".split("_"),meridiemParse:/vm|nm/i,isPM:function(t){return/^nm$/i.test(t)},meridiem:function(t,e,n){return t<12?n?"vm":"VM":n?"nm":"NM"},longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD/MM/YYYY",LL:"D MMMM YYYY",LLL:"D MMMM YYYY HH:mm",LLLL:"dddd, D MMMM YYYY HH:mm"},calendar:{sameDay:"[Vandag om] LT",nextDay:"[Môre om] LT",nextWeek:"dddd [om] LT",lastDay:"[Gister om] LT",lastWeek:"[Laas] dddd [om] LT",sameElse:"L"},relativeTime:{future:"oor %s",past:"%s gelede",s:"'n paar sekondes",ss:"%d sekondes",m:"'n minuut",mm:"%d minute",h:"'n uur",hh:"%d ure",d:"'n dag",dd:"%d dae",M:"'n maand",MM:"%d maande",y:"'n jaar",yy:"%d jaar"},dayOfMonthOrdinalParse:/\d{1,2}(ste|de)/,ordinal:function(t){return t+(1===t||8===t||t>=20?"ste":"de")},week:{dow:1,doy:4}})}(n(0))},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){(t.exports=n(9)(!1)).push([t.i,'.label{font-family:trebuchet ms,verdana,arial;color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#eee;stroke:#999;stroke-width:1px}.node.clickable{cursor:pointer}.arrowheadPath{fill:#333}.edgePath .path{stroke:#666;stroke-width:1.5px}.edgeLabel{background-color:#fff}.cluster rect{fill:#eaf2fb!important;stroke:#26a!important;stroke-width:1px!important}.cluster text{fill:#333}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:trebuchet ms,verdana,arial;font-size:12px;background:#eaf2fb;border:1px solid #26a;border-radius:2px;pointer-events:none;z-index:100}.actor{stroke:#999;fill:#eee}text.actor{fill:#333;stroke:none}.actor-line{stroke:#666}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#arrowhead{fill:#333}#crosshead path{fill:#333!important;stroke:#333!important}.messageText{fill:#333;stroke:none}.labelBox{stroke:#999;fill:#eee}.labelText,.loopText{fill:#fff;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#999}.note{stroke:#770;fill:#ffa}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0,.section2{fill:#80b3e6}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#333}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#e6e6e6;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:#d42;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#333;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#333;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:#26a;stroke:#1a4d80}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#333}.active0,.active1,.active2,.active3{fill:#eee;stroke:#1a4d80}.activeText0,.activeText1,.activeText2,.activeText3{fill:#333!important}.done0,.done1,.done2,.done3{stroke:#666;fill:#bbb;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#333!important}.crit0,.crit1,.crit2,.crit3{stroke:#b1361b;fill:#d42;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#b1361b;fill:#eee;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#b1361b;fill:#bbb;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#333!important}.titleText{text-anchor:middle;font-size:18px;fill:#333}g.classGroup text{fill:#999;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#eee;stroke:#999}g.classGroup line{stroke:#999;stroke-width:1}.classLabel .box{stroke:none;stroke-width:0;fill:#eee;opacity:.5}.classLabel .label{fill:#999;font-size:10px}.relation{stroke:#999;stroke-width:1;fill:none}#compositionEnd,#compositionStart{fill:#999;stroke:#999;stroke-width:1}#aggregationEnd,#aggregationStart{fill:#eee;stroke:#999;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:#999;stroke:#999;stroke-width:1}.branch-label,.commit-id,.commit-msg{fill:#d3d3d3;color:#d3d3d3}',""])},function(t,e,n){var r=n(152);t.exports="string"==typeof r?r:r.toString()},function(t,e,n){(t.exports=n(9)(!1)).push([t.i,'.label{font-family:trebuchet ms,verdana,arial;color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#cde498;stroke:#13540c;stroke-width:1px}.node.clickable{cursor:pointer}.arrowheadPath{fill:green}.edgePath .path{stroke:green;stroke-width:1.5px}.edgeLabel{background-color:#e8e8e8}.cluster rect{fill:#cdffb2!important;stroke:#6eaa49!important;stroke-width:1px!important}.cluster text{fill:#333}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:trebuchet ms,verdana,arial;font-size:12px;background:#cdffb2;border:1px solid #6eaa49;border-radius:2px;pointer-events:none;z-index:100}.actor{stroke:#13540c;fill:#cde498}text.actor{fill:#000;stroke:none}.actor-line{stroke:grey}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#arrowhead{fill:#333}#crosshead path{fill:#333!important;stroke:#333!important}.messageText{fill:#333;stroke:none}.labelBox{stroke:#326932;fill:#cde498}.labelText,.loopText{fill:#000;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#326932}.note{stroke:#6eaa49;fill:#fff5ad}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0,.section2{fill:#6eaa49}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#333}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#d3d3d3;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:red;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:#487e3a;stroke:#13540c}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#000}.active0,.active1,.active2,.active3{fill:#cde498;stroke:#13540c}.activeText0,.activeText1,.activeText2,.activeText3{fill:#000!important}.done0,.done1,.done2,.done3{stroke:grey;fill:#d3d3d3;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#000!important}.crit0,.crit1,.crit2,.crit3{stroke:#f88;fill:red;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#f88;fill:#cde498;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#000!important}.titleText{text-anchor:middle;font-size:18px;fill:#000}g.classGroup text{fill:#13540c;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#cde498;stroke:#13540c}g.classGroup line{stroke:#13540c;stroke-width:1}.classLabel .box{stroke:none;stroke-width:0;fill:#cde498;opacity:.5}.classLabel .label{fill:#13540c;font-size:10px}.relation{stroke:#13540c;stroke-width:1;fill:none}#compositionEnd,#compositionStart{fill:#13540c;stroke:#13540c;stroke-width:1}#aggregationEnd,#aggregationStart{fill:#cde498;stroke:#13540c;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:#13540c;stroke:#13540c;stroke-width:1}.branch-label,.commit-id,.commit-msg{fill:#d3d3d3;color:#d3d3d3}',""])},function(t,e,n){var r=n(154);t.exports="string"==typeof r?r:r.toString()},function(t,e,n){(t.exports=n(9)(!1)).push([t.i,'.label{font-family:trebuchet ms,verdana,arial;color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#ececff;stroke:#9370db;stroke-width:1px}.node.clickable{cursor:pointer}.arrowheadPath{fill:#333}.edgePath .path{stroke:#333;stroke-width:1.5px}.edgeLabel{background-color:#e8e8e8}.cluster rect{fill:#ffffde!important;stroke:#aa3!important;stroke-width:1px!important}.cluster text{fill:#333}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:trebuchet ms,verdana,arial;font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}.actor{stroke:#ccf;fill:#ececff}text.actor{fill:#000;stroke:none}.actor-line{stroke:grey}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#arrowhead{fill:#333}#crosshead path{fill:#333!important;stroke:#333!important}.messageText{fill:#333;stroke:none}.labelBox{stroke:#ccf;fill:#ececff}.labelText,.loopText{fill:#000;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#ccf}.note{stroke:#aa3;fill:#fff5ad}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0{fill:rgba(102,102,255,.49)}.section2{fill:#fff400}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#333}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#d3d3d3;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:red;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:#8a90dd;stroke:#534fbc}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#000}.active0,.active1,.active2,.active3{fill:#bfc7ff;stroke:#534fbc}.activeText0,.activeText1,.activeText2,.activeText3{fill:#000!important}.done0,.done1,.done2,.done3{stroke:grey;fill:#d3d3d3;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#000!important}.crit0,.crit1,.crit2,.crit3{stroke:#f88;fill:red;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#000!important}.titleText{text-anchor:middle;font-size:18px;fill:#000}g.classGroup text{fill:#9370db;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#ececff;stroke:#9370db}g.classGroup line{stroke:#9370db;stroke-width:1}.classLabel .box{stroke:none;stroke-width:0;fill:#ececff;opacity:.5}.classLabel .label{fill:#9370db;font-size:10px}.relation{stroke:#9370db;stroke-width:1;fill:none}#compositionEnd,#compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#aggregationEnd,#aggregationStart{fill:#ececff;stroke:#9370db;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}.branch-label,.commit-id,.commit-msg{fill:#d3d3d3;color:#d3d3d3}',""])},function(t,e,n){var r=n(156);t.exports="string"==typeof r?r:r.toString()},function(t,e,n){(t.exports=n(9)(!1)).push([t.i,'.label{font-family:trebuchet ms,verdana,arial;color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#bdd5ea;stroke:purple;stroke-width:1px}.node.clickable{cursor:pointer}.arrowheadPath{fill:#d3d3d3}.edgePath .path{stroke:#d3d3d3;stroke-width:1.5px}.edgeLabel{background-color:#e8e8e8}.cluster rect{fill:#6d6d65!important;stroke:hsla(0,0%,100%,.25)!important;stroke-width:1px!important}.cluster text{fill:#f9fffe}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:trebuchet ms,verdana,arial;font-size:12px;background:#6d6d65;border:1px solid hsla(0,0%,100%,.25);border-radius:2px;pointer-events:none;z-index:100}.actor{stroke:#81b1db;fill:#bdd5ea}text.actor{fill:#000;stroke:none}.actor-line{stroke:#d3d3d3}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#d3d3d3}#arrowhead{fill:#d3d3d3}#crosshead path{fill:#d3d3d3!important;stroke:#d3d3d3!important}.messageText{fill:#d3d3d3;stroke:none}.labelBox{stroke:#81b1db;fill:#bdd5ea}.labelText,.loopText{fill:#d3d3d3;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#81b1db}.note{stroke:hsla(0,0%,100%,.25);fill:#fff5ad}.noteText{fill:#000;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:14px}.section{stroke:none;opacity:.2}.section0{fill:hsla(0,0%,100%,.3)}.section2{fill:#eae8b9}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#f9fffe}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#d3d3d3;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:#db5757;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#323d47;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#323d47;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#323d47}.task0,.task1,.task2,.task3{fill:#bdd5ea;stroke:hsla(0,0%,100%,.5)}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#d3d3d3}.active0,.active1,.active2,.active3{fill:#81b1db;stroke:hsla(0,0%,100%,.5)}.activeText0,.activeText1,.activeText2,.activeText3{fill:#323d47!important}.done0,.done1,.done2,.done3{stroke:grey;fill:#d3d3d3;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#323d47!important}.crit0,.crit1,.crit2,.crit3{stroke:#e83737;fill:#e83737;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#e83737;fill:#81b1db;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#e83737;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#323d47!important}.titleText{text-anchor:middle;font-size:18px;fill:#323d47}g.classGroup text{fill:purple;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#bdd5ea;stroke:purple}g.classGroup line{stroke:purple;stroke-width:1}.classLabel .box{stroke:none;stroke-width:0;fill:#bdd5ea;opacity:.5}.classLabel .label{fill:purple;font-size:10px}.relation{stroke:purple;stroke-width:1;fill:none}#compositionEnd,#compositionStart{fill:purple;stroke:purple;stroke-width:1}#aggregationEnd,#aggregationStart{fill:#bdd5ea;stroke:purple;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:purple;stroke:purple;stroke-width:1}.branch-label,.commit-id,.commit-msg{fill:#d3d3d3;color:#d3d3d3}',""])},function(t,e,n){var r=n(158);t.exports="string"==typeof r?r:r.toString()},function(t,e,n){var r={"./dark/index.scss":159,"./default/index.scss":157,"./forest/index.scss":155,"./neutral/index.scss":153};function i(t){var e=a(t);return n(e)}function a(t){var e=r[t];if(!(e+1)){var n=new Error('Cannot find module "'+t+'".');throw n.code="MODULE_NOT_FOUND",n}return e}i.keys=function(){return Object.keys(r)},i.resolve=a,t.exports=i,i.id=160},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.draw=e.setConf=void 0;var r=c(n(8)),i=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(3)),a=c(n(14)),o=c(n(13)),s=n(2),u=n(10);function c(t){return t&&t.__esModule?t:{default:t}}var l={},d=void 0,f={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}},h={},_=e.setConf=function(t){h=t};function p(t,e,n,r){var a=(0,u.interpolateToCurve)(r,i.curveBasis),o=f.branchColors[n%f.branchColors.length],s=i.line().x(function(t){return Math.round(t.x)}).y(function(t){return Math.round(t.y)}).curve(a);t.append("svg:path").attr("d",s(e)).style("stroke",o).style("stroke-width",f.lineStrokeWidth).style("fill","none")}function m(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 y(t,e,n,r,i){s.logger.debug("svgDrawLineForCommits: ",e,n);var a=m(t.select("#node-"+e+" circle")),o=m(t.select("#node-"+n+" circle"));switch(r){case"LR":if(a.left-o.left>f.nodeSpacing){var u={x:a.left-f.nodeSpacing,y:o.top+o.height/2};p(t,[u,{x:o.left+o.width,y:o.top+o.height/2}],i,"linear"),p(t,[{x:a.left,y:a.top+a.height/2},{x:a.left-f.nodeSpacing/2,y:a.top+a.height/2},{x:a.left-f.nodeSpacing/2,y:u.y},u],i)}else p(t,[{x:a.left,y:a.top+a.height/2},{x:a.left-f.nodeSpacing/2,y:a.top+a.height/2},{x:a.left-f.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>f.nodeSpacing){var c={x:o.left+o.width/2,y:a.top+a.height+f.nodeSpacing};p(t,[c,{x:o.left+o.width/2,y:o.top}],i,"linear"),p(t,[{x:a.left+a.width/2,y:a.top+a.height},{x:a.left+a.width/2,y:a.top+a.height+f.nodeSpacing/2},{x:o.left+o.width/2,y:c.y-f.nodeSpacing/2},c],i)}else p(t,[{x:a.left+a.width/2,y:a.top+a.height},{x:a.left+a.width/2,y:a.top+f.nodeSpacing/2},{x:o.left+o.width/2,y:o.top-f.nodeSpacing/2},{x:o.left+o.width/2,y:o.top}],i)}}function g(t,e){return t.select(e).node().cloneNode(!0)}var v=e.draw=function(t,e,n){try{var u=o.default.parser;u.yy=a.default,s.logger.debug("in gitgraph renderer",t,e,n),u.parse(t+"\n"),f=r.default.extend(f,h,a.default.getOptions()),s.logger.debug("effective options",f);var c=a.default.getDirection();l=a.default.getCommits();var _=a.default.getBranchesAsObjArray();"BT"===c&&(f.nodeLabel.x=_.length*f.branchOffset,f.nodeLabel.width="100%",f.nodeLabel.y=-2*f.nodeRadius);var p=i.select('[id="'+e+'"]');!function(t){t.append("defs").append("g").attr("id","def-commit").append("circle").attr("r",f.nodeRadius).attr("cx",0).attr("cy",0),t.select("#def-commit").append("foreignObject").attr("width",f.nodeLabel.width).attr("height",f.nodeLabel.height).attr("x",f.nodeLabel.x).attr("y",f.nodeLabel.y).attr("class","node-label").attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").append("p").html("")}(p),d=1,r.default.each(_,function(t){!function t(e,n,i,a){var o=void 0,u=Object.keys(l).length;if(r.default.isString(n))do{if(o=l[n],s.logger.debug("in renderCommitHistory",o.id,o.seq),e.select("#node-"+n).size()>0)return;e.append(function(){return g(e,"#def-commit")}).attr("class","commit").attr("id",function(){return"node-"+o.id}).attr("transform",function(){switch(a){case"LR":return"translate("+(o.seq*f.nodeSpacing+f.leftMargin)+", "+d*f.branchOffset+")";case"BT":return"translate("+(d*f.branchOffset+f.leftMargin)+", "+(u-o.seq)*f.nodeSpacing+")"}}).attr("fill",f.nodeFillColor).attr("stroke",f.nodeStrokeColor).attr("stroke-width",f.nodeStrokeWidth);var c=r.default.find(i,["commit",o]);c&&(s.logger.debug("found branch ",c.name),e.select("#node-"+o.id+" p").append("xhtml:span").attr("class","branch-label").text(c.name+", ")),e.select("#node-"+o.id+" p").append("xhtml:span").attr("class","commit-id").text(o.id),""!==o.message&&"BT"===a&&e.select("#node-"+o.id+" p").append("xhtml:span").attr("class","commit-msg").text(", "+o.message),n=o.parent}while(n&&l[n]);r.default.isArray(n)&&(s.logger.debug("found merge commmit",n),t(e,n[0],i,a),d++,t(e,n[1],i,a),d--)}(p,t.commit.id,_,c),function t(e,n,i,a){for(a=a||0;n.seq>0&&!n.lineDrawn;)r.default.isString(n.parent)?(y(e,n.id,n.parent,i,a),n.lineDrawn=!0,n=l[n.parent]):r.default.isArray(n.parent)&&(y(e,n.id,n.parent[0],i,a),y(e,n.id,n.parent[1],i,a+1),t(e,l[n.parent[1]],i,a+1),n.lineDrawn=!0,n=l[n.parent[0]])}(p,t.commit,c),d++}),p.attr("height",function(){return"BT"===c?Object.keys(l).length*f.nodeSpacing:(_.length+1)*f.branchOffset})}catch(t){s.logger.error("Error while rendering gitgraph"),s.logger.error(t.message)}};e.default={setConf:_,draw:v}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.draw=e.setConf=void 0;var r=c(n(21)),i=c(n(12)),a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(3)),o=c(n(16)),s=n(2),u=n(15);function c(t){return t&&t.__esModule?t:{default:t}}u.parser.yy=o.default;var l={},d=0,f={dividerMargin:10,padding:5,textHeight:10},h=function(t){for(var e=Object.keys(l),n=0;n<e.length;n++)if(l[e[n]].label===t)return e[n]},_=0,p=function(t,e){s.logger.info("Rendering class "+e);var n=function(t,e,n){var r=t.append("tspan").attr("x",f.padding).text(e);n||r.attr("dy",f.textHeight)},r="classId"+d,i={id:r,label:e.id,width:0,height:0},a=t.append("g").attr("id",r).attr("class","classGroup"),o=a.append("text").attr("x",f.padding).attr("y",f.textHeight+f.padding).text(e.id).node().getBBox().height,u=a.append("line").attr("x1",0).attr("y1",f.padding+o+f.dividerMargin/2).attr("y2",f.padding+o+f.dividerMargin/2),c=a.append("text").attr("x",f.padding).attr("y",o+f.dividerMargin+f.textHeight).attr("fill","white").attr("class","classText"),h=!0;e.members.forEach(function(t){n(c,t,h),h=!1});var _=c.node().getBBox(),p=a.append("line").attr("x1",0).attr("y1",f.padding+o+f.dividerMargin+_.height).attr("y2",f.padding+o+f.dividerMargin+_.height),m=a.append("text").attr("x",f.padding).attr("y",o+2*f.dividerMargin+_.height+f.textHeight).attr("fill","white").attr("class","classText");h=!0,e.methods.forEach(function(t){n(m,t,h),h=!1});var y=a.node().getBBox();return a.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",y.width+2*f.padding).attr("height",y.height+f.padding+.5*f.dividerMargin),u.attr("x2",y.width+2*f.padding),p.attr("x2",y.width+2*f.padding),i.width=y.width+2*f.padding,i.height=y.height+f.padding+.5*f.dividerMargin,l[r]=i,d++,i},m=e.setConf=function(t){Object.keys(t).forEach(function(e){f[e]=t[e]})},y=e.draw=function(t,e){u.parser.yy.clear(),u.parser.parse(t),s.logger.info("Rendering diagram "+t);var n,c=a.select('[id="'+e+'"]');(n=c).append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),n.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),n.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),n.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),n.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),n.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),n.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),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 18,7 L9,13 L14,7 L9,1 Z");var l=new i.default.Graph({multigraph:!0});l.setGraph({isMultiGraph:!0}),l.setDefaultEdgeLabel(function(){return{}});for(var d=o.default.getClasses(),m=Object.keys(d),y=0;y<m.length;y++){var g=d[m[y]],v=p(c,g);l.setNode(v.id,v),s.logger.info("Org height: "+v.height)}o.default.getRelations().forEach(function(t){s.logger.info("tjoho"+h(t.id1)+h(t.id2)+JSON.stringify(t)),l.setEdge(h(t.id1),h(t.id2),{relation:t})}),r.default.layout(l),l.nodes().forEach(function(t){void 0!==t&&(s.logger.debug("Node "+t+": "+JSON.stringify(l.node(t))),a.select("#"+t).attr("transform","translate("+(l.node(t).x-l.node(t).width/2)+","+(l.node(t).y-l.node(t).height/2)+" )"))}),l.edges().forEach(function(t){s.logger.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(l.edge(t))),function(t,e,n){var r=function(t){switch(t){case o.default.relationType.AGGREGATION:return"aggregation";case o.default.relationType.EXTENSION:return"extension";case o.default.relationType.COMPOSITION:return"composition";case o.default.relationType.DEPENDENCY:return"dependency"}},i=e.points,s=a.line().x(function(t){return t.x}).y(function(t){return t.y}).curve(a.curveBasis),u=t.append("path").attr("d",s(i)).attr("id","edge"+_).attr("class","relation"),c="";f.arrowMarkerAbsolute&&(c=(c=(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),"none"!==n.relation.type1&&u.attr("marker-start","url("+c+"#"+r(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&u.attr("marker-end","url("+c+"#"+r(n.relation.type2)+"End)");var l=void 0,d=void 0,h=e.points.length;if(h%2!=0){var p=e.points[Math.floor(h/2)],m=e.points[Math.ceil(h/2)];l=(p.x+m.x)/2,d=(p.y+m.y)/2}else{var y=e.points[Math.floor(h/2)];l=y.x,d=y.y}if(void 0!==n.title){var g=t.append("g").attr("class","classLabel"),v=g.append("text").attr("class","label").attr("x",l).attr("y",d).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=v;var M=v.node().getBBox();g.insert("rect",":first-child").attr("class","box").attr("x",M.x-f.padding/2).attr("y",M.y-f.padding/2).attr("width",M.width+f.padding).attr("height",M.height+f.padding)}_++}(c,l.edge(t),l.edge(t).relation)}),c.attr("height","100%"),c.attr("width","100%"),c.attr("viewBox","0 0 "+(l.graph().width+20)+" "+(l.graph().height+20))};e.default={setConf:m,draw:y}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.draw=e.setConf=void 0;var r,i=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(3)),a=n(18),o=n(17),s=(r=o)&&r.__esModule?r:{default:r};a.parser.yy=s.default;var u={titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"'},c=e.setConf=function(t){Object.keys(t).forEach(function(e){u[e]=t[e]})},l=void 0,d=e.draw=function(t,e){a.parser.yy.clear(),a.parser.parse(t);var n=document.getElementById(e);void 0===(l=n.parentElement.offsetWidth)&&(l=1200),void 0!==u.useWidth&&(l=u.useWidth);var r=a.parser.yy.getTasks(),o=r.length*(u.barHeight+u.barGap)+2*u.topPadding;n.setAttribute("height","100%"),n.setAttribute("viewBox","0 0 "+l+" "+o);for(var s=i.select('[id="'+e+'"]'),c=i.scaleTime().domain([i.min(r,function(t){return t.startTime}),i.max(r,function(t){return t.endTime})]).rangeRound([0,l-u.leftPadding-u.rightPadding]),d=[],f=0;f<r.length;f++)d.push(r[f].type);var h=d;d=function(t){for(var e={},n=[],r=0,i=t.length;r<i;++r)e.hasOwnProperty(t[r])||(e[t[r]]=!0,n.push(t[r]));return n}(d),function(t,e,n){var r=u.barHeight,o=r+u.barGap,l=u.topPadding,f=u.leftPadding;i.scaleLinear().domain([0,d.length]).range(["#00B9FA","#F95002"]).interpolate(i.interpolateHcl);_=f,p=l,m=n,y=i.axisBottom(c).tickSize(-m+p+u.gridLineStartPadding).tickFormat(i.timeFormat(a.parser.yy.getAxisFormat()||u.axisFormat||"%Y-%m-%d")),s.append("g").attr("class","grid").attr("transform","translate("+_+", "+(m-50)+")").call(y).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em"),function(t,e,n,r,i,a,o,l){s.append("g").selectAll("rect").data(t).enter().append("rect").attr("x",0).attr("y",function(t,r){return r*e+n-2}).attr("width",function(){return o-u.rightPadding/2}).attr("height",e).attr("class",function(t){for(var e=0;e<d.length;e++)if(t.type===d[e])return"section section"+e%u.numberSectionStyles;return"section section0"});var f=s.append("g").selectAll("rect").data(t).enter();f.append("rect").attr("rx",3).attr("ry",3).attr("x",function(t){return c(t.startTime)+r}).attr("y",function(t,r){return r*e+n}).attr("width",function(t){return c(t.endTime)-c(t.startTime)}).attr("height",i).attr("class",function(t){for(var e="task ",n=0,r=0;r<d.length;r++)t.type===d[r]&&(n=r%u.numberSectionStyles);return t.active?t.crit?e+" activeCrit"+n:e+" active"+n:t.done?t.crit?e+" doneCrit"+n:e+" done"+n:t.crit?e+" crit"+n:e+" task"+n}),f.append("text").text(function(t){return t.task}).attr("font-size",u.fontSize).attr("x",function(t){var e=c(t.startTime),n=c(t.endTime),i=this.getBBox().width;return i>n-e?n+i+1.5*u.leftPadding>o?e+r-5:n+r+5:(n-e)/2+e+r}).attr("y",function(t,r){return r*e+u.barHeight/2+(u.fontSize/2-2)+n}).attr("text-height",i).attr("class",function(t){for(var e=c(t.startTime),n=c(t.endTime),r=this.getBBox().width,i=0,a=0;a<d.length;a++)t.type===d[a]&&(i=a%u.numberSectionStyles);var s="";return t.active&&(s=t.crit?"activeCritText"+i:"activeText"+i),t.done?s=t.crit?s+" doneCritText"+i:s+" doneText"+i:t.crit&&(s=s+" critText"+i),r>n-e?n+r+1.5*u.leftPadding>o?"taskTextOutsideLeft taskTextOutside"+i+" "+s:"taskTextOutsideRight taskTextOutside"+i+" "+s:"taskText taskText"+i+" "+s})}(t,o,l,f,r,0,e),function(t,e){for(var n=[],r=0,i=0;i<d.length;i++)n[i]=[d[i],(a=d[i],o=h,function(t){var e=t.length,n={};for(;e;)n[t[--e]]=(n[t[e]]||0)+1;return n}(o)[a]||0)];var a,o;s.append("g").selectAll("text").data(n).enter().append("text").text(function(t){return t[0]}).attr("x",10).attr("y",function(i,a){if(!(a>0))return i[1]*t/2+e;for(var o=0;o<a;o++)return r+=n[a-1][1],i[1]*t/2+r*t+e}).attr("class",function(t){for(var e=0;e<d.length;e++)if(t[0]===d[e])return"sectionTitle sectionTitle"+e%u.numberSectionStyles;return"sectionTitle"})}(o,l),function(t,e,n,r){var i=s.append("g").attr("class","today"),a=new Date;i.append("line").attr("x1",c(a)+t).attr("x2",c(a)+t).attr("y1",u.titleTopMargin).attr("y2",r-u.titleTopMargin).attr("class","today")}(f,0,0,n);var _,p,m,y}(r,l,o),void 0!==u.useWidth&&n.setAttribute("width",l),s.append("text").text(a.parser.yy.getTitle()).attr("x",l/2).attr("y",u.titleTopMargin).attr("class","titleText")};e.default={setConf:c,draw:d}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=e.drawRect=function(t,e){var n=t.append("rect");return n.attr("x",e.x),n.attr("y",e.y),n.attr("fill",e.fill),n.attr("stroke",e.stroke),n.attr("width",e.width),n.attr("height",e.height),n.attr("rx",e.rx),n.attr("ry",e.ry),void 0!==e.class&&n.attr("class",e.class),n},i=e.drawText=function(t,e,n){var r=e.text.replace(/<br\/?>/gi," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.attr("fill",e.fill),void 0!==e.class&&i.attr("class",e.class);var a=i.append("tspan");return a.attr("x",e.x+2*e.textMargin),a.attr("fill",e.fill),a.text(r),i},a=e.drawLabel=function(t,e){var n,r,a,o,s,u=t.append("polygon");u.attr("points",(n=e.x,r=e.y,n+","+r+" "+(n+(a=50))+","+r+" "+(n+a)+","+(r+(o=20)-(s=7))+" "+(n+a-1.2*s)+","+(r+o)+" "+n+","+(r+o))),u.attr("class","labelBox"),e.y=e.y+e.labelMargin,e.x=e.x+.5*e.labelMargin,i(t,e)},o=-1,s=e.drawActor=function(t,e,n,i,a){var s=e+a.width/2,u=t.append("g");0===n&&(o++,u.append("line").attr("id","actor"+o).attr("x1",s).attr("y1",5).attr("x2",s).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));var c=_();c.x=e,c.y=n,c.fill="#eaeaea",c.width=a.width,c.height=a.height,c.class="actor",c.rx=3,c.ry=3,r(u,c),p(a)(i,u,c.x,c.y,c.width,c.height,{class:"actor"})},u=e.anchorElement=function(t){return t.append("g")},c=e.drawActivation=function(t,e,n){var i=_(),a=e.anchored;i.x=e.startx,i.y=e.starty,i.fill="#f4f4f4",i.width=e.stopx-e.startx,i.height=n-e.starty,r(a,i)},l=e.drawLoop=function(t,e,n,r){var o=t.append("g"),s=function(t,e,n,r){return o.append("line").attr("x1",t).attr("y1",e).attr("x2",n).attr("y2",r).attr("class","loopLine")};s(e.startx,e.starty,e.stopx,e.starty),s(e.stopx,e.starty,e.stopx,e.stopy),s(e.startx,e.stopy,e.stopx,e.stopy),s(e.startx,e.starty,e.startx,e.stopy),void 0!==e.sections&&e.sections.forEach(function(t){s(e.startx,t,e.stopx,t).style("stroke-dasharray","3, 3")});var u=h();u.text=n,u.x=e.startx,u.y=e.starty,u.labelMargin=15,u.class="labelText",a(o,u),(u=h()).text="[ "+e.title+" ]",u.x=e.startx+(e.stopx-e.startx)/2,u.y=e.starty+1.5*r.boxMargin,u.anchor="middle",u.class="loopText",i(o,u),void 0!==e.sectionTitles&&e.sectionTitles.forEach(function(t,n){""!==t&&(u.text="[ "+t+" ]",u.y=e.sections[n]+1.5*r.boxMargin,i(o,u))})},d=e.insertArrowHead=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")},f=e.insertArrowCrossHead=function(t){var e=t.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);e.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),e.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},h=e.getTextObj=function(){return{x:0,y:0,fill:"black","text-anchor":"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0}},_=e.getNoteRect=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},p=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){var u=e.append("text").attr("x",n+a/2).attr("y",i).style("text-anchor","middle");u.append("tspan").attr("x",n+a/2).attr("dy","0").text(t),u.attr("y",i+o/2).attr("dominant-baseline","central").attr("alignment-baseline","central"),r(u,s)}function n(t,n,i,a,o,s,u){var c=n.append("switch"),l=c.append("foreignObject").attr("x",i).attr("y",a).attr("width",o).attr("height",s).append("div").style("display","table").style("height","100%").style("width","100%");l.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,c,i,a,o,s,u),r(l,u)}function r(t,e){for(var n in e)e.hasOwnProperty(n)&&t.attr(n,e[n])}return function(r){return"fo"===r.textPlacement?n:"old"===r.textPlacement?t:e}}();e.default={drawRect:r,drawText:i,drawLabel:a,drawActor:s,anchorElement:u,drawActivation:c,drawLoop:l,insertArrowHead:d,insertArrowCrossHead:f,getTextObj:h,getNoteRect:_}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.draw=e.setConf=e.drawActors=e.bounds=void 0;var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(3)),i=u(n(164)),a=n(2),o=n(20),s=u(n(19));function u(t){return t&&t.__esModule?t:{default:t}}o.parser.yy=s.default;var c={diagramMarginX:50,diagramMarginY:30,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!1,bottomMarginAdj:1,activationWidth:10,textPlacement:"tspan"},l=e.bounds={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],init:function(){this.sequenceItems=[],this.activations=[],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=this,a=0;function o(o){return function(s){a++;var u=i.sequenceItems.length-a+1;i.updateVal(s,"starty",e-u*c.boxMargin,Math.min),i.updateVal(s,"stopy",r+u*c.boxMargin,Math.max),i.updateVal(l.data,"startx",t-u*c.boxMargin,Math.min),i.updateVal(l.data,"stopx",n+u*c.boxMargin,Math.max),"activation"!==o&&(i.updateVal(s,"startx",t-u*c.boxMargin,Math.min),i.updateVal(s,"stopx",n+u*c.boxMargin,Math.max),i.updateVal(l.data,"starty",e-u*c.boxMargin,Math.min),i.updateVal(l.data,"stopy",r+u*c.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(l.data,"startx",i,Math.min),this.updateVal(l.data,"starty",o,Math.min),this.updateVal(l.data,"stopx",a,Math.max),this.updateVal(l.data,"stopy",s,Math.max),this.updateBounds(i,o,a,s)},newActivation:function(t,e){var n=o.parser.yy.getActors()[t.from.actor],r=_(t.from.actor).length,a=n.x+c.width/2+(r-1)*c.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+c.activationWidth,stopy:void 0,actor:t.from.actor,anchored:i.default.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]},newLoop:function(t){this.sequenceItems.push({startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t})},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(l.getVerticalPos()),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 this.data}},d=function(t,e,n,r,a){var o=i.default.getNoteRect();o.x=e,o.y=n,o.width=a||c.width,o.class="note";var s=t.append("g"),u=i.default.drawRect(s,o),d=function(t,e,n,r,a){var o=0,s=t.split(/<br\/?>/gi),u=!0,l=!1,d=void 0;try{for(var f,h=s[Symbol.iterator]();!(u=(f=h.next()).done);u=!0){var _=f.value,p=i.default.getTextObj();p.x=e,p.y=n+o,p.textMargin=c.noteMargin,p.dy="1em",p.text=_,p.class="noteText";var m=i.default.drawText(r,p,a);o+=(m._groups||m)[0][0].getBBox().height}}catch(t){l=!0,d=t}finally{try{!u&&h.return&&h.return()}finally{if(l)throw d}}return o}(r.message,e-4,n+24,s,o.width-c.noteMargin);l.insert(e,n,e+o.width,n+2*c.noteMargin+d),u.attr("height",d+2*c.noteMargin),l.bumpVerticalPos(d+2*c.noteMargin)},f=e.drawActors=function(t,e,n,r){for(var a=0;a<n.length;a++){var o=n[a];e[o].x=a*c.actorMargin+a*c.width,e[o].y=r,e[o].width=c.diagramMarginX,e[o].height=c.diagramMarginY,i.default.drawActor(t,e[o].x,r,e[o].description,c),l.insert(e[o].x,r,e[o].x+c.width,c.height)}l.bumpVerticalPos(c.height)},h=e.setConf=function(t){Object.keys(t).forEach(function(e){c[e]=t[e]})},_=function(t){return l.activations.filter(function(e){return e.actor===t})},p=function(t){var e=o.parser.yy.getActors(),n=_(t);return[n.reduce(function(t,e){return Math.min(t,e.startx)},e[t].x+c.width/2),n.reduce(function(t,e){return Math.max(t,e.stopx)},e[t].x+c.width/2)]},m=e.draw=function(t,e){o.parser.yy.clear(),o.parser.parse(t+"\n"),l.init();var n=r.select('[id="'+e+'"]'),s=void 0,u=void 0,h=void 0,_=o.parser.yy.getActors(),m=o.parser.yy.getActorKeys(),y=o.parser.yy.getMessages(),g=o.parser.yy.getTitle();f(n,_,m,0),i.default.insertArrowHead(n),i.default.insertArrowCrossHead(n),y.forEach(function(t){var e=void 0;switch(t.type){case o.parser.yy.LINETYPE.NOTE:l.bumpVerticalPos(c.boxMargin),s=_[t.from].x,u=_[t.to].x,t.placement===o.parser.yy.PLACEMENT.RIGHTOF?d(n,s+(c.width+c.actorMargin)/2,l.getVerticalPos(),t):t.placement===o.parser.yy.PLACEMENT.LEFTOF?d(n,s-(c.width+c.actorMargin)/2,l.getVerticalPos(),t):t.to===t.from?d(n,s,l.getVerticalPos(),t):(h=Math.abs(s-u)+c.actorMargin,d(n,(s+u+c.width-h)/2,l.getVerticalPos(),t,h));break;case o.parser.yy.LINETYPE.ACTIVE_START:l.newActivation(t,n);break;case o.parser.yy.LINETYPE.ACTIVE_END:!function(t,e){var r=l.endActivation(t);r.starty+18>e&&(r.starty=e-6,e+=12),i.default.drawActivation(n,r,e,c),l.insert(r.startx,e-10,r.stopx,e)}(t,l.getVerticalPos());break;case o.parser.yy.LINETYPE.LOOP_START:l.bumpVerticalPos(c.boxMargin),l.newLoop(t.message),l.bumpVerticalPos(c.boxMargin+c.boxTextMargin);break;case o.parser.yy.LINETYPE.LOOP_END:e=l.endLoop(),i.default.drawLoop(n,e,"loop",c),l.bumpVerticalPos(c.boxMargin);break;case o.parser.yy.LINETYPE.OPT_START:l.bumpVerticalPos(c.boxMargin),l.newLoop(t.message),l.bumpVerticalPos(c.boxMargin+c.boxTextMargin);break;case o.parser.yy.LINETYPE.OPT_END:e=l.endLoop(),i.default.drawLoop(n,e,"opt",c),l.bumpVerticalPos(c.boxMargin);break;case o.parser.yy.LINETYPE.ALT_START:l.bumpVerticalPos(c.boxMargin),l.newLoop(t.message),l.bumpVerticalPos(c.boxMargin+c.boxTextMargin);break;case o.parser.yy.LINETYPE.ALT_ELSE:l.bumpVerticalPos(c.boxMargin),e=l.addSectionToLoop(t.message),l.bumpVerticalPos(c.boxMargin);break;case o.parser.yy.LINETYPE.ALT_END:e=l.endLoop(),i.default.drawLoop(n,e,"alt",c),l.bumpVerticalPos(c.boxMargin);break;case o.parser.yy.LINETYPE.PAR_START:l.bumpVerticalPos(c.boxMargin),l.newLoop(t.message),l.bumpVerticalPos(c.boxMargin+c.boxTextMargin);break;case o.parser.yy.LINETYPE.PAR_AND:l.bumpVerticalPos(c.boxMargin),e=l.addSectionToLoop(t.message),l.bumpVerticalPos(c.boxMargin);break;case o.parser.yy.LINETYPE.PAR_END:e=l.endLoop(),i.default.drawLoop(n,e,"par",c),l.bumpVerticalPos(c.boxMargin);break;default:try{l.bumpVerticalPos(c.messageMargin);var r=p(t.from),f=p(t.to),m=r[0]<=f[0]?1:0,y=r[0]<f[0]?0:1;s=r[m],u=f[y];var g=l.getVerticalPos();!function(t,e,n,r,i){var a=t.append("g"),s=e+(n-e)/2,u=a.append("text").attr("x",s).attr("y",r-7).style("text-anchor","middle").attr("class","messageText").text(i.message),d=(u._groups||u)[0][0].getBBox().width,f=void 0;if(e===n){f=a.append("path").attr("d","M "+e+","+r+" C "+(e+60)+","+(r-10)+" "+(e+60)+","+(r+30)+" "+e+","+(r+20)),l.bumpVerticalPos(30);var h=Math.max(d/2,100);l.insert(e-h,l.getVerticalPos()-10,n+h,l.getVerticalPos())}else(f=a.append("line")).attr("x1",e),f.attr("y1",r),f.attr("x2",n),f.attr("y2",r),l.insert(e,l.getVerticalPos()-10,n,l.getVerticalPos());i.type===o.parser.yy.LINETYPE.DOTTED||i.type===o.parser.yy.LINETYPE.DOTTED_CROSS||i.type===o.parser.yy.LINETYPE.DOTTED_OPEN?(f.style("stroke-dasharray","3, 3"),f.attr("class","messageLine1")):f.attr("class","messageLine0");var _="";c.arrowMarkerAbsolute&&(_=(_=(_=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),f.attr("stroke-width",2),f.attr("stroke","black"),f.style("fill","none"),i.type!==o.parser.yy.LINETYPE.SOLID&&i.type!==o.parser.yy.LINETYPE.DOTTED||f.attr("marker-end","url("+_+"#arrowhead)"),i.type!==o.parser.yy.LINETYPE.SOLID_CROSS&&i.type!==o.parser.yy.LINETYPE.DOTTED_CROSS||f.attr("marker-end","url("+_+"#crosshead)")}(n,s,u,g,t);var v=r.concat(f);l.insert(Math.min.apply(null,v),g,Math.max.apply(null,v),g)}catch(t){a.logger.error("error while drawing message",t)}}}),c.mirrorActors&&(l.bumpVerticalPos(2*c.boxMargin),f(n,_,m,l.getVerticalPos()));var v=l.getBounds();a.logger.debug("For line height fix Querying: #"+e+" .actor-line"),r.selectAll("#"+e+" .actor-line").attr("y2",v.stopy);var M=v.stopy-v.starty+2*c.diagramMarginY;c.mirrorActors&&(M=M-c.boxMargin+c.bottomMarginAdj);var b=v.stopx-v.startx+2*c.diagramMarginX;g&&n.append("text").text(g).attr("x",(v.stopx-v.startx)/2-2*c.diagramMarginX).attr("y",-25),c.useMaxWidth?(n.attr("height","100%"),n.attr("width","100%"),n.attr("style","max-width:"+b+"px;")):(n.attr("height",M),n.attr("width",b));var k=g?40:0;n.attr("viewBox",v.startx-c.diagramMarginX+" -"+(c.diagramMarginY+k)+" "+b+" "+(M+k))};e.default={bounds:l,drawActors:f,setConf:h,draw:m}},function(t,e,n){t.exports=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,{configurable:!1,enumerable:!0,get:r})},n.r=function(t){Object.defineProperty(t,"__esModule",{value:!0})},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.w={},n(n.s=25)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(2))&&r.__esModule?r:{default:r},a=/:/g;function o(t){return t?String(t).replace(a,"\\:"):""}e.default={isSubgraph:function(t,e){return!!t.children(e).length},edgeToId:function(t){return o(t.v)+":"+o(t.w)+":"+o(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(i.default.isPlainObject(n)){var r=n.transition;if(i.default.isFunction(r))return r(t)}return t}}},function(t,e){t.exports=n(3)},function(t,e){t.exports=n(8)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=o(n(16)),i=o(n(15)),a=o(n(14));function o(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e,n){var o=e.label,s=t.append("g");"svg"===e.labelType?(0,a.default)(s,e):"string"!=typeof o||"html"===e.labelType?(0,i.default)(s,e):(0,r.default)(s,e);var u=s.node().getBBox(),c=void 0;switch(n){case"top":c=-e.height/2;break;case"bottom":c=e.height/2-u.height;break;default:c=-u.height/2}return s.attr("transform","translate("+-u.width/2+","+c+")"),s}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e,n,r){var i=t.x,a=t.y,o=i-r.x,s=a-r.y,u=Math.sqrt(e*e*s*s+n*n*o*o),c=Math.abs(e*n*o/u);r.x<i&&(c=-c);var l=Math.abs(e*n*s/u);return r.y<a&&(l=-l),{x:i+c,y:a+l}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){var n=t.x,r=t.y,i=e.x-n,a=e.y-r,o=t.width/2,s=t.height/2,u=void 0,c=void 0;return Math.abs(a)*o>Math.abs(i)*s?(a<0&&(s=-s),u=0===a?0:s*i/a,c=s):(i<0&&(o=-o),u=o,c=0===i?0:o*a/i),{x:n+u,y:r+c}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(23))&&r.__esModule?r:{default:r};e.default=function(t,e,n){var r=t.x,a=t.y,o=[],s=Number.POSITIVE_INFINITY,u=Number.POSITIVE_INFINITY;e.forEach(function(t){s=Math.min(s,t.x),u=Math.min(u,t.y)});for(var c=r-t.width/2-s,l=a-t.height/2-u,d=0;d<e.length;d+=1){var f=e[d],h=e[d<e.length-1?d+1:0],_=(0,i.default)(t,n,{x:c+f.x,y:l+f.y},{x:c+h.x,y:l+h.y});_&&o.push(_)}return o.length?(o.length>1&&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,u=Math.sqrt(o*o+s*s);return a<u?-1:a===u?0:1}),o[0]):(console.log("NO INTERSECTION FOUND, RETURN NODE CENTER",t),t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(4))&&r.__esModule?r:{default:r};e.default=function(t,e,n){return(0,i.default)(t,e,e,n)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e){return t.intersect(e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(0))&&r.__esModule?r:{default:r};function a(t,e,n,r){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");i.default.applyStyle(a,n[r+"Style"]),n[r+"Class"]&&a.attr("class",n[r+"Class"])}e.default={normal:a,vee:function(t,e,n,r){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");i.default.applyStyle(a,n[r+"Style"]),n[r+"Class"]&&a.attr("class",n[r+"Class"])},undirected:function(t,e,n,r){var a=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");i.default.applyStyle(a,n[r+"Style"]),n[r+"Class"]&&a.attr("class",n[r+"Class"])},default:a}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=s(n(5)),i=s(n(4)),a=s(n(7)),o=s(n(6));function s(t){return t&&t.__esModule?t:{default:t}}e.default={rect:function(t,e,n){var i=t.insert("rect",":first-child").attr("rx",n.rx).attr("ry",n.ry).attr("x",-e.width/2).attr("y",-e.height/2).attr("width",e.width).attr("height",e.height);return n.intersect=function(t){return(0,r.default)(n,t)},i},ellipse:function(t,e,n){var r=e.width/2,a=e.height/2,o=t.insert("ellipse",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("rx",r).attr("ry",a);return n.intersect=function(t){return(0,i.default)(n,r,a,t)},o},circle:function(t,e,n){var r=Math.max(e.width,e.height)/2,i=t.insert("circle",":first-child").attr("x",-e.width/2).attr("y",-e.height/2).attr("r",r);return n.intersect=function(t){return(0,a.default)(n,r,t)},i},diamond:function(t,e,n){var r=e.width*Math.SQRT2/2,i=e.height*Math.SQRT2/2,a=[{x:0,y:-i},{x:-r,y:0},{x:0,y:i},{x:r,y:0}],s=t.insert("polygon",":first-child").attr("points",a.map(function(t){return t.x+","+t.y}).join(" "));return n.intersect=function(t){return(0,o.default)(n,a,t)},s}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(1)),i=s(n(2)),a=s(n(8)),o=s(n(0));function s(t){return t&&t.__esModule?t:{default:t}}function u(t,e){var n=r.line().x(function(t){return t.x}).y(function(t){return t.y});return n.curve(t.curve),n(e)}e.default=function(t,e,n){var s=t.selectAll("g.edgePath").data(e.edges(),function(t){return o.default.edgeToId(t)}).classed("update",!0);return function(t,e){var n=s.enter().append("g").attr("class","edgePath").style("opacity",0);n.append("path").attr("class","path").attr("d",function(t){var n=e.edge(t),r=e.node(t.v).elem,a=i.default.range(n.points.length).map(function(){return e=(t=r).getBBox(),{x:(n=t.ownerSVGElement.getScreenCTM().inverse().multiply(t.getScreenCTM()).translate(e.width/2,e.height/2)).e,y:n.f};var t,e,n});return u(n,a)}),n.append("defs")}(0,e),function(t,e){var n=s.exit();o.default.applyTransition(n,e).style("opacity",0).remove(),o.default.applyTransition(n.select("path.path"),e).attr("d",function(t){var n=e.node(t.v);return n?u({},i.default.range(this.getTotalLength()).map(function(){return n})):r.select(this).attr("d")})}(0,e),s=t.selectAll("g.edgePath"),o.default.applyTransition(s,e).style("opacity",1),s.each(function(t){var n=r.select(this),i=e.edge(t);i.elem=this,i.id&&n.attr("id",i.id),o.default.applyClass(n,i.class,(n.classed("update")?"update ":"")+"edgePath")}),s.selectAll("path.path").each(function(t){var n=e.edge(t);n.arrowheadId=i.default.uniqueId("arrowhead");var s=r.select(this).attr("marker-end",function(){return"url(#"+n.arrowheadId+")"}).style("fill","none");o.default.applyTransition(s,e).attr("d",function(t){return function(t,e){var n=t.edge(e),r=t.node(e.v),i=t.node(e.w),o=n.points.slice(1,n.points.length-1);return o.unshift((0,a.default)(r,o[0])),o.push((0,a.default)(i,o[o.length-1])),u(n,o)}(e,t)}),o.default.applyStyle(s,n.style)}),s.selectAll("defs *").remove(),s.selectAll("defs").each(function(t){var i=e.edge(t);(0,n[i.arrowhead])(r.select(this),i.arrowheadId,i,"arrowhead")}),s}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(1)),i=s(n(2)),a=s(n(3)),o=s(n(0));function s(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e){var n=t.selectAll("g.edgeLabel").data(e.edges(),function(t){return o.default.edgeToId(t)}).classed("update",!0);return n.selectAll("*").remove(),n.enter().append("g").classed("edgeLabel",!0).style("opacity",0),(n=t.selectAll("g.edgeLabel")).each(function(t){var n=e.edge(t),o=(0,a.default)(r.select(this),e.edge(t),0,0).classed("label",!0),s=o.node().getBBox();n.labelId&&o.attr("id",n.labelId),i.default.has(n,"width")||(n.width=s.width),i.default.has(n,"height")||(n.height=s.height)}),o.default.applyTransition(n.exit(),e).style("opacity",0).remove(),n}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(1)),i=o(n(0)),a=o(n(3));function o(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e){var n=e.nodes().filter(function(t){return i.default.isSubgraph(e,t)}),o=t.selectAll("g.cluster").data(n,function(t){return t});return o.selectAll("*").remove(),o.enter().append("g").attr("class","cluster").attr("id",function(t){return e.node(t).id}).style("opacity",0),o=t.selectAll("g.cluster"),i.default.applyTransition(o,e).style("opacity",1),o.each(function(t){var n=e.node(t),i=r.select(this);r.select(this).append("rect");var o=i.append("g").attr("class","label");(0,a.default)(o,n,n.clusterLabelPos)}),o.selectAll("rect").each(function(t){var n=e.node(t),a=r.select(this);i.default.applyStyle(a,n.style)}),i.default.applyTransition(o.exit(),e).style("opacity",0).remove(),o}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(0))&&r.__esModule?r:{default:r};e.default=function(t,e){var n=t;return n.node().appendChild(e.label),i.default.applyStyle(n,e.labelStyle),n}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i="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},a=(r=n(0))&&r.__esModule?r:{default:r};e.default=function(t,e){var n=t.append("foreignObject").attr("width","100000"),r=n.append("xhtml:div");r.attr("xmlns","http://www.w3.org/1999/xhtml");var o=e.label;switch(void 0===o?"undefined":i(o)){case"function":r.insert(o);break;case"object":r.insert(function(){return o});break;default:r.html(o)}a.default.applyStyle(r,e.labelStyle),r.style("display","inline-block"),r.style("white-space","nowrap");var s=r.node().getBoundingClientRect();return n.attr("width",s.width).attr("height",s.height),n}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=(r=n(0))&&r.__esModule?r:{default:r};e.default=function(t,e){for(var n=t.append("text"),r=function(t){for(var e="",n=!1,r=null,i=0;i<t.length;i+=1)if(r=t[i],n){switch(r){case"n":e+="\n";break;default:e+=r}n=!1}else"\\"===r?n=!0:e+=r;return e}(e.label).split("\n"),a=0;a<r.length;a+=1)n.append("tspan").attr("xml:space","preserve").attr("dy","1em").attr("x","1").text(r[a]);return i.default.applyStyle(n,e.labelStyle),n}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=s(n(2)),i=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(1)),a=s(n(3)),o=s(n(0));function s(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e,n){var s=e.nodes().filter(function(t){return!o.default.isSubgraph(e,t)}),u=t.selectAll("g.node").data(s,function(t){return t}).classed("update",!0);return u.selectAll("*").remove(),u.enter().append("g").attr("class","node").style("opacity",0),(u=t.selectAll("g.node")).each(function(t){var s=e.node(t),u=i.select(this);o.default.applyClass(u,s.class,(u.classed("update")?"update ":"")+"node");var c=u.append("g").attr("class","label"),l=(0,a.default)(c,s),d=n[s.shape],f=r.default.pick(l.node().getBBox(),"width","height");s.elem=this,s.id&&u.attr("id",s.id),s.labelId&&c.attr("id",s.labelId),r.default.has(s,"width")&&(f.width=s.width),r.default.has(s,"height")&&(f.height=s.height),f.width+=s.paddingLeft+s.paddingRight,f.height+=s.paddingTop+s.paddingBottom,c.attr("transform","translate("+(s.paddingLeft-s.paddingRight)/2+","+(s.paddingTop-s.paddingBottom)/2+")");var h=d(i.select(this),f,s);o.default.applyStyle(h,s.style);var _=h.node().getBBox();s.width=_.width,s.height=_.height}),o.default.applyTransition(u.exit(),e).style("opacity",0).remove(),u}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(1)),a=(r=n(0))&&r.__esModule?r:{default:r};e.default=function(t,e){var n=t.filter(function(){return!i.select(this).classed("update")});function r(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}n.attr("transform",r),a.default.applyTransition(t,e).style("opacity",1).attr("transform",r),a.default.applyTransition(n.selectAll("rect"),e).attr("width",function(t){return e.node(t).width}).attr("height",function(t){return e.node(t).height}).attr("x",function(t){return-e.node(t).width/2}).attr("y",function(t){return-e.node(t).height/2})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(1)),i=o(n(2)),a=o(n(0));function o(t){return t&&t.__esModule?t:{default:t}}e.default=function(t,e){function n(t){var n=e.edge(t);return i.default.has(n,"x")?"translate("+n.x+","+n.y+")":""}t.filter(function(){return!r.select(this).classed("update")}).attr("transform",n),a.default.applyTransition(t,e).style("opacity",1).attr("transform",n)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r,i=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(1)),a=(r=n(0))&&r.__esModule?r:{default:r};e.default=function(t,e){function n(t){var n=e.node(t);return"translate("+n.x+","+n.y+")"}t.filter(function(){return!i.select(this).classed("update")}).attr("transform",n),a.default.applyTransition(t,e).style("opacity",1).attr("transform",n)}},function(t,e){t.exports=n(21)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=p(n(2)),i=p(n(21)),a=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(1)),o=p(n(20)),s=p(n(19)),u=p(n(18)),c=p(n(17)),l=p(n(13)),d=p(n(12)),f=p(n(11)),h=p(n(10)),_=p(n(9));function p(t){return t&&t.__esModule?t:{default:t}}var m={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},y={arrowhead:"normal",curve:a.curveLinear};function g(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}e.default=function(){var t=c.default,e=l.default,n=d.default,a=f.default,p=h.default,v=_.default,M=function(c,l){!function(t){t.nodes().forEach(function(e){var n=t.node(e);r.default.has(n,"label")||t.children(e).length||(n.label=e),r.default.has(n,"paddingX")&&r.default.defaults(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),r.default.has(n,"paddingY")&&r.default.defaults(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),r.default.has(n,"padding")&&r.default.defaults(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),r.default.defaults(n,m),r.default.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],function(t){n[t]=Number(n[t])}),r.default.has(n,"width")&&(n._prevWidth=n.width),r.default.has(n,"height")&&(n._prevHeight=n.height)}),t.edges().forEach(function(e){var n=t.edge(e);r.default.has(n,"label")||(n.label=""),r.default.defaults(n,y)})}(l),c.selectAll("*").remove();var d=g(c,"output"),f=g(d,"clusters"),h=g(d,"edgePaths"),_=n(g(d,"edgeLabels"),l),M=t(g(d,"nodes"),l,p);i.default.layout(l),(0,o.default)(M,l),(0,s.default)(_,l),a(h,l,v);var b=e(f,l);(0,u.default)(b,l),function(t){r.default.each(t.nodes(),function(e){var n=t.node(e);r.default.has(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,r.default.has(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight})}(l)};return M.createNodes=function(e){return arguments.length?(t=e,M):t},M.createClusters=function(t){return arguments.length?(e=t,M):e},M.createEdgeLabels=function(t){return arguments.length?(n=t,M):n},M.createEdgePaths=function(t){return arguments.length?(a=t,M):a},M.shapes=function(t){return arguments.length?(p=t,M):p},M.arrows=function(t){return arguments.length?(v=t,M):v},M}},function(t,e,n){"use strict";function r(t,e){return t*e>0}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t,e,n,i){var a=e.y-t.y,o=t.x-e.x,s=e.x*t.y-t.x*e.y,u=a*n.x+o*n.y+s,c=a*i.x+o*i.y+s;if(0===u||0===c||!r(u,c)){var l=i.y-n.y,d=n.x-i.x,f=i.x*n.y-n.x*i.y,h=l*t.x+d*t.y+f,_=l*e.x+d*e.y+f;if(0===h||0===_||!r(h,_)){var p=a*d-l*o;if(0!==p){var m=Math.abs(p/2),y=o*f-d*s;return{x:y<0?(y-m)/p:(y+m)/p,y:(y=l*s-a*f)<0?(y-m)/p:(y+m)/p}}}}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=u(n(8)),i=u(n(7)),a=u(n(4)),o=u(n(6)),s=u(n(5));function u(t){return t&&t.__esModule?t:{default:t}}e.default={node:r.default,circle:i.default,ellipse:a.default,polygon:o.default,rect:s.default}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=o(n(24)),i=o(n(22)),a=o(n(0));function o(t){return t&&t.__esModule?t:{default:t}}e.default={intersect:r.default,render:i.default,util:a.default}}])},function(t,e,n){const r=n(1),i=n(11),a=n(27);t.exports=function(t,e){const n=new i,o={},s=new a;let u;function c(t){const n=t.v===u?t.w:t.v,r=s.priority(n);if(void 0!==r){var i=e(t);i<r&&(o[n]=u,s.decrease(n,i))}}if(0===t.nodeCount())return n;r.each(t.nodes(),function(t){s.add(t,Number.POSITIVE_INFINITY),n.setNode(t)}),s.decrease(t.nodes()[0],0);var l=!1;for(;s.size()>0;){if(u=s.removeMin(),r.has(o,u))n.setEdge(u,o[u]);else{if(l)throw new Error("Input graph is not connected: "+t);l=!0}t.nodeEdges(u).forEach(c)}return n}},function(t,e,n){var r=n(24);t.exports=function(t,e){return r(t,e,"pre")}},function(t,e,n){var r=n(24);t.exports=function(t,e){return r(t,e,"post")}},function(t,e,n){var r=n(25);t.exports=function(t){try{r(t)}catch(t){if(t instanceof r.CycleException)return!1;throw t}return!0}},function(t,e,n){var r=n(1);t.exports=function(t,e,n){return function(t,e,n){const 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){const 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;s<o.distance&&(o.distance=s,o.predecessor=i.predecessor)})})}),r}(t,e||i,n||function(e){return t.outEdges(e)})};var i=r.constant(1)},function(t,e,n){const r=n(1),i=n(26);t.exports=function(t){return r.filter(i(t),function(e){return e.length>1||1===e.length&&t.hasEdge(e[0],e[0])})}},function(t,e,n){const r=n(28),i=n(1);t.exports=function(t,e,n){return i.transform(t.nodes(),function(i,a){i[a]=r(t,a,e,n)},{})}},function(t,e,n){var r=n(1);t.exports=function(t){const e={},n=[];let i;function a(n){r.has(e,n)||(e[n]=!0,i.push(n),r.each(t.successors(n),a),r.each(t.predecessors(n),a))}return r.each(t.nodes(),function(t){i=[],a(t),i.length&&n.push(i)}),n}},function(t,e,n){t.exports={components:n(174),dijkstra:n(28),dijkstraAll:n(173),findCycles:n(172),floydWarshall:n(171),isAcyclic:n(170),postorder:n(169),preorder:n(168),prim:n(167),tarjan:n(26),topsort:n(25)}},function(t,e,n){const r=n(1),i=n(11);t.exports={write:function(t){var e={options:{directed:t.isDirected(),multigraph:t.isMultigraph(),compound:t.isCompound()},nodes:function(t){return r.map(t.nodes(),function(e){const n=t.node(e),i=t.parent(e),a={v:e};return r.isUndefined(n)||(a.value=n),r.isUndefined(i)||(a.parent=i),a})}(t),edges:function(t){return r.map(t.edges(),function(e){const n=t.edge(e),i={v:e.v,w:e.w};return r.isUndefined(e.name)||(i.name=e.name),r.isUndefined(n)||(i.value=n),i})}(t)};r.isUndefined(t.graph())||(e.value=r.clone(t.graph()));return e},read:function(t){var e=new i(t.options).setGraph(t.value);return r.each(t.nodes,function(t){e.setNode(t.v,t.value),t.parent&&e.setParent(t.v,t.parent)}),r.each(t.edges,function(t){e.setEdge({v:t.v,w:t.w,name:t.name},t.value)}),e}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.draw=e.getClasses=e.addEdges=e.addVertices=e.setConf=void 0;var r=l(n(12)),i=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(3)),a=l(n(23)),o=l(n(22)),s=l(n(166)),u=n(2),c=n(10);function l(t){return t&&t.__esModule?t:{default:t}}var d={},f=e.setConf=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)d[e[n]]=t[e[n]]},h=e.addVertices=function(t,e){Object.keys(t).forEach(function(n){var r=t[n],i=void 0,a="";r.classes.length>0&&(a=r.classes.join(" "));var o="";o=function(t,e){for(var n=0;n<e.length;n++)void 0!==e[n]&&(t=t+e[n]+";");return t}(o,r.styles),i=void 0===r.text?r.id:r.text;var s="";if(d.htmlLabels)s="html",i=i.replace(/fa:fa[\w-]+/g,function(t){return'<i class="fa '+t.substring(3)+'"></i>'});else{for(var u=document.createElementNS("http://www.w3.org/2000/svg","text"),c=i.split(/<br>/),l=0;l<c.length;l++){var f=document.createElementNS("http://www.w3.org/2000/svg","tspan");f.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),f.setAttribute("dy","1em"),f.setAttribute("x","1"),f.textContent=c[l],u.appendChild(f)}s="svg",i=u}var h=0,_="";switch(r.type){case"round":h=5,_="rect";break;case"square":_="rect";break;case"diamond":_="question";break;case"odd":case"odd_right":_="rect_left_inv_arrow";break;case"circle":_="circle";break;case"ellipse":_="ellipse";break;case"group":_="rect",i=d.htmlLabels?"":document.createElementNS("http://www.w3.org/2000/svg","text");break;default:_="rect"}e.setNode(r.id,{labelType:s,shape:_,label:i,rx:h,ry:h,class:a,style:o,id:r.id})})},_=e.addEdges=function(t,e){var n=0,r=void 0;void 0!==t.defaultStyle&&(r=t.defaultStyle.toString().replace(/,/g,";")),t.forEach(function(a){n++;var o={};"arrow_open"===a.type?o.arrowhead="none":o.arrowhead="normal";var s="";if(void 0!==a.style)a.style.forEach(function(t){s=s+t+";"});else switch(a.stroke){case"normal":s="fill:none",void 0!==r&&(s=r);break;case"dotted":s="stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":s="stroke: #333; stroke-width: 3.5px;fill:none"}o.style=s,void 0!==a.interpolate?o.curve=(0,c.interpolateToCurve)(a.interpolate,i.curveLinear):void 0!==t.defaultInterpolate?o.curve=(0,c.interpolateToCurve)(t.defaultInterpolate,i.curveLinear):o.curve=(0,c.interpolateToCurve)(d.curve,i.curveLinear),void 0===a.text?void 0!==a.style&&(o.arrowheadStyle="fill: #333"):(o.arrowheadStyle="fill: #333",void 0===a.style?(o.labelpos="c",d.htmlLabels?(o.labelType="html",o.label='<span class="edgeLabel">'+a.text+"</span>"):(o.labelType="text",o.style="stroke: #333; stroke-width: 1.5px;fill:none",o.label=a.text.replace(/<br>/g,"\n"))):o.label=a.text.replace(/<br>/g,"\n")),e.setEdge(a.start,a.end,o,n)})},p=e.getClasses=function(t){a.default.clear();var e=o.default.parser;return e.yy=a.default,e.parse(t),a.default.getClasses()},m=e.draw=function(t,e){u.logger.debug("Drawing flowchart"),a.default.clear();var n=o.default.parser;n.yy=a.default;try{n.parse(t)}catch(t){u.logger.debug("Parsing failed")}var c=a.default.getDirection();void 0===c&&(c="TD");for(var l=new r.default.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:c,marginx:20,marginy:20}).setDefaultEdgeLabel(function(){return{}}),f=void 0,p=a.default.getSubGraphs(),m=p.length-1;m>=0;m--)f=p[m],a.default.addVertex(f.id,f.title,"group",void 0);var y=a.default.getVertices(),g=a.default.getEdges(),v=0;for(v=p.length-1;v>=0;v--){f=p[v],i.selectAll("cluster").append("text");for(var M=0;M<f.nodes.length;M++)l.setParent(f.nodes[M],f.id)}h(y,l),_(g,l);var b=new(0,s.default.render);b.shapes().question=function(t,e,n){var r=.8*(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=t.insert("polygon",":first-child").attr("points",i.map(function(t){return t.x+","+t.y}).join(" ")).attr("rx",5).attr("ry",5).attr("transform","translate("+-r/2+","+2*r/4+")");return n.intersect=function(t){return s.default.intersect.polygon(n,i,t)},a},b.shapes().rect_left_inv_arrow=function(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=t.insert("polygon",":first-child").attr("points",a.map(function(t){return t.x+","+t.y}).join(" ")).attr("transform","translate("+-r/2+","+2*i/4+")");return n.intersect=function(t){return s.default.intersect.polygon(n,a,t)},o},b.shapes().rect_right_inv_arrow=function(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=t.insert("polygon",":first-child").attr("points",a.map(function(t){return t.x+","+t.y}).join(" ")).attr("transform","translate("+-r/2+","+2*i/4+")");return n.intersect=function(t){return s.default.intersect.polygon(n,a,t)},o},b.arrows().none=function(t,e,n,r){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 0 0 L 0 0 z");s.default.util.applyStyle(i,n[r+"Style"])},b.arrows().normal=function(t,e,n,r){t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowheadPath").style("stroke-width",1).style("stroke-dasharray","1,0")};var k=i.select('[id="'+e+'"]'),L=i.select("#"+e+" g");for(b(L,l),L.selectAll("g.node").attr("title",function(){return a.default.getTooltip(this.id)}),d.useMaxWidth?(k.attr("height","100%"),k.attr("width",d.width),k.attr("viewBox","0 0 "+(l.graph().width+64)+" "+(l.graph().height+64)),k.attr("style","max-width:"+(l.graph().width+64)+"px;")):(k.attr("height",l.graph().height+64),void 0===d.width?k.attr("width",l.graph().width+64):k.attr("width",d.width),k.attr("viewBox","0 0 "+(l.graph().width+64)+" "+(l.graph().height+64))),k.select("g").attr("transform","translate(32, 32)"),a.default.indexNodes("subGraph"+v),v=0;v<p.length;v++)if("undefined"!==(f=p[v]).title){var w=document.querySelectorAll("#"+e+" #"+f.id+" rect"),x=document.querySelectorAll("#"+e+" #"+f.id),T=w[0].x.baseVal.value,D=w[0].y.baseVal.value,Y=w[0].width.baseVal.value,S=i.select(x[0]).append("text");S.attr("x",T+Y/2),S.attr("y",D+14),S.attr("fill","black"),S.attr("stroke","none"),S.attr("id",e+"Text"),S.style("text-anchor","middle"),void 0===f.title?S.text("Undef"):S.text(f.title)}if(!d.htmlLabels)for(var E=document.querySelectorAll("#"+e+" .edgeLabel .label"),A=0;A<E.length;A++){var C=E[A],j=C.getBBox(),O=document.createElementNS("http://www.w3.org/2000/svg","rect");O.setAttribute("rx",0),O.setAttribute("ry",0),O.setAttribute("width",j.width),O.setAttribute("height",j.height),O.setAttribute("style","fill:#e8e8e8;"),C.insertBefore(O,C.firstChild)}};e.default={setConf:f,addVertices:h,addEdges:_,getClasses:p,draw:m}},function(t,e,n){var r={"./af":150,"./af.js":150,"./ar":149,"./ar-dz":148,"./ar-dz.js":148,"./ar-kw":147,"./ar-kw.js":147,"./ar-ly":146,"./ar-ly.js":146,"./ar-ma":145,"./ar-ma.js":145,"./ar-sa":144,"./ar-sa.js":144,"./ar-tn":143,"./ar-tn.js":143,"./ar.js":149,"./az":142,"./az.js":142,"./be":141,"./be.js":141,"./bg":140,"./bg.js":140,"./bm":139,"./bm.js":139,"./bn":138,"./bn.js":138,"./bo":137,"./bo.js":137,"./br":136,"./br.js":136,"./bs":135,"./bs.js":135,"./ca":134,"./ca.js":134,"./cs":133,"./cs.js":133,"./cv":132,"./cv.js":132,"./cy":131,"./cy.js":131,"./da":130,"./da.js":130,"./de":129,"./de-at":128,"./de-at.js":128,"./de-ch":127,"./de-ch.js":127,"./de.js":129,"./dv":126,"./dv.js":126,"./el":125,"./el.js":125,"./en-au":124,"./en-au.js":124,"./en-ca":123,"./en-ca.js":123,"./en-gb":122,"./en-gb.js":122,"./en-ie":121,"./en-ie.js":121,"./en-il":120,"./en-il.js":120,"./en-nz":119,"./en-nz.js":119,"./eo":118,"./eo.js":118,"./es":117,"./es-do":116,"./es-do.js":116,"./es-us":115,"./es-us.js":115,"./es.js":117,"./et":114,"./et.js":114,"./eu":113,"./eu.js":113,"./fa":112,"./fa.js":112,"./fi":111,"./fi.js":111,"./fo":110,"./fo.js":110,"./fr":109,"./fr-ca":108,"./fr-ca.js":108,"./fr-ch":107,"./fr-ch.js":107,"./fr.js":109,"./fy":106,"./fy.js":106,"./gd":105,"./gd.js":105,"./gl":104,"./gl.js":104,"./gom-latn":103,"./gom-latn.js":103,"./gu":102,"./gu.js":102,"./he":101,"./he.js":101,"./hi":100,"./hi.js":100,"./hr":99,"./hr.js":99,"./hu":98,"./hu.js":98,"./hy-am":97,"./hy-am.js":97,"./id":96,"./id.js":96,"./is":95,"./is.js":95,"./it":94,"./it.js":94,"./ja":93,"./ja.js":93,"./jv":92,"./jv.js":92,"./ka":91,"./ka.js":91,"./kk":90,"./kk.js":90,"./km":89,"./km.js":89,"./kn":88,"./kn.js":88,"./ko":87,"./ko.js":87,"./ky":86,"./ky.js":86,"./lb":85,"./lb.js":85,"./lo":84,"./lo.js":84,"./lt":83,"./lt.js":83,"./lv":82,"./lv.js":82,"./me":81,"./me.js":81,"./mi":80,"./mi.js":80,"./mk":79,"./mk.js":79,"./ml":78,"./ml.js":78,"./mr":77,"./mr.js":77,"./ms":76,"./ms-my":75,"./ms-my.js":75,"./ms.js":76,"./mt":74,"./mt.js":74,"./my":73,"./my.js":73,"./nb":72,"./nb.js":72,"./ne":71,"./ne.js":71,"./nl":70,"./nl-be":69,"./nl-be.js":69,"./nl.js":70,"./nn":68,"./nn.js":68,"./pa-in":67,"./pa-in.js":67,"./pl":66,"./pl.js":66,"./pt":65,"./pt-br":64,"./pt-br.js":64,"./pt.js":65,"./ro":63,"./ro.js":63,"./ru":62,"./ru.js":62,"./sd":61,"./sd.js":61,"./se":60,"./se.js":60,"./si":59,"./si.js":59,"./sk":58,"./sk.js":58,"./sl":57,"./sl.js":57,"./sq":56,"./sq.js":56,"./sr":55,"./sr-cyrl":54,"./sr-cyrl.js":54,"./sr.js":55,"./ss":53,"./ss.js":53,"./sv":52,"./sv.js":52,"./sw":51,"./sw.js":51,"./ta":50,"./ta.js":50,"./te":49,"./te.js":49,"./tet":48,"./tet.js":48,"./tg":47,"./tg.js":47,"./th":46,"./th.js":46,"./tl-ph":45,"./tl-ph.js":45,"./tlh":44,"./tlh.js":44,"./tr":43,"./tr.js":43,"./tzl":42,"./tzl.js":42,"./tzm":41,"./tzm-latn":40,"./tzm-latn.js":40,"./tzm.js":41,"./ug-cn":39,"./ug-cn.js":39,"./uk":38,"./uk.js":38,"./ur":37,"./ur.js":37,"./uz":36,"./uz-latn":35,"./uz-latn.js":35,"./uz.js":36,"./vi":34,"./vi.js":34,"./x-pseudo":33,"./x-pseudo.js":33,"./yo":32,"./yo.js":32,"./zh-cn":31,"./zh-cn.js":31,"./zh-hk":30,"./zh-hk.js":30,"./zh-tw":29,"./zh-tw.js":29};function i(t){var e=a(t);return n(e)}function a(t){var e=r[t];if(!(e+1)){var n=new Error('Cannot find module "'+t+'".');throw n.code="MODULE_NOT_FOUND",n}return e}i.keys=function(){return Object.keys(r)},i.resolve=a,t.exports=i,i.id=178},function(t,e){function n(t,e){if(!t)return t;if(!e)return t;t=r(t,e+" $1$2");var n=e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");return t=(t=(t=t.replace(new RegExp("("+n+")\\s*\\1(?=[\\s\\r\\n,{])","g"),"$1")).replace(new RegExp("("+n+")\\s*:host","g"),"$1")).replace(new RegExp("("+n+")\\s*@","g"),"@")}function r(t,e){return(t=t.replace(/\/\*([\s\S]*?)\*\//g,"")).replace(/([^\r\n,{}]+)(,(?=[^}]*{)|\s*{)/g,e)}t.exports=n,n.replace=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.decodeEntities=e.encodeEntities=void 0;var r="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},i=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(n(3)),a=L(n(179)),o=n(2),s=L(n(10)),u=L(n(177)),c=L(n(22)),l=L(n(23)),d=L(n(165)),f=L(n(20)),h=L(n(19)),_=L(n(163)),p=L(n(18)),m=L(n(17)),y=L(n(162)),g=L(n(15)),v=L(n(16)),M=L(n(161)),b=L(n(13)),k=L(n(14));function L(t){return t&&t.__esModule?t:{default:t}}for(var w={},x=["default","forest","dark","neutral"],T=0;T<x.length;T++){var D=x[T];w[D]=n(160)("./"+D+"/index.scss")}var Y={theme:"default",themeCSS:void 0,logLevel:5,startOnLoad:!0,arrowMarkerAbsolute:!1,flowchart:{htmlLabels:!0,useMaxWidth:!0,curve:"linear"},sequence:{diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!0,bottomMarginAdj:1,useMaxWidth:!0},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"',numberSectionStyles:4,axisFormat:"%Y-%m-%d"},class:{},git:{}};(0,o.setLogLevel)(Y.logLevel);var S=e.encodeEntities=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+"¶ß"})},E=e.decodeEntities=function(t){var e=t;return e=(e=(e=e.replace(/fl°°/g,function(){return"&#"})).replace(/fl°/g,function(){return"&"})).replace(/¶ß/g,function(){return";"})},A=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)if("object"===r(t[e[n]])&&null!=t[e[n]])for(var i=Object.keys(t[e[n]]),a=0;a<i.length;a++)o.logger.debug("Setting conf ",e[n],"-",i[a]),void 0===Y[e[n]]&&(Y[e[n]]={}),o.logger.debug("Setting config: "+e[n]+" "+i[a]+" to "+t[e[n]][i[a]]),Y[e[n]][i[a]]=t[e[n]][i[a]];else Y[e[n]]=t[e[n]]};var C={render:function(t,e,n,r){if(void 0!==r)r.innerHTML="",i.select(r).append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g");else{var c=document.querySelector("#d"+t);c&&(c.innerHTML=""),i.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=e,e=S(e);var f=i.select("#d"+t).node(),h=s.default.detectType(e),p=f.firstChild,m=p.firstChild,g=w[Y.theme];if(void 0===g&&(g=""),void 0!==Y.themeCSS&&(g+="\n"+Y.themeCSS),"flowchart"===h){var v=u.default.getClasses(e);for(var b in v)g+="\n."+b+" > * { "+v[b].styles.join(" !important; ")+" !important; }"}var k=document.createElement("style");k.innerHTML=(0,a.default)(g,"#"+t),p.insertBefore(k,m);var L=document.createElement("style"),x=window.getComputedStyle(p);switch(L.innerHTML="#"+t+" {\n color: "+x.color+";\n font: "+x.font+";\n }",p.insertBefore(L,m),h){case"git":Y.flowchart.arrowMarkerAbsolute=Y.arrowMarkerAbsolute,M.default.setConf(Y.git),M.default.draw(e,t,!1);break;case"flowchart":Y.flowchart.arrowMarkerAbsolute=Y.arrowMarkerAbsolute,u.default.setConf(Y.flowchart),u.default.draw(e,t,!1);break;case"sequence":Y.sequence.arrowMarkerAbsolute=Y.arrowMarkerAbsolute,Y.sequenceDiagram?(d.default.setConf(Object.assign(Y.sequence,Y.sequenceDiagram)),console.error("`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.")):d.default.setConf(Y.sequence),d.default.draw(e,t);break;case"gantt":Y.gantt.arrowMarkerAbsolute=Y.arrowMarkerAbsolute,_.default.setConf(Y.gantt),_.default.draw(e,t);break;case"class":Y.class.arrowMarkerAbsolute=Y.arrowMarkerAbsolute,y.default.setConf(Y.class),y.default.draw(e,t)}i.select('[id="'+t+'"]').selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");var T="";Y.arrowMarkerAbsolute&&(T=(T=(T=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)"));var D=i.select("#d"+t).node().innerHTML.replace(/url\(#arrowhead/g,"url("+T+"#arrowhead","g");D=E(D),void 0!==n?n(D,l.default.bindFunctions):o.logger.warn("CB = undefined!");var A=i.select("#d"+t).node();return null!==A&&"function"==typeof A.remove&&i.select("#d"+t).node().remove(),D},parse:function(t){var e=void 0;switch(s.default.detectType(t)){case"git":(e=b.default).parser.yy=k.default;break;case"flowchart":(e=c.default).parser.yy=l.default;break;case"sequence":(e=f.default).parser.yy=h.default;break;case"gantt":(e=p.default).parser.yy=m.default;break;case"class":(e=g.default).parser.yy=v.default}e.parser.yy.parseError=function(t,e){throw{str:t,hash:e}},e.parse(t)},initialize:function(t){o.logger.debug("Initializing mermaidAPI"),"object"===(void 0===t?"undefined":r(t))&&A(t),(0,o.setLogLevel)(Y.logLevel)},getConfig:function(){return Y}};e.default=C},function(t,e,n){(function(t,n){!function(r){var i="object"==typeof e&&e,a="object"==typeof t&&t&&t.exports==i&&t,o="object"==typeof n&&n;o.global!==o&&o.window!==o||(r=o);var s=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,u=/[\x01-\x7F]/g,c=/[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g,l=/<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g,d={"­":"shy","‌":"zwnj","‍":"zwj","‎":"lrm","⁣":"ic","⁢":"it","⁡":"af","‏":"rlm","​":"ZeroWidthSpace","⁠":"NoBreak","̑":"DownBreve","⃛":"tdot","⃜":"DotDot","\t":"Tab","\n":"NewLine"," ":"puncsp"," ":"MediumSpace"," ":"thinsp"," ":"hairsp"," ":"emsp13"," ":"ensp"," ":"emsp14"," ":"emsp"," ":"numsp"," ":"nbsp","  ":"ThickSpace","‾":"oline",_:"lowbar","‐":"dash","–":"ndash","—":"mdash","―":"horbar",",":"comma",";":"semi","⁏":"bsemi",":":"colon","⩴":"Colone","!":"excl","¡":"iexcl","?":"quest","¿":"iquest",".":"period","‥":"nldr","…":"mldr","·":"middot","'":"apos","‘":"lsquo","’":"rsquo","‚":"sbquo","‹":"lsaquo","›":"rsaquo",'"':"quot","“":"ldquo","”":"rdquo","„":"bdquo","«":"laquo","»":"raquo","(":"lpar",")":"rpar","[":"lsqb","]":"rsqb","{":"lcub","}":"rcub","⌈":"lceil","⌉":"rceil","⌊":"lfloor","⌋":"rfloor","⦅":"lopar","⦆":"ropar","⦋":"lbrke","⦌":"rbrke","⦍":"lbrkslu","⦎":"rbrksld","⦏":"lbrksld","⦐":"rbrkslu","⦑":"langd","⦒":"rangd","⦓":"lparlt","⦔":"rpargt","⦕":"gtlPar","⦖":"ltrPar","⟦":"lobrk","⟧":"robrk","⟨":"lang","⟩":"rang","⟪":"Lang","⟫":"Rang","⟬":"loang","⟭":"roang","❲":"lbbrk","❳":"rbbrk","‖":"Vert","§":"sect","¶":"para","@":"commat","*":"ast","/":"sol",undefined:null,"&":"amp","#":"num","%":"percnt","‰":"permil","‱":"pertenk","†":"dagger","‡":"Dagger","•":"bull","⁃":"hybull","′":"prime","″":"Prime","‴":"tprime","⁗":"qprime","‵":"bprime","⁁":"caret","`":"grave","´":"acute","˜":"tilde","^":"Hat","¯":"macr","˘":"breve","˙":"dot","¨":"die","˚":"ring","˝":"dblac","¸":"cedil","˛":"ogon","ˆ":"circ","ˇ":"caron","°":"deg","©":"copy","®":"reg","℗":"copysr","℘":"wp","℞":"rx","℧":"mho","℩":"iiota","←":"larr","↚":"nlarr","→":"rarr","↛":"nrarr","↑":"uarr","↓":"darr","↔":"harr","↮":"nharr","↕":"varr","↖":"nwarr","↗":"nearr","↘":"searr","↙":"swarr","↝":"rarrw","↝̸":"nrarrw","↞":"Larr","↟":"Uarr","↠":"Rarr","↡":"Darr","↢":"larrtl","↣":"rarrtl","↤":"mapstoleft","↥":"mapstoup","↦":"map","↧":"mapstodown","↩":"larrhk","↪":"rarrhk","↫":"larrlp","↬":"rarrlp","↭":"harrw","↰":"lsh","↱":"rsh","↲":"ldsh","↳":"rdsh","↵":"crarr","↶":"cularr","↷":"curarr","↺":"olarr","↻":"orarr","↼":"lharu","↽":"lhard","↾":"uharr","↿":"uharl","⇀":"rharu","⇁":"rhard","⇂":"dharr","⇃":"dharl","⇄":"rlarr","⇅":"udarr","⇆":"lrarr","⇇":"llarr","⇈":"uuarr","⇉":"rrarr","⇊":"ddarr","⇋":"lrhar","⇌":"rlhar","⇐":"lArr","⇍":"nlArr","⇑":"uArr","⇒":"rArr","⇏":"nrArr","⇓":"dArr","⇔":"iff","⇎":"nhArr","⇕":"vArr","⇖":"nwArr","⇗":"neArr","⇘":"seArr","⇙":"swArr","⇚":"lAarr","⇛":"rAarr","⇝":"zigrarr","⇤":"larrb","⇥":"rarrb","⇵":"duarr","⇽":"loarr","⇾":"roarr","⇿":"hoarr","∀":"forall","∁":"comp","∂":"part","∂̸":"npart","∃":"exist","∄":"nexist","∅":"empty","∇":"Del","∈":"in","∉":"notin","∋":"ni","∌":"notni","϶":"bepsi","∏":"prod","∐":"coprod","∑":"sum","+":"plus","±":"pm","÷":"div","×":"times","<":"lt","≮":"nlt","<⃒":"nvlt","=":"equals","≠":"ne","=⃥":"bne","⩵":"Equal",">":"gt","≯":"ngt",">⃒":"nvgt","¬":"not","|":"vert","¦":"brvbar","−":"minus","∓":"mp","∔":"plusdo","⁄":"frasl","∖":"setmn","∗":"lowast","∘":"compfn","√":"Sqrt","∝":"prop","∞":"infin","∟":"angrt","∠":"ang","∠⃒":"nang","∡":"angmsd","∢":"angsph","∣":"mid","∤":"nmid","∥":"par","∦":"npar","∧":"and","∨":"or","∩":"cap","∩︀":"caps","∪":"cup","∪︀":"cups","∫":"int","∬":"Int","∭":"tint","⨌":"qint","∮":"oint","∯":"Conint","∰":"Cconint","∱":"cwint","∲":"cwconint","∳":"awconint","∴":"there4","∵":"becaus","∶":"ratio","∷":"Colon","∸":"minusd","∺":"mDDot","∻":"homtht","∼":"sim","≁":"nsim","∼⃒":"nvsim","∽":"bsim","∽̱":"race","∾":"ac","∾̳":"acE","∿":"acd","≀":"wr","≂":"esim","≂̸":"nesim","≃":"sime","≄":"nsime","≅":"cong","≇":"ncong","≆":"simne","≈":"ap","≉":"nap","≊":"ape","≋":"apid","≋̸":"napid","≌":"bcong","≍":"CupCap","≭":"NotCupCap","≍⃒":"nvap","≎":"bump","≎̸":"nbump","≏":"bumpe","≏̸":"nbumpe","≐":"doteq","≐̸":"nedot","≑":"eDot","≒":"efDot","≓":"erDot","≔":"colone","≕":"ecolon","≖":"ecir","≗":"cire","≙":"wedgeq","≚":"veeeq","≜":"trie","≟":"equest","≡":"equiv","≢":"nequiv","≡⃥":"bnequiv","≤":"le","≰":"nle","≤⃒":"nvle","≥":"ge","≱":"nge","≥⃒":"nvge","≦":"lE","≦̸":"nlE","≧":"gE","≧̸":"ngE","≨︀":"lvnE","≨":"lnE","≩":"gnE","≩︀":"gvnE","≪":"ll","≪̸":"nLtv","≪⃒":"nLt","≫":"gg","≫̸":"nGtv","≫⃒":"nGt","≬":"twixt","≲":"lsim","≴":"nlsim","≳":"gsim","≵":"ngsim","≶":"lg","≸":"ntlg","≷":"gl","≹":"ntgl","≺":"pr","⊀":"npr","≻":"sc","⊁":"nsc","≼":"prcue","⋠":"nprcue","≽":"sccue","⋡":"nsccue","≾":"prsim","≿":"scsim","≿̸":"NotSucceedsTilde","⊂":"sub","⊄":"nsub","⊂⃒":"vnsub","⊃":"sup","⊅":"nsup","⊃⃒":"vnsup","⊆":"sube","⊈":"nsube","⊇":"supe","⊉":"nsupe","⊊︀":"vsubne","⊊":"subne","⊋︀":"vsupne","⊋":"supne","⊍":"cupdot","⊎":"uplus","⊏":"sqsub","⊏̸":"NotSquareSubset","⊐":"sqsup","⊐̸":"NotSquareSuperset","⊑":"sqsube","⋢":"nsqsube","⊒":"sqsupe","⋣":"nsqsupe","⊓":"sqcap","⊓︀":"sqcaps","⊔":"sqcup","⊔︀":"sqcups","⊕":"oplus","⊖":"ominus","⊗":"otimes","⊘":"osol","⊙":"odot","⊚":"ocir","⊛":"oast","⊝":"odash","⊞":"plusb","⊟":"minusb","⊠":"timesb","⊡":"sdotb","⊢":"vdash","⊬":"nvdash","⊣":"dashv","⊤":"top","⊥":"bot","⊧":"models","⊨":"vDash","⊭":"nvDash","⊩":"Vdash","⊮":"nVdash","⊪":"Vvdash","⊫":"VDash","⊯":"nVDash","⊰":"prurel","⊲":"vltri","⋪":"nltri","⊳":"vrtri","⋫":"nrtri","⊴":"ltrie","⋬":"nltrie","⊴⃒":"nvltrie","⊵":"rtrie","⋭":"nrtrie","⊵⃒":"nvrtrie","⊶":"origof","⊷":"imof","⊸":"mumap","⊹":"hercon","⊺":"intcal","⊻":"veebar","⊽":"barvee","⊾":"angrtvb","⊿":"lrtri","⋀":"Wedge","⋁":"Vee","⋂":"xcap","⋃":"xcup","⋄":"diam","⋅":"sdot","⋆":"Star","⋇":"divonx","⋈":"bowtie","⋉":"ltimes","⋊":"rtimes","⋋":"lthree","⋌":"rthree","⋍":"bsime","⋎":"cuvee","⋏":"cuwed","⋐":"Sub","⋑":"Sup","⋒":"Cap","⋓":"Cup","⋔":"fork","⋕":"epar","⋖":"ltdot","⋗":"gtdot","⋘":"Ll","⋘̸":"nLl","⋙":"Gg","⋙̸":"nGg","⋚︀":"lesg","⋚":"leg","⋛":"gel","⋛︀":"gesl","⋞":"cuepr","⋟":"cuesc","⋦":"lnsim","⋧":"gnsim","⋨":"prnsim","⋩":"scnsim","⋮":"vellip","⋯":"ctdot","⋰":"utdot","⋱":"dtdot","⋲":"disin","⋳":"isinsv","⋴":"isins","⋵":"isindot","⋵̸":"notindot","⋶":"notinvc","⋷":"notinvb","⋹":"isinE","⋹̸":"notinE","⋺":"nisd","⋻":"xnis","⋼":"nis","⋽":"notnivc","⋾":"notnivb","⌅":"barwed","⌆":"Barwed","⌌":"drcrop","⌍":"dlcrop","⌎":"urcrop","⌏":"ulcrop","⌐":"bnot","⌒":"profline","⌓":"profsurf","⌕":"telrec","⌖":"target","⌜":"ulcorn","⌝":"urcorn","⌞":"dlcorn","⌟":"drcorn","⌢":"frown","⌣":"smile","⌭":"cylcty","⌮":"profalar","⌶":"topbot","⌽":"ovbar","⌿":"solbar","⍼":"angzarr","⎰":"lmoust","⎱":"rmoust","⎴":"tbrk","⎵":"bbrk","⎶":"bbrktbrk","⏜":"OverParenthesis","⏝":"UnderParenthesis","⏞":"OverBrace","⏟":"UnderBrace","⏢":"trpezium","⏧":"elinters","␣":"blank","─":"boxh","│":"boxv","┌":"boxdr","┐":"boxdl","└":"boxur","┘":"boxul","├":"boxvr","┤":"boxvl","┬":"boxhd","┴":"boxhu","┼":"boxvh","═":"boxH","║":"boxV","╒":"boxdR","╓":"boxDr","╔":"boxDR","╕":"boxdL","╖":"boxDl","╗":"boxDL","╘":"boxuR","╙":"boxUr","╚":"boxUR","╛":"boxuL","╜":"boxUl","╝":"boxUL","╞":"boxvR","╟":"boxVr","╠":"boxVR","╡":"boxvL","╢":"boxVl","╣":"boxVL","╤":"boxHd","╥":"boxhD","╦":"boxHD","╧":"boxHu","╨":"boxhU","╩":"boxHU","╪":"boxvH","╫":"boxVh","╬":"boxVH","▀":"uhblk","▄":"lhblk","█":"block","░":"blk14","▒":"blk12","▓":"blk34","□":"squ","▪":"squf","▫":"EmptyVerySmallSquare","▭":"rect","▮":"marker","▱":"fltns","△":"xutri","▴":"utrif","▵":"utri","▸":"rtrif","▹":"rtri","▽":"xdtri","▾":"dtrif","▿":"dtri","◂":"ltrif","◃":"ltri","◊":"loz","○":"cir","◬":"tridot","◯":"xcirc","◸":"ultri","◹":"urtri","◺":"lltri","◻":"EmptySmallSquare","◼":"FilledSmallSquare","★":"starf","☆":"star","☎":"phone","♀":"female","♂":"male","♠":"spades","♣":"clubs","♥":"hearts","♦":"diams","♪":"sung","✓":"check","✗":"cross","✠":"malt","✶":"sext","❘":"VerticalSeparator","⟈":"bsolhsub","⟉":"suphsol","⟵":"xlarr","⟶":"xrarr","⟷":"xharr","⟸":"xlArr","⟹":"xrArr","⟺":"xhArr","⟼":"xmap","⟿":"dzigrarr","⤂":"nvlArr","⤃":"nvrArr","⤄":"nvHarr","⤅":"Map","⤌":"lbarr","⤍":"rbarr","⤎":"lBarr","⤏":"rBarr","⤐":"RBarr","⤑":"DDotrahd","⤒":"UpArrowBar","⤓":"DownArrowBar","⤖":"Rarrtl","⤙":"latail","⤚":"ratail","⤛":"lAtail","⤜":"rAtail","⤝":"larrfs","⤞":"rarrfs","⤟":"larrbfs","⤠":"rarrbfs","⤣":"nwarhk","⤤":"nearhk","⤥":"searhk","⤦":"swarhk","⤧":"nwnear","⤨":"toea","⤩":"tosa","⤪":"swnwar","⤳":"rarrc","⤳̸":"nrarrc","⤵":"cudarrr","⤶":"ldca","⤷":"rdca","⤸":"cudarrl","⤹":"larrpl","⤼":"curarrm","⤽":"cularrp","⥅":"rarrpl","⥈":"harrcir","⥉":"Uarrocir","⥊":"lurdshar","⥋":"ldrushar","⥎":"LeftRightVector","⥏":"RightUpDownVector","⥐":"DownLeftRightVector","⥑":"LeftUpDownVector","⥒":"LeftVectorBar","⥓":"RightVectorBar","⥔":"RightUpVectorBar","⥕":"RightDownVectorBar","⥖":"DownLeftVectorBar","⥗":"DownRightVectorBar","⥘":"LeftUpVectorBar","⥙":"LeftDownVectorBar","⥚":"LeftTeeVector","⥛":"RightTeeVector","⥜":"RightUpTeeVector","⥝":"RightDownTeeVector","⥞":"DownLeftTeeVector","⥟":"DownRightTeeVector","⥠":"LeftUpTeeVector","⥡":"LeftDownTeeVector","⥢":"lHar","⥣":"uHar","⥤":"rHar","⥥":"dHar","⥦":"luruhar","⥧":"ldrdhar","⥨":"ruluhar","⥩":"rdldhar","⥪":"lharul","⥫":"llhard","⥬":"rharul","⥭":"lrhard","⥮":"udhar","⥯":"duhar","⥰":"RoundImplies","⥱":"erarr","⥲":"simrarr","⥳":"larrsim","⥴":"rarrsim","⥵":"rarrap","⥶":"ltlarr","⥸":"gtrarr","⥹":"subrarr","⥻":"suplarr","⥼":"lfisht","⥽":"rfisht","⥾":"ufisht","⥿":"dfisht","⦚":"vzigzag","⦜":"vangrt","⦝":"angrtvbd","⦤":"ange","⦥":"range","⦦":"dwangle","⦧":"uwangle","⦨":"angmsdaa","⦩":"angmsdab","⦪":"angmsdac","⦫":"angmsdad","⦬":"angmsdae","⦭":"angmsdaf","⦮":"angmsdag","⦯":"angmsdah","⦰":"bemptyv","⦱":"demptyv","⦲":"cemptyv","⦳":"raemptyv","⦴":"laemptyv","⦵":"ohbar","⦶":"omid","⦷":"opar","⦹":"operp","⦻":"olcross","⦼":"odsold","⦾":"olcir","⦿":"ofcir","⧀":"olt","⧁":"ogt","⧂":"cirscir","⧃":"cirE","⧄":"solb","⧅":"bsolb","⧉":"boxbox","⧍":"trisb","⧎":"rtriltri","⧏":"LeftTriangleBar","⧏̸":"NotLeftTriangleBar","⧐":"RightTriangleBar","⧐̸":"NotRightTriangleBar","⧜":"iinfin","⧝":"infintie","⧞":"nvinfin","⧣":"eparsl","⧤":"smeparsl","⧥":"eqvparsl","⧫":"lozf","⧴":"RuleDelayed","⧶":"dsol","⨀":"xodot","⨁":"xoplus","⨂":"xotime","⨄":"xuplus","⨆":"xsqcup","⨍":"fpartint","⨐":"cirfnint","⨑":"awint","⨒":"rppolint","⨓":"scpolint","⨔":"npolint","⨕":"pointint","⨖":"quatint","⨗":"intlarhk","⨢":"pluscir","⨣":"plusacir","⨤":"simplus","⨥":"plusdu","⨦":"plussim","⨧":"plustwo","⨩":"mcomma","⨪":"minusdu","⨭":"loplus","⨮":"roplus","⨯":"Cross","⨰":"timesd","⨱":"timesbar","⨳":"smashp","⨴":"lotimes","⨵":"rotimes","⨶":"otimesas","⨷":"Otimes","⨸":"odiv","⨹":"triplus","⨺":"triminus","⨻":"tritime","⨼":"iprod","⨿":"amalg","⩀":"capdot","⩂":"ncup","⩃":"ncap","⩄":"capand","⩅":"cupor","⩆":"cupcap","⩇":"capcup","⩈":"cupbrcap","⩉":"capbrcup","⩊":"cupcup","⩋":"capcap","⩌":"ccups","⩍":"ccaps","⩐":"ccupssm","⩓":"And","⩔":"Or","⩕":"andand","⩖":"oror","⩗":"orslope","⩘":"andslope","⩚":"andv","⩛":"orv","⩜":"andd","⩝":"ord","⩟":"wedbar","⩦":"sdote","⩪":"simdot","⩭":"congdot","⩭̸":"ncongdot","⩮":"easter","⩯":"apacir","⩰":"apE","⩰̸":"napE","⩱":"eplus","⩲":"pluse","⩳":"Esim","⩷":"eDDot","⩸":"equivDD","⩹":"ltcir","⩺":"gtcir","⩻":"ltquest","⩼":"gtquest","⩽":"les","⩽̸":"nles","⩾":"ges","⩾̸":"nges","⩿":"lesdot","⪀":"gesdot","⪁":"lesdoto","⪂":"gesdoto","⪃":"lesdotor","⪄":"gesdotol","⪅":"lap","⪆":"gap","⪇":"lne","⪈":"gne","⪉":"lnap","⪊":"gnap","⪋":"lEg","⪌":"gEl","⪍":"lsime","⪎":"gsime","⪏":"lsimg","⪐":"gsiml","⪑":"lgE","⪒":"glE","⪓":"lesges","⪔":"gesles","⪕":"els","⪖":"egs","⪗":"elsdot","⪘":"egsdot","⪙":"el","⪚":"eg","⪝":"siml","⪞":"simg","⪟":"simlE","⪠":"simgE","⪡":"LessLess","⪡̸":"NotNestedLessLess","⪢":"GreaterGreater","⪢̸":"NotNestedGreaterGreater","⪤":"glj","⪥":"gla","⪦":"ltcc","⪧":"gtcc","⪨":"lescc","⪩":"gescc","⪪":"smt","⪫":"lat","⪬":"smte","⪬︀":"smtes","⪭":"late","⪭︀":"lates","⪮":"bumpE","⪯":"pre","⪯̸":"npre","⪰":"sce","⪰̸":"nsce","⪳":"prE","⪴":"scE","⪵":"prnE","⪶":"scnE","⪷":"prap","⪸":"scap","⪹":"prnap","⪺":"scnap","⪻":"Pr","⪼":"Sc","⪽":"subdot","⪾":"supdot","⪿":"subplus","⫀":"supplus","⫁":"submult","⫂":"supmult","⫃":"subedot","⫄":"supedot","⫅":"subE","⫅̸":"nsubE","⫆":"supE","⫆̸":"nsupE","⫇":"subsim","⫈":"supsim","⫋︀":"vsubnE","⫋":"subnE","⫌︀":"vsupnE","⫌":"supnE","⫏":"csub","⫐":"csup","⫑":"csube","⫒":"csupe","⫓":"subsup","⫔":"supsub","⫕":"subsub","⫖":"supsup","⫗":"suphsub","⫘":"supdsub","⫙":"forkv","⫚":"topfork","⫛":"mlcp","⫤":"Dashv","⫦":"Vdashl","⫧":"Barv","⫨":"vBar","⫩":"vBarv","⫫":"Vbar","⫬":"Not","⫭":"bNot","⫮":"rnmid","⫯":"cirmid","⫰":"midcir","⫱":"topcir","⫲":"nhpar","⫳":"parsim","⫽":"parsl","⫽⃥":"nparsl","♭":"flat","♮":"natur","♯":"sharp","¤":"curren","¢":"cent",$:"dollar","£":"pound","¥":"yen","€":"euro","¹":"sup1","½":"half","⅓":"frac13","¼":"frac14","⅕":"frac15","⅙":"frac16","⅛":"frac18","²":"sup2","⅔":"frac23","⅖":"frac25","³":"sup3","¾":"frac34","⅗":"frac35","⅜":"frac38","⅘":"frac45","⅚":"frac56","⅝":"frac58","⅞":"frac78","𝒶":"ascr","𝕒":"aopf","𝔞":"afr","𝔸":"Aopf","𝔄":"Afr","𝒜":"Ascr","ª":"ordf","á":"aacute","Á":"Aacute","à":"agrave","À":"Agrave","ă":"abreve","Ă":"Abreve","â":"acirc","Â":"Acirc","å":"aring","Å":"angst","ä":"auml","Ä":"Auml","ã":"atilde","Ã":"Atilde","ą":"aogon","Ą":"Aogon","ā":"amacr","Ā":"Amacr","æ":"aelig","Æ":"AElig","𝒷":"bscr","𝕓":"bopf","𝔟":"bfr","𝔹":"Bopf","ℬ":"Bscr","𝔅":"Bfr","𝔠":"cfr","𝒸":"cscr","𝕔":"copf","ℭ":"Cfr","𝒞":"Cscr","ℂ":"Copf","ć":"cacute","Ć":"Cacute","ĉ":"ccirc","Ĉ":"Ccirc","č":"ccaron","Č":"Ccaron","ċ":"cdot","Ċ":"Cdot","ç":"ccedil","Ç":"Ccedil","℅":"incare","𝔡":"dfr","ⅆ":"dd","𝕕":"dopf","𝒹":"dscr","𝒟":"Dscr","𝔇":"Dfr","ⅅ":"DD","𝔻":"Dopf","ď":"dcaron","Ď":"Dcaron","đ":"dstrok","Đ":"Dstrok","ð":"eth","Ð":"ETH","ⅇ":"ee","ℯ":"escr","𝔢":"efr","𝕖":"eopf","ℰ":"Escr","𝔈":"Efr","𝔼":"Eopf","é":"eacute","É":"Eacute","è":"egrave","È":"Egrave","ê":"ecirc","Ê":"Ecirc","ě":"ecaron","Ě":"Ecaron","ë":"euml","Ë":"Euml","ė":"edot","Ė":"Edot","ę":"eogon","Ę":"Eogon","ē":"emacr","Ē":"Emacr","𝔣":"ffr","𝕗":"fopf","𝒻":"fscr","𝔉":"Ffr","𝔽":"Fopf","ℱ":"Fscr","ff":"fflig","ffi":"ffilig","ffl":"ffllig","fi":"filig",fj:"fjlig","fl":"fllig","ƒ":"fnof","ℊ":"gscr","𝕘":"gopf","𝔤":"gfr","𝒢":"Gscr","𝔾":"Gopf","𝔊":"Gfr","ǵ":"gacute","ğ":"gbreve","Ğ":"Gbreve","ĝ":"gcirc","Ĝ":"Gcirc","ġ":"gdot","Ġ":"Gdot","Ģ":"Gcedil","𝔥":"hfr","ℎ":"planckh","𝒽":"hscr","𝕙":"hopf","ℋ":"Hscr","ℌ":"Hfr","ℍ":"Hopf","ĥ":"hcirc","Ĥ":"Hcirc","ℏ":"hbar","ħ":"hstrok","Ħ":"Hstrok","𝕚":"iopf","𝔦":"ifr","𝒾":"iscr","ⅈ":"ii","𝕀":"Iopf","ℐ":"Iscr","ℑ":"Im","í":"iacute","Í":"Iacute","ì":"igrave","Ì":"Igrave","î":"icirc","Î":"Icirc","ï":"iuml","Ï":"Iuml","ĩ":"itilde","Ĩ":"Itilde","İ":"Idot","į":"iogon","Į":"Iogon","ī":"imacr","Ī":"Imacr","ij":"ijlig","IJ":"IJlig","ı":"imath","𝒿":"jscr","𝕛":"jopf","𝔧":"jfr","𝒥":"Jscr","𝔍":"Jfr","𝕁":"Jopf","ĵ":"jcirc","Ĵ":"Jcirc","ȷ":"jmath","𝕜":"kopf","𝓀":"kscr","𝔨":"kfr","𝒦":"Kscr","𝕂":"Kopf","𝔎":"Kfr","ķ":"kcedil","Ķ":"Kcedil","𝔩":"lfr","𝓁":"lscr","ℓ":"ell","𝕝":"lopf","ℒ":"Lscr","𝔏":"Lfr","𝕃":"Lopf","ĺ":"lacute","Ĺ":"Lacute","ľ":"lcaron","Ľ":"Lcaron","ļ":"lcedil","Ļ":"Lcedil","ł":"lstrok","Ł":"Lstrok","ŀ":"lmidot","Ŀ":"Lmidot","𝔪":"mfr","𝕞":"mopf","𝓂":"mscr","𝔐":"Mfr","𝕄":"Mopf","ℳ":"Mscr","𝔫":"nfr","𝕟":"nopf","𝓃":"nscr","ℕ":"Nopf","𝒩":"Nscr","𝔑":"Nfr","ń":"nacute","Ń":"Nacute","ň":"ncaron","Ň":"Ncaron","ñ":"ntilde","Ñ":"Ntilde","ņ":"ncedil","Ņ":"Ncedil","№":"numero","ŋ":"eng","Ŋ":"ENG","𝕠":"oopf","𝔬":"ofr","ℴ":"oscr","𝒪":"Oscr","𝔒":"Ofr","𝕆":"Oopf","º":"ordm","ó":"oacute","Ó":"Oacute","ò":"ograve","Ò":"Ograve","ô":"ocirc","Ô":"Ocirc","ö":"ouml","Ö":"Ouml","ő":"odblac","Ő":"Odblac","õ":"otilde","Õ":"Otilde","ø":"oslash","Ø":"Oslash","ō":"omacr","Ō":"Omacr","œ":"oelig","Œ":"OElig","𝔭":"pfr","𝓅":"pscr","𝕡":"popf","ℙ":"Popf","𝔓":"Pfr","𝒫":"Pscr","𝕢":"qopf","𝔮":"qfr","𝓆":"qscr","𝒬":"Qscr","𝔔":"Qfr","ℚ":"Qopf","ĸ":"kgreen","𝔯":"rfr","𝕣":"ropf","𝓇":"rscr","ℛ":"Rscr","ℜ":"Re","ℝ":"Ropf","ŕ":"racute","Ŕ":"Racute","ř":"rcaron","Ř":"Rcaron","ŗ":"rcedil","Ŗ":"Rcedil","𝕤":"sopf","𝓈":"sscr","𝔰":"sfr","𝕊":"Sopf","𝔖":"Sfr","𝒮":"Sscr","Ⓢ":"oS","ś":"sacute","Ś":"Sacute","ŝ":"scirc","Ŝ":"Scirc","š":"scaron","Š":"Scaron","ş":"scedil","Ş":"Scedil","ß":"szlig","𝔱":"tfr","𝓉":"tscr","𝕥":"topf","𝒯":"Tscr","𝔗":"Tfr","𝕋":"Topf","ť":"tcaron","Ť":"Tcaron","ţ":"tcedil","Ţ":"Tcedil","™":"trade","ŧ":"tstrok","Ŧ":"Tstrok","𝓊":"uscr","𝕦":"uopf","𝔲":"ufr","𝕌":"Uopf","𝔘":"Ufr","𝒰":"Uscr","ú":"uacute","Ú":"Uacute","ù":"ugrave","Ù":"Ugrave","ŭ":"ubreve","Ŭ":"Ubreve","û":"ucirc","Û":"Ucirc","ů":"uring","Ů":"Uring","ü":"uuml","Ü":"Uuml","ű":"udblac","Ű":"Udblac","ũ":"utilde","Ũ":"Utilde","ų":"uogon","Ų":"Uogon","ū":"umacr","Ū":"Umacr","𝔳":"vfr","𝕧":"vopf","𝓋":"vscr","𝔙":"Vfr","𝕍":"Vopf","𝒱":"Vscr","𝕨":"wopf","𝓌":"wscr","𝔴":"wfr","𝒲":"Wscr","𝕎":"Wopf","𝔚":"Wfr","ŵ":"wcirc","Ŵ":"Wcirc","𝔵":"xfr","𝓍":"xscr","𝕩":"xopf","𝕏":"Xopf","𝔛":"Xfr","𝒳":"Xscr","𝔶":"yfr","𝓎":"yscr","𝕪":"yopf","𝒴":"Yscr","𝔜":"Yfr","𝕐":"Yopf","ý":"yacute","Ý":"Yacute","ŷ":"ycirc","Ŷ":"Ycirc","ÿ":"yuml","Ÿ":"Yuml","𝓏":"zscr","𝔷":"zfr","𝕫":"zopf","ℨ":"Zfr","ℤ":"Zopf","𝒵":"Zscr","ź":"zacute","Ź":"Zacute","ž":"zcaron","Ž":"Zcaron","ż":"zdot","Ż":"Zdot","Ƶ":"imped","þ":"thorn","Þ":"THORN","ʼn":"napos","α":"alpha","Α":"Alpha","β":"beta","Β":"Beta","γ":"gamma","Γ":"Gamma","δ":"delta","Δ":"Delta","ε":"epsi","ϵ":"epsiv","Ε":"Epsilon","ϝ":"gammad","Ϝ":"Gammad","ζ":"zeta","Ζ":"Zeta","η":"eta","Η":"Eta","θ":"theta","ϑ":"thetav","Θ":"Theta","ι":"iota","Ι":"Iota","κ":"kappa","ϰ":"kappav","Κ":"Kappa","λ":"lambda","Λ":"Lambda","μ":"mu","µ":"micro","Μ":"Mu","ν":"nu","Ν":"Nu","ξ":"xi","Ξ":"Xi","ο":"omicron","Ο":"Omicron","π":"pi","ϖ":"piv","Π":"Pi","ρ":"rho","ϱ":"rhov","Ρ":"Rho","σ":"sigma","Σ":"Sigma","ς":"sigmaf","τ":"tau","Τ":"Tau","υ":"upsi","Υ":"Upsilon","ϒ":"Upsi","φ":"phi","ϕ":"phiv","Φ":"Phi","χ":"chi","Χ":"Chi","ψ":"psi","Ψ":"Psi","ω":"omega","Ω":"ohm","а":"acy","А":"Acy","б":"bcy","Б":"Bcy","в":"vcy","В":"Vcy","г":"gcy","Г":"Gcy","ѓ":"gjcy","Ѓ":"GJcy","д":"dcy","Д":"Dcy","ђ":"djcy","Ђ":"DJcy","е":"iecy","Е":"IEcy","ё":"iocy","Ё":"IOcy","є":"jukcy","Є":"Jukcy","ж":"zhcy","Ж":"ZHcy","з":"zcy","З":"Zcy","ѕ":"dscy","Ѕ":"DScy","и":"icy","И":"Icy","і":"iukcy","І":"Iukcy","ї":"yicy","Ї":"YIcy","й":"jcy","Й":"Jcy","ј":"jsercy","Ј":"Jsercy","к":"kcy","К":"Kcy","ќ":"kjcy","Ќ":"KJcy","л":"lcy","Л":"Lcy","љ":"ljcy","Љ":"LJcy","м":"mcy","М":"Mcy","н":"ncy","Н":"Ncy","њ":"njcy","Њ":"NJcy","о":"ocy","О":"Ocy","п":"pcy","П":"Pcy","р":"rcy","Р":"Rcy","с":"scy","С":"Scy","т":"tcy","Т":"Tcy","ћ":"tshcy","Ћ":"TSHcy","у":"ucy","У":"Ucy","ў":"ubrcy","Ў":"Ubrcy","ф":"fcy","Ф":"Fcy","х":"khcy","Х":"KHcy","ц":"tscy","Ц":"TScy","ч":"chcy","Ч":"CHcy","џ":"dzcy","Џ":"DZcy","ш":"shcy","Ш":"SHcy","щ":"shchcy","Щ":"SHCHcy","ъ":"hardcy","Ъ":"HARDcy","ы":"ycy","Ы":"Ycy","ь":"softcy","Ь":"SOFTcy","э":"ecy","Э":"Ecy","ю":"yucy","Ю":"YUcy","я":"yacy","Я":"YAcy","ℵ":"aleph","ℶ":"beth","ℷ":"gimel","ℸ":"daleth"},f=/["&'<>`]/g,h={'"':"&quot;","&":"&amp;","'":"&#x27;","<":"&lt;",">":"&gt;","`":"&#x60;"},_=/&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/,p=/[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,m=/&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)([=a-zA-Z0-9])?/g,y={aacute:"á",Aacute:"Á",abreve:"ă",Abreve:"Ă",ac:"∾",acd:"∿",acE:"∾̳",acirc:"â",Acirc:"Â",acute:"´",acy:"а",Acy:"А",aelig:"æ",AElig:"Æ",af:"⁡",afr:"𝔞",Afr:"𝔄",agrave:"à",Agrave:"À",alefsym:"ℵ",aleph:"ℵ",alpha:"α",Alpha:"Α",amacr:"ā",Amacr:"Ā",amalg:"⨿",amp:"&",AMP:"&",and:"∧",And:"⩓",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",aogon:"ą",Aogon:"Ą",aopf:"𝕒",Aopf:"𝔸",ap:"≈",apacir:"⩯",ape:"≊",apE:"⩰",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",aring:"å",Aring:"Å",ascr:"𝒶",Ascr:"𝒜",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",atilde:"ã",Atilde:"Ã",auml:"ä",Auml:"Ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",bcy:"б",Bcy:"Б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",beta:"β",Beta:"Β",beth:"ℶ",between:"≬",bfr:"𝔟",Bfr:"𝔅",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bnot:"⌐",bNot:"⫭",bopf:"𝕓",Bopf:"𝔹",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxhD:"╥",boxHd:"╤",boxHD:"╦",boxhu:"┴",boxhU:"╨",boxHu:"╧",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpe:"≏",bumpE:"⪮",bumpeq:"≏",Bumpeq:"≎",cacute:"ć",Cacute:"Ć",cap:"∩",Cap:"⋒",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",ccaron:"č",Ccaron:"Č",ccedil:"ç",Ccedil:"Ç",ccirc:"ĉ",Ccirc:"Ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",cdot:"ċ",Cdot:"Ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",chcy:"ч",CHcy:"Ч",check:"✓",checkmark:"✓",chi:"χ",Chi:"Χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cire:"≗",cirE:"⧃",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",colone:"≔",Colone:"⩴",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",cscr:"𝒸",Cscr:"𝒞",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cup:"∪",Cup:"⋓",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",dArr:"⇓",Darr:"↡",dash:"‐",dashv:"⊣",Dashv:"⫤",dbkarow:"⤏",dblac:"˝",dcaron:"ď",Dcaron:"Ď",dcy:"д",Dcy:"Д",dd:"ⅆ",DD:"ⅅ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",delta:"δ",Delta:"Δ",demptyv:"⦱",dfisht:"⥿",dfr:"𝔡",Dfr:"𝔇",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",djcy:"ђ",DJcy:"Ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",dopf:"𝕕",Dopf:"𝔻",dot:"˙",Dot:"¨",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",downarrow:"↓",Downarrow:"⇓",DownArrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",dscr:"𝒹",Dscr:"𝒟",dscy:"ѕ",DScy:"Ѕ",dsol:"⧶",dstrok:"đ",Dstrok:"Đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",dzcy:"џ",DZcy:"Џ",dzigrarr:"⟿",eacute:"é",Eacute:"É",easter:"⩮",ecaron:"ě",Ecaron:"Ě",ecir:"≖",ecirc:"ê",Ecirc:"Ê",ecolon:"≕",ecy:"э",Ecy:"Э",eDDot:"⩷",edot:"ė",eDot:"≑",Edot:"Ė",ee:"ⅇ",efDot:"≒",efr:"𝔢",Efr:"𝔈",eg:"⪚",egrave:"è",Egrave:"È",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",emacr:"ē",Emacr:"Ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",eng:"ŋ",ENG:"Ŋ",ensp:" ",eogon:"ę",Eogon:"Ę",eopf:"𝕖",Eopf:"𝔼",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",epsilon:"ε",Epsilon:"Ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",esim:"≂",Esim:"⩳",eta:"η",Eta:"Η",eth:"ð",ETH:"Ð",euml:"ë",Euml:"Ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",fcy:"ф",Fcy:"Ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",ffr:"𝔣",Ffr:"𝔉",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",fopf:"𝕗",Fopf:"𝔽",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",gamma:"γ",Gamma:"Γ",gammad:"ϝ",Gammad:"Ϝ",gap:"⪆",gbreve:"ğ",Gbreve:"Ğ",Gcedil:"Ģ",gcirc:"ĝ",Gcirc:"Ĝ",gcy:"г",Gcy:"Г",gdot:"ġ",Gdot:"Ġ",ge:"≥",gE:"≧",gel:"⋛",gEl:"⪌",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",gfr:"𝔤",Gfr:"𝔊",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",gjcy:"ѓ",GJcy:"Ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",gopf:"𝕘",Gopf:"𝔾",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",gscr:"ℊ",Gscr:"𝒢",gsim:"≳",gsime:"⪎",gsiml:"⪐",gt:">",Gt:"≫",GT:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",hardcy:"ъ",HARDcy:"Ъ",harr:"↔",hArr:"⇔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",hcirc:"ĥ",Hcirc:"Ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",hstrok:"ħ",Hstrok:"Ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",iacute:"í",Iacute:"Í",ic:"⁣",icirc:"î",Icirc:"Î",icy:"и",Icy:"И",Idot:"İ",iecy:"е",IEcy:"Е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",igrave:"ì",Igrave:"Ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",ijlig:"ij",IJlig:"IJ",Im:"ℑ",imacr:"ī",Imacr:"Ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",int:"∫",Int:"∬",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",iocy:"ё",IOcy:"Ё",iogon:"į",Iogon:"Į",iopf:"𝕚",Iopf:"𝕀",iota:"ι",Iota:"Ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",itilde:"ĩ",Itilde:"Ĩ",iukcy:"і",Iukcy:"І",iuml:"ï",Iuml:"Ï",jcirc:"ĵ",Jcirc:"Ĵ",jcy:"й",Jcy:"Й",jfr:"𝔧",Jfr:"𝔍",jmath:"ȷ",jopf:"𝕛",Jopf:"𝕁",jscr:"𝒿",Jscr:"𝒥",jsercy:"ј",Jsercy:"Ј",jukcy:"є",Jukcy:"Є",kappa:"κ",Kappa:"Κ",kappav:"ϰ",kcedil:"ķ",Kcedil:"Ķ",kcy:"к",Kcy:"К",kfr:"𝔨",Kfr:"𝔎",kgreen:"ĸ",khcy:"х",KHcy:"Х",kjcy:"ќ",KJcy:"Ќ",kopf:"𝕜",Kopf:"𝕂",kscr:"𝓀",Kscr:"𝒦",lAarr:"⇚",lacute:"ĺ",Lacute:"Ĺ",laemptyv:"⦴",lagran:"ℒ",lambda:"λ",Lambda:"Λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larr:"←",lArr:"⇐",Larr:"↞",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",latail:"⤙",lAtail:"⤛",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",lcaron:"ľ",Lcaron:"Ľ",lcedil:"ļ",Lcedil:"Ļ",lceil:"⌈",lcub:"{",lcy:"л",Lcy:"Л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",leftarrow:"←",Leftarrow:"⇐",LeftArrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",Leftrightarrow:"⇔",LeftRightArrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",leg:"⋚",lEg:"⪋",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",lfr:"𝔩",Lfr:"𝔏",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",ljcy:"љ",LJcy:"Љ",ll:"≪",Ll:"⋘",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",lmidot:"ŀ",Lmidot:"Ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",Longleftarrow:"⟸",LongLeftArrow:"⟵",longleftrightarrow:"⟷",Longleftrightarrow:"⟺",LongLeftRightArrow:"⟷",longmapsto:"⟼",longrightarrow:"⟶",Longrightarrow:"⟹",LongRightArrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",lopf:"𝕝",Lopf:"𝕃",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",lstrok:"ł",Lstrok:"Ł",lt:"<",Lt:"≪",LT:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",map:"↦",Map:"⤅",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",mcy:"м",Mcy:"М",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",mfr:"𝔪",Mfr:"𝔐",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",mopf:"𝕞",Mopf:"𝕄",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",mu:"μ",Mu:"Μ",multimap:"⊸",mumap:"⊸",nabla:"∇",nacute:"ń",Nacute:"Ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",ncaron:"ň",Ncaron:"Ň",ncedil:"ņ",Ncedil:"Ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",ncy:"н",Ncy:"Н",ndash:"–",ne:"≠",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",nfr:"𝔫",Nfr:"𝔑",nge:"≱",ngE:"≧̸",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",ngt:"≯",nGt:"≫⃒",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",njcy:"њ",NJcy:"Њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nle:"≰",nlE:"≦̸",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nlt:"≮",nLt:"≪⃒",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",not:"¬",Not:"⫬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrarr:"↛",nrArr:"⇏",nrarrc:"⤳̸",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",nscr:"𝓃",Nscr:"𝒩",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsube:"⊈",nsubE:"⫅̸",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupe:"⊉",nsupE:"⫆̸",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",ntilde:"ñ",Ntilde:"Ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",nu:"ν",Nu:"Ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",oacute:"ó",Oacute:"Ó",oast:"⊛",ocir:"⊚",ocirc:"ô",Ocirc:"Ô",ocy:"о",Ocy:"О",odash:"⊝",odblac:"ő",Odblac:"Ő",odiv:"⨸",odot:"⊙",odsold:"⦼",oelig:"œ",OElig:"Œ",ofcir:"⦿",ofr:"𝔬",Ofr:"𝔒",ogon:"˛",ograve:"ò",Ograve:"Ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",omacr:"ō",Omacr:"Ō",omega:"ω",Omega:"Ω",omicron:"ο",Omicron:"Ο",omid:"⦶",ominus:"⊖",oopf:"𝕠",Oopf:"𝕆",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",or:"∨",Or:"⩔",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",oscr:"ℴ",Oscr:"𝒪",oslash:"ø",Oslash:"Ø",osol:"⊘",otilde:"õ",Otilde:"Õ",otimes:"⊗",Otimes:"⨷",otimesas:"⨶",ouml:"ö",Ouml:"Ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",pcy:"п",Pcy:"П",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",pfr:"𝔭",Pfr:"𝔓",phi:"φ",Phi:"Φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",pi:"π",Pi:"Π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",pr:"≺",Pr:"⪻",prap:"⪷",prcue:"≼",pre:"⪯",prE:"⪳",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",pscr:"𝓅",Pscr:"𝒫",psi:"ψ",Psi:"Ψ",puncsp:" ",qfr:"𝔮",Qfr:"𝔔",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",qscr:"𝓆",Qscr:"𝒬",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",racute:"ŕ",Racute:"Ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarr:"→",rArr:"⇒",Rarr:"↠",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",rarrtl:"↣",Rarrtl:"⤖",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",rcaron:"ř",Rcaron:"Ř",rcedil:"ŗ",Rcedil:"Ŗ",rceil:"⌉",rcub:"}",rcy:"р",Rcy:"Р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",rho:"ρ",Rho:"Ρ",rhov:"ϱ",RightAngleBracket:"⟩",rightarrow:"→",Rightarrow:"⇒",RightArrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",sacute:"ś",Sacute:"Ś",sbquo:"‚",sc:"≻",Sc:"⪼",scap:"⪸",scaron:"š",Scaron:"Š",sccue:"≽",sce:"⪰",scE:"⪴",scedil:"ş",Scedil:"Ş",scirc:"ŝ",Scirc:"Ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",scy:"с",Scy:"С",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",sfr:"𝔰",Sfr:"𝔖",sfrown:"⌢",sharp:"♯",shchcy:"щ",SHCHcy:"Щ",shcy:"ш",SHcy:"Ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",sigma:"σ",Sigma:"Σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",softcy:"ь",SOFTcy:"Ь",sol:"/",solb:"⧄",solbar:"⌿",sopf:"𝕤",Sopf:"𝕊",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",sscr:"𝓈",Sscr:"𝒮",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",star:"☆",Star:"⋆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",sube:"⊆",subE:"⫅",subedot:"⫃",submult:"⫁",subne:"⊊",subnE:"⫋",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup:"⊃",Sup:"⋑",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supe:"⊇",supE:"⫆",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supne:"⊋",supnE:"⫌",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",tau:"τ",Tau:"Τ",tbrk:"⎴",tcaron:"ť",Tcaron:"Ť",tcedil:"ţ",Tcedil:"Ţ",tcy:"т",Tcy:"Т",tdot:"⃛",telrec:"⌕",tfr:"𝔱",Tfr:"𝔗",there4:"∴",therefore:"∴",Therefore:"∴",theta:"θ",Theta:"Θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",thorn:"þ",THORN:"Þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",topf:"𝕥",Topf:"𝕋",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",tscr:"𝓉",Tscr:"𝒯",tscy:"ц",TScy:"Ц",tshcy:"ћ",TSHcy:"Ћ",tstrok:"ŧ",Tstrok:"Ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",uacute:"ú",Uacute:"Ú",uarr:"↑",uArr:"⇑",Uarr:"↟",Uarrocir:"⥉",ubrcy:"ў",Ubrcy:"Ў",ubreve:"ŭ",Ubreve:"Ŭ",ucirc:"û",Ucirc:"Û",ucy:"у",Ucy:"У",udarr:"⇅",udblac:"ű",Udblac:"Ű",udhar:"⥮",ufisht:"⥾",ufr:"𝔲",Ufr:"𝔘",ugrave:"ù",Ugrave:"Ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",umacr:"ū",Umacr:"Ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",uogon:"ų",Uogon:"Ų",uopf:"𝕦",Uopf:"𝕌",uparrow:"↑",Uparrow:"⇑",UpArrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",updownarrow:"↕",Updownarrow:"⇕",UpDownArrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",upsilon:"υ",Upsilon:"Υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",uring:"ů",Uring:"Ů",urtri:"◹",uscr:"𝓊",Uscr:"𝒰",utdot:"⋰",utilde:"ũ",Utilde:"Ũ",utri:"▵",utrif:"▴",uuarr:"⇈",uuml:"ü",Uuml:"Ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",vcy:"в",Vcy:"В",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",vee:"∨",Vee:"⋁",veebar:"⊻",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",vfr:"𝔳",Vfr:"𝔙",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",vopf:"𝕧",Vopf:"𝕍",vprop:"∝",vrtri:"⊳",vscr:"𝓋",Vscr:"𝒱",vsubne:"⊊︀",vsubnE:"⫋︀",vsupne:"⊋︀",vsupnE:"⫌︀",Vvdash:"⊪",vzigzag:"⦚",wcirc:"ŵ",Wcirc:"Ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",wfr:"𝔴",Wfr:"𝔚",wopf:"𝕨",Wopf:"𝕎",wp:"℘",wr:"≀",wreath:"≀",wscr:"𝓌",Wscr:"𝒲",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",xfr:"𝔵",Xfr:"𝔛",xharr:"⟷",xhArr:"⟺",xi:"ξ",Xi:"Ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",xopf:"𝕩",Xopf:"𝕏",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",xscr:"𝓍",Xscr:"𝒳",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",yacute:"ý",Yacute:"Ý",yacy:"я",YAcy:"Я",ycirc:"ŷ",Ycirc:"Ŷ",ycy:"ы",Ycy:"Ы",yen:"¥",yfr:"𝔶",Yfr:"𝔜",yicy:"ї",YIcy:"Ї",yopf:"𝕪",Yopf:"𝕐",yscr:"𝓎",Yscr:"𝒴",yucy:"ю",YUcy:"Ю",yuml:"ÿ",Yuml:"Ÿ",zacute:"ź",Zacute:"Ź",zcaron:"ž",Zcaron:"Ž",zcy:"з",Zcy:"З",zdot:"ż",Zdot:"Ż",zeetrf:"ℨ",ZeroWidthSpace:"​",zeta:"ζ",Zeta:"Ζ",zfr:"𝔷",Zfr:"ℨ",zhcy:"ж",ZHcy:"Ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",zscr:"𝓏",Zscr:"𝒵",zwj:"‍",zwnj:"‌"},g={aacute:"á",Aacute:"Á",acirc:"â",Acirc:"Â",acute:"´",aelig:"æ",AElig:"Æ",agrave:"à",Agrave:"À",amp:"&",AMP:"&",aring:"å",Aring:"Å",atilde:"ã",Atilde:"Ã",auml:"ä",Auml:"Ä",brvbar:"¦",ccedil:"ç",Ccedil:"Ç",cedil:"¸",cent:"¢",copy:"©",COPY:"©",curren:"¤",deg:"°",divide:"÷",eacute:"é",Eacute:"É",ecirc:"ê",Ecirc:"Ê",egrave:"è",Egrave:"È",eth:"ð",ETH:"Ð",euml:"ë",Euml:"Ë",frac12:"½",frac14:"¼",frac34:"¾",gt:">",GT:">",iacute:"í",Iacute:"Í",icirc:"î",Icirc:"Î",iexcl:"¡",igrave:"ì",Igrave:"Ì",iquest:"¿",iuml:"ï",Iuml:"Ï",laquo:"«",lt:"<",LT:"<",macr:"¯",micro:"µ",middot:"·",nbsp:" ",not:"¬",ntilde:"ñ",Ntilde:"Ñ",oacute:"ó",Oacute:"Ó",ocirc:"ô",Ocirc:"Ô",ograve:"ò",Ograve:"Ò",ordf:"ª",ordm:"º",oslash:"ø",Oslash:"Ø",otilde:"õ",Otilde:"Õ",ouml:"ö",Ouml:"Ö",para:"¶",plusmn:"±",pound:"£",quot:'"',QUOT:'"',raquo:"»",reg:"®",REG:"®",sect:"§",shy:"­",sup1:"¹",sup2:"²",sup3:"³",szlig:"ß",thorn:"þ",THORN:"Þ",times:"×",uacute:"ú",Uacute:"Ú",ucirc:"û",Ucirc:"Û",ugrave:"ù",Ugrave:"Ù",uml:"¨",uuml:"ü",Uuml:"Ü",yacute:"ý",Yacute:"Ý",yen:"¥",yuml:"ÿ"},v={0:"�",128:"€",130:"‚",131:"ƒ",132:"„",133:"…",134:"†",135:"‡",136:"ˆ",137:"‰",138:"Š",139:"‹",140:"Œ",142:"Ž",145:"‘",146:"’",147:"“",148:"”",149:"•",150:"–",151:"—",152:"˜",153:"™",154:"š",155:"›",156:"œ",158:"ž",159:"Ÿ"},M=[1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65e3,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111],b=String.fromCharCode,k={}.hasOwnProperty,L=function(t,e){return k.call(t,e)},w=function(t,e){if(!t)return e;var n,r={};for(n in e)r[n]=L(t,n)?t[n]:e[n];return r},x=function(t,e){var n="";return t>=55296&&t<=57343||t>1114111?(e&&Y("character reference outside the permissible Unicode range"),"�"):L(v,t)?(e&&Y("disallowed character reference"),v[t]):(e&&function(t,e){for(var n=-1,r=t.length;++n<r;)if(t[n]==e)return!0;return!1}(M,t)&&Y("disallowed character reference"),t>65535&&(n+=b((t-=65536)>>>10&1023|55296),t=56320|1023&t),n+=b(t))},T=function(t){return"&#x"+t.toString(16).toUpperCase()+";"},D=function(t){return"&#"+t+";"},Y=function(t){throw Error("Parse error: "+t)},S=function(t,e){(e=w(e,S.options)).strict&&p.test(t)&&Y("forbidden code point");var n=e.encodeEverything,r=e.useNamedReferences,i=e.allowUnsafeSymbols,a=e.decimal?D:T,o=function(t){return a(t.charCodeAt(0))};return n?(t=t.replace(u,function(t){return r&&L(d,t)?"&"+d[t]+";":o(t)}),r&&(t=t.replace(/&gt;\u20D2/g,"&nvgt;").replace(/&lt;\u20D2/g,"&nvlt;").replace(/&#x66;&#x6A;/g,"&fjlig;")),r&&(t=t.replace(l,function(t){return"&"+d[t]+";"}))):r?(i||(t=t.replace(f,function(t){return"&"+d[t]+";"})),t=(t=t.replace(/&gt;\u20D2/g,"&nvgt;").replace(/&lt;\u20D2/g,"&nvlt;")).replace(l,function(t){return"&"+d[t]+";"})):i||(t=t.replace(f,o)),t.replace(s,function(t){var e=t.charCodeAt(0),n=t.charCodeAt(1);return a(1024*(e-55296)+n-56320+65536)}).replace(c,o)};S.options={allowUnsafeSymbols:!1,encodeEverything:!1,strict:!1,useNamedReferences:!1,decimal:!1};var E=function(t,e){var n=(e=w(e,E.options)).strict;return n&&_.test(t)&&Y("malformed character reference"),t.replace(m,function(t,r,i,a,o,s,u,c){var l,d,f,h,_,p;return r?(f=r,d=i,n&&!d&&Y("character reference was not terminated by a semicolon"),l=parseInt(f,10),x(l,n)):a?(h=a,d=o,n&&!d&&Y("character reference was not terminated by a semicolon"),l=parseInt(h,16),x(l,n)):s?L(y,_=s)?y[_]:(n&&Y("named character reference was not terminated by a semicolon"),t):(_=u,(p=c)&&e.isAttributeValue?(n&&"="==p&&Y("`&` did not start a character reference"),t):(n&&Y("named character reference was not terminated by a semicolon"),g[_]+(p||"")))})};E.options={isAttributeValue:!1,strict:!1};var A={version:"1.1.1",encode:S,decode:E,escape:function(t){return t.replace(f,function(t){return h[t]})},unescape:E};if("function"==typeof define&&"object"==typeof define.amd&&define.amd)define(function(){return A});else if(i&&!i.nodeType)if(a)a.exports=A;else for(var C in A)L(A,C)&&(i[C]=A[C]);else r.he=A}(this)}).call(this,n(4)(t),n(151))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=o(n(181)),i=o(n(180)),a=n(2);function o(t){return t&&t.__esModule?t:{default:t}}var s=function(){u.startOnLoad?i.default.getConfig().startOnLoad&&u.init():void 0===u.startOnLoad&&(a.logger.debug("In start, no config"),i.default.getConfig().startOnLoad&&u.init())};"undefined"!=typeof document&&
+/*!
+ * Wait for document loaded before starting the execution
+ */
+window.addEventListener("load",function(){s()},!1);var u={startOnLoad:!0,htmlLabels:!0,mermaidAPI:i.default,parse:i.default.parse,render:i.default.render,init:function(){var t=i.default.getConfig();a.logger.debug("Starting rendering diagrams");var e=void 0;arguments.length>=2?(
+/*! sequence config was passed as #1 */
+void 0!==arguments[0]&&(u.sequenceConfig=arguments[0]),e=arguments[1]):e=arguments[0];var n=void 0;"function"==typeof arguments[arguments.length-1]?(n=arguments[arguments.length-1],a.logger.debug("Callback function found")):void 0!==t.mermaid&&("function"==typeof t.mermaid.callback?(n=t.mermaid.callback,a.logger.debug("Callback function found")):a.logger.debug("No Callback function found")),e=void 0===e?document.querySelectorAll(".mermaid"):"string"==typeof e?document.querySelectorAll(e):e instanceof window.Node?[e]:e,a.logger.debug("Start On Load before: "+u.startOnLoad),void 0!==u.startOnLoad&&(a.logger.debug("Start On Load inner: "+u.startOnLoad),i.default.initialize({startOnLoad:u.startOnLoad})),void 0!==u.ganttConfig&&i.default.initialize({gantt:u.ganttConfig});for(var o=void 0,s=function(t){var a=e[t];
+/*! Check if previously processed */if(a.getAttribute("data-processed"))return"continue";a.setAttribute("data-processed",!0);var s="mermaid-"+Date.now();o=a.innerHTML,o=r.default.decode(o).trim().replace(/<br>/gi,"<br/>"),i.default.render(s,o,function(t,e){a.innerHTML=t,void 0!==n&&n(s),e(a)},a)},c=0;c<e.length;c++)s(c)},initialize:function(t){a.logger.debug("Initializing mermaid"),void 0!==t.mermaid&&(void 0!==t.mermaid.startOnLoad&&(u.startOnLoad=t.mermaid.startOnLoad),void 0!==t.mermaid.htmlLabels&&(u.htmlLabels=t.mermaid.htmlLabels)),i.default.initialize(t)},contentLoaded:s};e.default=u}]).default});
+//# sourceMappingURL=mermaid.min.js.map \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.neutral.min.css b/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.neutral.min.css
new file mode 100644
index 00000000..e9570979
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaid.neutral.min.css
@@ -0,0 +1 @@
+.mermaid .label{color:#333}.node circle,.node ellipse,.node polygon,.node rect{fill:#eee;stroke:#999;stroke-width:1px}.edgePath .path{stroke:#666;stroke-width:1.5px}.edgeLabel{background-color:#fff}.cluster rect{fill:#eaf2fb!important;rx:4!important;stroke:#26a!important;stroke-width:1px!important}.cluster text{fill:#333}.actor{stroke:#999;fill:#eee}text.actor{fill:#333;stroke:none}.actor-line{stroke:#666}.messageLine0{marker-end:"url(#arrowhead)"}.messageLine0,.messageLine1{stroke-width:1.5;stroke-dasharray:"2 2";stroke:#333}#arrowhead{fill:#333}#crosshead path{fill:#333!important;stroke:#333!important}.messageText{fill:#333;stroke:none}.labelBox{stroke:#999;fill:#eee}.labelText,.loopText{fill:#fff;stroke:none}.loopLine{stroke-width:2;stroke-dasharray:"2 2";marker-end:"url(#arrowhead)";stroke:#999}.note{stroke:#770;fill:#ffa}.noteText{fill:#000;stroke:none;font-family:Arial,Helvetica,sans-serif;font-size:14px}.section{stroke:none;opacity:.2}.section0,.section2{fill:#7fb2e6}.section1,.section3{fill:#fff;opacity:.2}.sectionTitle0,.sectionTitle1,.sectionTitle2,.sectionTitle3{fill:#333}.sectionTitle{text-anchor:start;font-size:11px;text-height:14px}.grid .tick{stroke:#e5e5e5;opacity:.3;shape-rendering:crispEdges}.grid path{stroke-width:0}.today{fill:none;stroke:#d42;stroke-width:2px}.task{stroke-width:2}.taskText{text-anchor:middle;font-size:11px}.taskTextOutsideRight{fill:#333;text-anchor:start;font-size:11px}.taskTextOutsideLeft{fill:#333;text-anchor:end;font-size:11px}.taskText0,.taskText1,.taskText2,.taskText3{fill:#fff}.task0,.task1,.task2,.task3{fill:#26a;stroke:#194c7f}.taskTextOutside0,.taskTextOutside1,.taskTextOutside2,.taskTextOutside3{fill:#333}.active0,.active1,.active2,.active3{fill:#eee;stroke:#194c7f}.activeText0,.activeText1,.activeText2,.activeText3{fill:#333!important}.done0,.done1,.done2,.done3{stroke:#666;fill:#bbb;stroke-width:2}.doneText0,.doneText1,.doneText2,.doneText3{fill:#333!important}.crit0,.crit1,.crit2,.crit3{stroke:#b1361b;fill:#d42;stroke-width:2}.activeCrit0,.activeCrit1,.activeCrit2,.activeCrit3{stroke:#b1361b;fill:#eee;stroke-width:2}.doneCrit0,.doneCrit1,.doneCrit2,.doneCrit3{stroke:#b1361b;fill:#bbb;stroke-width:2;cursor:pointer}.activeCritText0,.activeCritText1,.activeCritText2,.activeCritText3,.doneCritText0,.doneCritText1,.doneCritText2,.doneCritText3{fill:#333!important}.titleText{text-anchor:middle;font-size:18px;fill:#333}g.classGroup text{fill:#999;stroke:none;font-family:trebuchet ms,verdana,arial;font-size:10px}g.classGroup rect{fill:#eee;stroke:#999}g.classGroup line{stroke:#999;stroke-width:1}svg .classLabel .box{stroke:none;stroke-width:0;fill:#eee;opacity:.5}svg .classLabel .label{fill:#999;font-size:10px}.relation{stroke:#999;stroke-width:1;fill:none}#compositionEnd,#compositionStart,.composition{fill:#999;stroke:#999;stroke-width:1}#aggregationEnd,#aggregationStart,.aggregation{fill:#eee;stroke:#999;stroke-width:1}#dependencyEnd,#dependencyStart,#extensionEnd,#extensionStart{fill:#999;stroke:#999;stroke-width:1}.node text{font-size:14px}.node text,div.mermaidTooltip{font-family:Arial,Helvetica,sans-serif}div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:#eaf2fb;border:1px solid #26a;border-radius:2px;pointer-events:none;z-index:100} \ No newline at end of file
diff --git a/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaidAPI.min.js b/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaidAPI.min.js
new file mode 100644
index 00000000..8d2152a1
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/res/mermaid/8.0.0/mermaidAPI.min.js
@@ -0,0 +1 @@
+module.exports=function(t){function e(n){if(r[n])return r[n].exports;var i=r[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var r={};return e.m=t,e.c=r,e.d=function(t,r,n){e.o(t,r)||Object.defineProperty(t,r,{configurable:!1,enumerable:!0,get:n})},e.n=function(t){var r=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(r,"a",r),r},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=21)}([function(t,e,r){"use strict";function n(t){var e=t.getUTCHours(),r=t.getUTCMinutes(),n=t.getSeconds(),i=t.getMilliseconds();return e<10&&(e="0"+e),r<10&&(r="0"+r),n<10&&(n="0"+n),i<100&&(i="0"+i),i<10&&(i="00"+i),e+":"+r+":"+n+" ("+i+")"}function i(t){return"%c "+n(new Date)+" :%c"+t+": "}var s=function(){},a=function(){},u=function(){},o=function(){},c=function(){};e.setLogLevel=function(t){t<6&&(e.Log.fatal=console.log.bind(console,i("FATAL"),"color:grey;","color: red;")),t<5&&(e.Log.error=console.log.bind(console,i("ERROR"),"color:grey;","color: red;")),t<4&&(e.Log.warn=console.log.bind(console,i("WARN"),"color:grey;","color: orange;")),t<3&&(e.Log.info=console.log.bind(console,i("INFO"),"color:grey;","color: info;")),t<2&&(e.Log.debug=console.log.bind(console,i("DEBUG"),"color:grey;","color: green;"))},e.Log={debug:s,info:a,warn:u,error:o,fatal:c}},function(t,e,r){"use strict";var n="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},i=r(22);t.exports=i,function(){var t=!1;if(t="tspans",i.selection.prototype.textwrap)return!1;void 0===t&&(t=!1),i.selection.prototype.textwrap=i.selection.enter.prototype.textwrap=function(e,r){r=parseInt(r)||0;var s,a=this,u=function(t){var e=t[0][0];if("rect"!==e.tagName.toString())return!1;var r={};return r.x=i.select(e).attr("x")||0,r.y=i.select(e).attr("y")||0,r.width=i.select(e).attr("width")||0,r.height=i.select(e).attr("height")||0,r.attr=t.attr,r},o=function(t){if(t.attr||(t.attr=function(t){if(this[t])return this[t]}),"object"===(void 0===t?"undefined":n(t))&&void 0!==t.x&&void 0!==t.y&&void 0!==t.width&&void 0!==t.height)return t;if("function"==typeof Array.isArray&&Array.isArray(t)||"[object Array]"===Object.prototype.toString.call(t)){return u(t)}return!1}(e);if(r&&(o=function(t,e){var r=t;return 0!==e&&(r.x=parseInt(r.x)+e,r.y=parseInt(r.y)+e,r.width-=2*e,r.height-=2*e),r}(o,r)),0!==a.length&&i&&e&&o){e=o;var c,l=function(t){var r=i.select(t[0].parentNode),n=r.select("text"),a=n.style("line-height"),u=n.text();n.remove();var o=r.append("foreignObject");o.attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").attr("x",e.x).attr("y",e.y).attr("width",e.width).attr("height",e.height);var c=o.append("xhtml:div").attr("class","wrapped");c.style("height",e.height).style("width",e.width).html(u),a&&c.style("line-height",a),s=r.select("foreignObject")},h=function(t){var n,a=t[0],u=a.parentNode,o=i.select(a),c=a.getBBox().height,l=a.getBBox().width,h=c,y=o.style("line-height");if(n=y&&parseInt(y)?parseInt(y.replace("px","")):h,l>e.width){var d=o.text();if(o.text(""),d){var p,g;if(-1!==d.indexOf(" "))p=" ",g=d.split(" ");else{p="";var f=d.length,m=Math.ceil(l/e.width),A=Math.floor(f/m);A*m>=f||m++,g=[];for(var b,E,x=0;x<m;x++)E=x*A,b=d.substr(E,A),g.push(b)}var k=[],_=0,v={};for(x=0;x<g.length;x++){var F,D=g[x],C=o.text(),T=a.getComputedTextLength();F=C?C+p+D:D,o.text(F);var w=a.getComputedTextLength();if(w>e.width&&C&&""!==C&&(_+=T,v={string:C,width:T,offset:_},k.push(v),o.text(""),o.text(D),x===g.length-1&&(F=D,o.text(F),w=a.getComputedTextLength())),x===g.length-1){o.text("");var S=F;S&&""!==S&&(w-_>0&&(w-=_),v={string:S,width:w,offset:_},k.push(v))}}var B;for(o.text(""),x=0;x<k.length;x++)b=k[x].string,x*n<e.height-1.5*n&&(B=o.append("tspan").text(b),B.attr("dy",function(t){if(x>0)return n}),B.attr("x",function(){var t=e.x;return r&&(t+=r),t}))}}o.attr("y",function(){var t=e.y;return n&&(t+=n),r&&(t+=r),t}),o.attr("x",function(){var t=e.x;return r&&(t+=r),t}),s=i.select(u).selectAll("text")};t&&("foreignobjects"===t?c=l:"tspans"===t&&(c=h)),t||(c="undefined"!=typeof SVGForeignObjectElement?l:h);for(var y=0;y<a.length;y++){c(a[y])}return s}return a||!1}}()},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){t.exports=require("fs")},function(t,e){t.exports=require("path")},function(t,e,r){"use strict";var n,i="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},s=r(0),a=s.Log,u=r(6),o=r(1),c={},l=[],h=[],y=[],d={},p=0,g=[];e.addVertex=function(t,e,r,n){var i;void 0!==t&&0!==t.trim().length&&(void 0===c[t]&&(c[t]={id:t,styles:[],classes:[]}),void 0!==e&&(i=e.trim(),'"'===i[0]&&'"'===i[i.length-1]&&(i=i.substring(1,i.length-1)),c[t].text=i),void 0!==r&&(c[t].type=r),void 0!==r&&(c[t].type=r),void 0!==n&&null!==n&&n.forEach(function(e){c[t].styles.push(e)}))},e.addLink=function(t,e,r,n){a.info("Got edge...",t,e);var i={start:t,end:e,type:void 0,text:""};n=r.text,void 0!==n&&(i.text=n.trim(),'"'===i.text[0]&&'"'===i.text[i.text.length-1]&&(i.text=i.text.substring(1,i.text.length-1))),void 0!==r&&(i.type=r.type,i.stroke=r.stroke),l.push(i)},e.updateLinkInterpolate=function(t,e){"default"===t?l.defaultInterpolate=e:l[t].interpolate=e},e.updateLink=function(t,e){"default"===t?l.defaultStyle=e:(-1===u.isSubstringInArray("fill",e)&&e.push("fill:none"),l[t].style=e)},e.addClass=function(t,e){void 0===h[t]&&(h[t]={id:t,styles:[]}),void 0!==e&&null!==e&&e.forEach(function(e){h[t].styles.push(e)})},e.setDirection=function(t){n=t},e.setClass=function(t,e){t.indexOf(",")>0?t.split(",").forEach(function(t){void 0!==c[t]&&c[t].classes.push(e)}):void 0!==c[t]&&c[t].classes.push(e)};var f=function(t,e){void 0!==e&&(d[t]=e)},m=function(t,e){void 0!==e&&void 0!==c[t]&&g.push(function(r){var n=o.select(r).select("#"+t);null!==n&&n.on("click",function(){window[e](t)})})},A=function(t,e){void 0!==e&&void 0!==c[t]&&g.push(function(r){var n=o.select(r).select("#"+t);null!==n&&n.on("click",function(){window.open(e,"newTab")})})};e.getTooltip=function(t){return d[t]},e.setClickEvent=function(t,e,r,n){t.indexOf(",")>0?t.split(",").forEach(function(t){f(t,n),m(t,e),A(t,r)}):(f(t,n),m(t,e),A(t,r))},e.bindFunctions=function(t){g.forEach(function(e){e(t)})},e.getDirection=function(){return n},e.getVertices=function(){return c},e.getEdges=function(){return l},e.getClasses=function(){return h};var b=function(t){var e=o.select(".mermaidTooltip");null===e[0][0]&&(e=o.select("body").append("div").attr("class","mermaidTooltip").style("opacity",0)),o.select(t).select("svg").selectAll("g.node").on("mouseover",function(){var t=o.select(this);if(null!==t.attr("title")){var r=this.getBoundingClientRect();e.transition().duration(200).style("opacity",".9"),e.html(t.attr("title")).style("left",r.left+(r.right-r.left)/2+"px").style("top",r.top-14+document.body.scrollTop+"px"),t.classed("hover",!0)}}).on("mouseout",function(){e.transition().duration(500).style("opacity",0),o.select(this).classed("hover",!1)})};g.push(b),e.clear=function(){c={},h={},l=[],g=[],g.push(b),y=[],p=0,d=[]},e.defaultStyle=function(){return"fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;"},e.addSubGraph=function(t,e){var r=[];r=function(t){var e={boolean:{},number:{},string:{}},r=[];return t.filter(function(t){var n=void 0===t?"undefined":i(t);return" "!==t&&(n in e?!e[n].hasOwnProperty(t)&&(e[n][t]=!0):!(r.indexOf(t)>=0)&&r.push(t))})}(r.concat.apply(r,t));var n={id:"subGraph"+p,nodes:r,title:e};return y.push(n),p+=1,n.id};var E=function(t){var e;for(e=0;e<y.length;e++)if(y[e].id===t)return e;return-1},x=-1,k=[],_=function t(e,r){var n=y[r].nodes;if(!((x+=1)>2e3)){if(k[x]=r,y[r].id===e)return{result:!0,count:0};for(var i=0,s=1;i<n.length;){var a=E(n[i]);if(a>=0){var u=t(e,a);if(u.result)return{result:!0,count:s+u.count};s+=u.count}i+=1}return{result:!1,count:s}}};e.getDepthFirstPos=function(t){return k[t]},e.indexNodes=function(){x=-1,y.length>0&&_("none",y.length-1)},e.getSubGraphs=function(){return y},e.parseError=function(t,e){global.mermaidAPI.parseError(t,e)}},function(t,e,r){"use strict";var n=r(0),i=n.Log,s=function(t){return t=t.replace(/^\s*%%.*\n/g,"\n"),t.match(/^\s*sequenceDiagram/)?"sequenceDiagram":t.match(/^\s*digraph/)?"dotGraph":t.match(/^\s*info/)?"info":t.match(/^\s*gantt/)?"gantt":t.match(/^\s*classDiagram/)?(i.debug("Detected classDiagram syntax"),"classDiagram"):t.match(/^\s*gitGraph/)?(i.debug("Detected gitGraph syntax"),"gitGraph"):"graph"};e.detectType=s;var a=function(t,e){for(var r,n="",s=document.styleSheets,a=0;a<s.length;a++)if("mermaid-svg-internal-css"!==s[a].title)try{var u=s[a].cssRules;if(null!==u)for(var o=0;o<u.length;o++)if(r=u[o],void 0!==r.style){var c;c=t.querySelectorAll(r.selectorText),c.length>0&&(n+=r.selectorText+" { "+r.style.cssText+"}\n")}}catch(t){void 0!==r&&i.warn('Invalid CSS selector "'+r.selectorText+'"',t)}var l="",h="";for(var y in e)e.hasOwnProperty(y)&&void 0!==y&&("default"===y?(e.default.styles instanceof Array&&(l+="#"+t.id.trim()+" .node>rect { "+e[y].styles.join("; ")+"; }\n"),e.default.nodeLabelStyles instanceof Array&&(l+="#"+t.id.trim()+" .node text { "+e[y].nodeLabelStyles.join("; ")+"; }\n"),e.default.edgeLabelStyles instanceof Array&&(l+="#"+t.id.trim()+" .edgeLabel text { "+e[y].edgeLabelStyles.join("; ")+"; }\n"),e.default.clusterStyles instanceof Array&&(l+="#"+t.id.trim()+" .cluster rect { "+e[y].clusterStyles.join("; ")+"; }\n")):e[y].styles instanceof Array&&(h+="#"+t.id.trim()+" ."+y+">rect, ."+y+">polygon, ."+y+">circle, ."+y+">ellipse { "+e[y].styles.join("; ")+"; }\n"));if(""!==n||""!==l||""!==h){var d=document.createElement("style");d.setAttribute("type","text/css"),d.setAttribute("title","mermaid-svg-internal-css"),d.innerHTML="/* <![CDATA[ */\n",""!==l&&(d.innerHTML+=l),""!==n&&(d.innerHTML+=n),""!==h&&(d.innerHTML+=h),d.innerHTML+="/* ]]> */\n",t.insertBefore(d,t.firstChild)}};e.cloneCssStyles=a;var u=function(t,e){for(var r=0;r<e.length;r++)if(e[r].match(t))return r;return-1};e.isSubstringInArray=u},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[1,4],n=[1,3],i=[1,5],s=[1,8,9,10,11,13,18,30,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],a=[2,2],u=[1,12],o=[1,13],c=[1,14],l=[1,15],h=[1,31],y=[1,33],d=[1,22],p=[1,34],g=[1,24],f=[1,25],m=[1,26],A=[1,27],b=[1,28],E=[1,38],x=[1,40],k=[1,35],_=[1,39],v=[1,45],F=[1,44],D=[1,36],C=[1,37],T=[1,41],w=[1,42],S=[1,43],B=[1,8,9,10,11,13,18,30,32,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],L=[1,53],I=[1,52],O=[1,54],P=[1,72],N=[1,80],M=[1,81],R=[1,66],$=[1,65],j=[1,85],V=[1,84],U=[1,82],G=[1,83],H=[1,73],Y=[1,68],W=[1,67],q=[1,63],z=[1,75],X=[1,76],K=[1,77],Z=[1,78],Q=[1,79],J=[1,70],tt=[1,69],et=[8,9,11],rt=[8,9,11,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64],nt=[1,115],it=[8,9,10,11,13,15,18,36,38,40,42,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,81,86,88,89,91,92,94,95,96,97,98],st=[8,9,10,11,12,13,15,16,17,18,30,32,36,37,38,39,40,41,42,43,46,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,71,72,73,74,75,78,81,84,86,88,89,91,92,94,95,96,97,98],at=[1,117],ut=[1,118],ot=[8,9,10,11,13,18,30,32,46,71,72,73,74,75,81,86,88,89,91,92,94,95,96,97,98],ct=[8,9,10,11,12,13,15,16,17,18,30,32,37,39,41,43,46,50,51,52,53,54,56,57,58,59,60,61,62,63,64,65,71,72,73,74,75,78,81,84,86,88,89,91,92,94,95,96,97,98],lt=[13,18,46,81,86,88,89,91,92,94,95,96,97,98],ht=[13,18,46,49,65,81,86,88,89,91,92,94,95,96,97,98],yt=[1,191],dt=[1,188],pt=[1,195],gt=[1,192],ft=[1,189],mt=[1,196],At=[1,186],bt=[1,187],Et=[1,190],xt=[1,193],kt=[1,194],_t=[1,213],vt=[8,9,11,86],Ft=[8,9,10,11,46,71,80,81,84,86,88,89,90,91,92],Dt={trace:function(){},yy:{},symbols_:{error:2,mermaidDoc:3,graphConfig:4,document:5,line:6,statement:7,SEMI:8,NEWLINE:9,SPACE:10,EOF:11,GRAPH:12,DIR:13,FirstStmtSeparator:14,TAGEND:15,TAGSTART:16,UP:17,DOWN:18,ending:19,endToken:20,spaceList:21,spaceListNewline:22,verticeStatement:23,separator:24,styleStatement:25,linkStyleStatement:26,classDefStatement:27,classStatement:28,clickStatement:29,subgraph:30,text:31,end:32,vertex:33,link:34,alphaNum:35,SQS:36,SQE:37,PS:38,PE:39,"(-":40,"-)":41,DIAMOND_START:42,DIAMOND_STOP:43,alphaNumStatement:44,alphaNumToken:45,MINUS:46,linkStatement:47,arrowText:48,TESTSTR:49,"--":50,ARROW_POINT:51,ARROW_CIRCLE:52,ARROW_CROSS:53,ARROW_OPEN:54,"-.":55,DOTTED_ARROW_POINT:56,DOTTED_ARROW_CIRCLE:57,DOTTED_ARROW_CROSS:58,DOTTED_ARROW_OPEN:59,"==":60,THICK_ARROW_POINT:61,THICK_ARROW_CIRCLE:62,THICK_ARROW_CROSS:63,THICK_ARROW_OPEN:64,PIPE:65,textToken:66,STR:67,commentText:68,commentToken:69,keywords:70,STYLE:71,LINKSTYLE:72,CLASSDEF:73,CLASS:74,CLICK:75,textNoTags:76,textNoTagsToken:77,DEFAULT:78,stylesOpt:79,HEX:80,NUM:81,INTERPOLATE:82,commentStatement:83,PCT:84,style:85,COMMA:86,styleComponent:87,ALPHA:88,COLON:89,UNIT:90,BRKT:91,DOT:92,graphCodeTokens:93,PUNCTUATION:94,UNICODE_TEXT:95,PLUS:96,EQUALS:97,MULT:98,TAG_START:99,TAG_END:100,QUOTE:101,$accept:0,$end:1},terminals_:{2:"error",8:"SEMI",9:"NEWLINE",10:"SPACE",11:"EOF",12:"GRAPH",13:"DIR",15:"TAGEND",16:"TAGSTART",17:"UP",18:"DOWN",30:"subgraph",32:"end",36:"SQS",37:"SQE",38:"PS",39:"PE",40:"(-",41:"-)",42:"DIAMOND_START",43:"DIAMOND_STOP",46:"MINUS",49:"TESTSTR",50:"--",51:"ARROW_POINT",52:"ARROW_CIRCLE",53:"ARROW_CROSS",54:"ARROW_OPEN",55:"-.",56:"DOTTED_ARROW_POINT",57:"DOTTED_ARROW_CIRCLE",58:"DOTTED_ARROW_CROSS",59:"DOTTED_ARROW_OPEN",60:"==",61:"THICK_ARROW_POINT",62:"THICK_ARROW_CIRCLE",63:"THICK_ARROW_CROSS",64:"THICK_ARROW_OPEN",65:"PIPE",67:"STR",71:"STYLE",72:"LINKSTYLE",73:"CLASSDEF",74:"CLASS",75:"CLICK",78:"DEFAULT",80:"HEX",81:"NUM",82:"INTERPOLATE",84:"PCT",86:"COMMA",88:"ALPHA",89:"COLON",90:"UNIT",91:"BRKT",92:"DOT",94:"PUNCTUATION",95:"UNICODE_TEXT",96:"PLUS",97:"EQUALS",98:"MULT",99:"TAG_START",100:"TAG_END",101:"QUOTE"},productions_:[0,[3,2],[5,0],[5,2],[6,1],[6,1],[6,1],[6,1],[6,1],[4,2],[4,2],[4,4],[4,4],[4,4],[4,4],[4,4],[19,2],[19,1],[20,1],[20,1],[20,1],[14,1],[14,1],[14,2],[22,2],[22,2],[22,1],[22,1],[21,2],[21,1],[7,2],[7,2],[7,2],[7,2],[7,2],[7,2],[7,5],[7,4],[24,1],[24,1],[24,1],[23,3],[23,1],[33,4],[33,5],[33,6],[33,7],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,4],[33,5],[33,1],[33,2],[35,1],[35,2],[44,1],[44,1],[44,1],[44,1],[34,2],[34,3],[34,3],[34,1],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[34,3],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[47,1],[48,3],[31,1],[31,2],[31,1],[68,1],[68,2],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[70,1],[76,1],[76,2],[27,5],[27,5],[28,5],[29,5],[29,7],[29,5],[29,7],[25,5],[25,5],[26,5],[26,5],[26,9],[26,9],[26,7],[26,7],[83,3],[79,1],[79,3],[85,1],[85,2],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[87,1],[69,1],[69,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[66,1],[77,1],[77,1],[77,1],[77,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1],[93,1]],performAction:function(t,e,r,n,i,s,a){var u=s.length-1;switch(i){case 2:this.$=[];break;case 3:s[u]!==[]&&s[u-1].push(s[u]),this.$=s[u-1];break;case 4:case 57:case 59:case 60:case 92:case 94:case 95:case 108:this.$=s[u];break;case 11:n.setDirection(s[u-1]),this.$=s[u-1];break;case 12:n.setDirection("LR"),this.$=s[u-1];break;case 13:n.setDirection("RL"),this.$=s[u-1];break;case 14:n.setDirection("BT"),this.$=s[u-1];break;case 15:n.setDirection("TB"),this.$=s[u-1];break;case 30:this.$=s[u-1];break;case 31:case 32:case 33:case 34:case 35:this.$=[];break;case 36:this.$=n.addSubGraph(s[u-1],s[u-3]);break;case 37:this.$=n.addSubGraph(s[u-1],void 0);break;case 41:n.addLink(s[u-2],s[u],s[u-1]),this.$=[s[u-2],s[u]];break;case 42:this.$=[s[u]];break;case 43:this.$=s[u-3],n.addVertex(s[u-3],s[u-1],"square");break;case 44:this.$=s[u-4],n.addVertex(s[u-4],s[u-2],"square");break;case 45:this.$=s[u-5],n.addVertex(s[u-5],s[u-2],"circle");break;case 46:this.$=s[u-6],n.addVertex(s[u-6],s[u-3],"circle");break;case 47:this.$=s[u-3],n.addVertex(s[u-3],s[u-1],"ellipse");break;case 48:this.$=s[u-4],n.addVertex(s[u-4],s[u-2],"ellipse");break;case 49:this.$=s[u-3],n.addVertex(s[u-3],s[u-1],"round");break;case 50:this.$=s[u-4],n.addVertex(s[u-4],s[u-2],"round");break;case 51:this.$=s[u-3],n.addVertex(s[u-3],s[u-1],"diamond");break;case 52:this.$=s[u-4],n.addVertex(s[u-4],s[u-2],"diamond");break;case 53:this.$=s[u-3],n.addVertex(s[u-3],s[u-1],"odd");break;case 54:this.$=s[u-4],n.addVertex(s[u-4],s[u-2],"odd");break;case 55:this.$=s[u],n.addVertex(s[u]);break;case 56:this.$=s[u-1],n.addVertex(s[u-1]);break;case 58:case 93:case 96:case 109:this.$=s[u-1]+""+s[u];break;case 61:this.$="v";break;case 62:this.$="-";break;case 63:s[u-1].text=s[u],this.$=s[u-1];break;case 64:case 65:s[u-2].text=s[u-1],this.$=s[u-2];break;case 66:this.$=s[u];break;case 67:this.$={type:"arrow",stroke:"normal",text:s[u-1]};break;case 68:this.$={type:"arrow_circle",stroke:"normal",text:s[u-1]};break;case 69:this.$={type:"arrow_cross",stroke:"normal",text:s[u-1]};break;case 70:this.$={type:"arrow_open",stroke:"normal",text:s[u-1]};break;case 71:this.$={type:"arrow",stroke:"dotted",text:s[u-1]};break;case 72:this.$={type:"arrow_circle",stroke:"dotted",text:s[u-1]};break;case 73:this.$={type:"arrow_cross",stroke:"dotted",text:s[u-1]};break;case 74:this.$={type:"arrow_open",stroke:"dotted",text:s[u-1]};break;case 75:this.$={type:"arrow",stroke:"thick",text:s[u-1]};break;case 76:this.$={type:"arrow_circle",stroke:"thick",text:s[u-1]};break;case 77:this.$={type:"arrow_cross",stroke:"thick",text:s[u-1]};break;case 78:this.$={type:"arrow_open",stroke:"thick",text:s[u-1]};break;case 79:this.$={type:"arrow",stroke:"normal"};break;case 80:this.$={type:"arrow_circle",stroke:"normal"};break;case 81:this.$={type:"arrow_cross",stroke:"normal"};break;case 82:this.$={type:"arrow_open",stroke:"normal"};break;case 83:this.$={type:"arrow",stroke:"dotted"};break;case 84:this.$={type:"arrow_circle",stroke:"dotted"};break;case 85:this.$={type:"arrow_cross",stroke:"dotted"};break;case 86:this.$={type:"arrow_open",stroke:"dotted"};break;case 87:this.$={type:"arrow",stroke:"thick"};break;case 88:this.$={type:"arrow_circle",stroke:"thick"};break;case 89:this.$={type:"arrow_cross",stroke:"thick"};break;case 90:this.$={type:"arrow_open",stroke:"thick"};break;case 91:this.$=s[u-1];break;case 110:case 111:this.$=s[u-4],n.addClass(s[u-2],s[u]);break;case 112:this.$=s[u-4],n.setClass(s[u-2],s[u]);break;case 113:this.$=s[u-4],n.setClickEvent(s[u-2],s[u],void 0,void 0);break;case 114:this.$=s[u-6],n.setClickEvent(s[u-4],s[u-2],void 0,s[u]);break;case 115:this.$=s[u-4],n.setClickEvent(s[u-2],void 0,s[u],void 0);break;case 116:this.$=s[u-6],n.setClickEvent(s[u-4],void 0,s[u-2],s[u]);break;case 117:this.$=s[u-4],n.addVertex(s[u-2],void 0,void 0,s[u]);break;case 118:case 119:case 120:this.$=s[u-4],n.updateLink(s[u-2],s[u]);break;case 121:case 122:this.$=s[u-8],n.updateLinkInterpolate(s[u-6],s[u-2]),n.updateLink(s[u-6],s[u]);break;case 123:case 124:this.$=s[u-6],n.updateLinkInterpolate(s[u-4],s[u]);break;case 126:this.$=[s[u]];break;case 127:s[u-2].push(s[u]),this.$=s[u-2];break;case 129:this.$=s[u-1]+s[u]}},table:[{3:1,4:2,9:r,10:n,12:i},{1:[3]},e(s,a,{5:6}),{4:7,9:r,10:n,12:i},{4:8,9:r,10:n,12:i},{10:[1,9]},{1:[2,1],6:10,7:11,8:u,9:o,10:c,11:l,13:h,18:y,23:16,25:17,26:18,27:19,28:20,29:21,30:d,33:23,35:29,44:30,45:32,46:p,71:g,72:f,73:m,74:A,75:b,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(s,[2,9]),e(s,[2,10]),{13:[1,46],15:[1,47],16:[1,48],17:[1,49],18:[1,50]},e(B,[2,3]),e(B,[2,4]),e(B,[2,5]),e(B,[2,6]),e(B,[2,7]),e(B,[2,8]),{8:L,9:I,11:O,24:51},{8:L,9:I,11:O,24:55},{8:L,9:I,11:O,24:56},{8:L,9:I,11:O,24:57},{8:L,9:I,11:O,24:58},{8:L,9:I,11:O,24:59},{8:L,9:I,10:P,11:O,12:N,13:M,15:R,16:$,17:j,18:V,24:61,30:U,31:60,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(et,[2,42],{34:86,47:87,50:[1,88],51:[1,91],52:[1,92],53:[1,93],54:[1,94],55:[1,89],56:[1,95],57:[1,96],58:[1,97],59:[1,98],60:[1,90],61:[1,99],62:[1,100],63:[1,101],64:[1,102]}),{10:[1,103]},{10:[1,104]},{10:[1,105]},{10:[1,106]},{10:[1,107]},e(rt,[2,55],{45:32,21:113,44:114,10:nt,13:h,15:[1,112],18:y,36:[1,108],38:[1,109],40:[1,110],42:[1,111],46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S}),e(it,[2,57]),e(it,[2,59]),e(it,[2,60]),e(it,[2,61]),e(it,[2,62]),e(st,[2,154]),e(st,[2,155]),e(st,[2,156]),e(st,[2,157]),e(st,[2,158]),e(st,[2,159]),e(st,[2,160]),e(st,[2,161]),e(st,[2,162]),e(st,[2,163]),e(st,[2,164]),{8:at,9:ut,10:nt,14:116,21:119},{8:at,9:ut,10:nt,14:120,21:119},{8:at,9:ut,10:nt,14:121,21:119},{8:at,9:ut,10:nt,14:122,21:119},{8:at,9:ut,10:nt,14:123,21:119},e(B,[2,30]),e(B,[2,38]),e(B,[2,39]),e(B,[2,40]),e(B,[2,31]),e(B,[2,32]),e(B,[2,33]),e(B,[2,34]),e(B,[2,35]),{8:L,9:I,10:P,11:O,12:N,13:M,15:R,16:$,17:j,18:V,24:124,30:U,32:G,45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(ot,a,{5:126}),e(ct,[2,92]),e(ct,[2,94]),e(ct,[2,143]),e(ct,[2,144]),e(ct,[2,145]),e(ct,[2,146]),e(ct,[2,147]),e(ct,[2,148]),e(ct,[2,149]),e(ct,[2,150]),e(ct,[2,151]),e(ct,[2,152]),e(ct,[2,153]),e(ct,[2,97]),e(ct,[2,98]),e(ct,[2,99]),e(ct,[2,100]),e(ct,[2,101]),e(ct,[2,102]),e(ct,[2,103]),e(ct,[2,104]),e(ct,[2,105]),e(ct,[2,106]),e(ct,[2,107]),{13:h,18:y,33:127,35:29,44:30,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(lt,[2,66],{48:128,49:[1,129],65:[1,130]}),{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:131,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:132,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:133,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(ht,[2,79]),e(ht,[2,80]),e(ht,[2,81]),e(ht,[2,82]),e(ht,[2,83]),e(ht,[2,84]),e(ht,[2,85]),e(ht,[2,86]),e(ht,[2,87]),e(ht,[2,88]),e(ht,[2,89]),e(ht,[2,90]),{13:h,18:y,35:134,44:30,45:32,46:p,80:[1,135],81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{78:[1,136],81:[1,137]},{13:h,18:y,35:139,44:30,45:32,46:p,78:[1,138],81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{13:h,18:y,35:140,44:30,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{13:h,18:y,35:141,44:30,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:142,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:144,32:G,38:[1,143],45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:145,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:146,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:147,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(rt,[2,56]),e(it,[2,58]),e(rt,[2,29],{21:148,10:nt}),e(s,[2,11]),e(s,[2,21]),e(s,[2,22]),{9:[1,149]},e(s,[2,12]),e(s,[2,13]),e(s,[2,14]),e(s,[2,15]),e(ot,a,{5:150}),e(ct,[2,93]),{6:10,7:11,8:u,9:o,10:c,11:l,13:h,18:y,23:16,25:17,26:18,27:19,28:20,29:21,30:d,32:[1,151],33:23,35:29,44:30,45:32,46:p,71:g,72:f,73:m,74:A,75:b,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(et,[2,41]),e(lt,[2,63],{10:[1,152]}),{10:[1,153]},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:154,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,45:71,46:H,50:Y,51:[1,155],52:[1,156],53:[1,157],54:[1,158],60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,45:71,46:H,50:Y,56:[1,159],57:[1,160],58:[1,161],59:[1,162],60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,45:71,46:H,50:Y,60:W,61:[1,163],62:[1,164],63:[1,165],64:[1,166],66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:[1,167],13:h,18:y,44:114,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:[1,168]},{10:[1,169]},{10:[1,170]},{10:[1,171]},{10:[1,172],13:h,18:y,44:114,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:[1,173],13:h,18:y,44:114,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:[1,174],13:h,18:y,44:114,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,37:[1,175],45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,31:176,32:G,45:71,46:H,50:Y,60:W,66:62,67:q,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,39:[1,177],45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,41:[1,178],45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,43:[1,179],45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,37:[1,180],45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(rt,[2,28]),e(s,[2,23]),{6:10,7:11,8:u,9:o,10:c,11:l,13:h,18:y,23:16,25:17,26:18,27:19,28:20,29:21,30:d,32:[1,181],33:23,35:29,44:30,45:32,46:p,71:g,72:f,73:m,74:A,75:b,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(B,[2,37]),e(lt,[2,65]),e(lt,[2,64]),{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,45:71,46:H,50:Y,60:W,65:[1,182],66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(lt,[2,67]),e(lt,[2,68]),e(lt,[2,69]),e(lt,[2,70]),e(lt,[2,71]),e(lt,[2,72]),e(lt,[2,73]),e(lt,[2,74]),e(lt,[2,75]),e(lt,[2,76]),e(lt,[2,77]),e(lt,[2,78]),{10:yt,46:dt,71:pt,79:183,80:gt,81:ft,84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{10:yt,46:dt,71:pt,79:197,80:gt,81:ft,84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{10:yt,46:dt,71:pt,79:198,80:gt,81:ft,82:[1,199],84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{10:yt,46:dt,71:pt,79:200,80:gt,81:ft,82:[1,201],84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{10:yt,46:dt,71:pt,79:202,80:gt,81:ft,84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{10:yt,46:dt,71:pt,79:203,80:gt,81:ft,84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{13:h,18:y,35:204,44:30,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{13:h,18:y,35:205,44:30,45:32,46:p,67:[1,206],81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(rt,[2,43],{21:207,10:nt}),{10:P,12:N,13:M,15:R,16:$,17:j,18:V,30:U,32:G,39:[1,208],45:71,46:H,50:Y,60:W,66:125,70:74,71:z,72:X,73:K,74:Z,75:Q,77:64,78:J,81:E,84:tt,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},e(rt,[2,49],{21:209,10:nt}),e(rt,[2,47],{21:210,10:nt}),e(rt,[2,51],{21:211,10:nt}),e(rt,[2,53],{21:212,10:nt}),e(B,[2,36]),e([10,13,18,46,81,86,88,89,91,92,94,95,96,97,98],[2,91]),e(et,[2,117],{86:_t}),e(vt,[2,126],{87:214,10:yt,46:dt,71:pt,80:gt,81:ft,84:mt,88:At,89:bt,90:Et,91:xt,92:kt}),e(Ft,[2,128]),e(Ft,[2,130]),e(Ft,[2,131]),e(Ft,[2,132]),e(Ft,[2,133]),e(Ft,[2,134]),e(Ft,[2,135]),e(Ft,[2,136]),e(Ft,[2,137]),e(Ft,[2,138]),e(Ft,[2,139]),e(Ft,[2,140]),e(et,[2,118],{86:_t}),e(et,[2,119],{86:_t}),{10:[1,215]},e(et,[2,120],{86:_t}),{10:[1,216]},e(et,[2,110],{86:_t}),e(et,[2,111],{86:_t}),e(et,[2,112],{45:32,44:114,13:h,18:y,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S}),e(et,[2,113],{45:32,44:114,10:[1,217],13:h,18:y,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S}),e(et,[2,115],{10:[1,218]}),e(rt,[2,44]),{39:[1,219]},e(rt,[2,50]),e(rt,[2,48]),e(rt,[2,52]),e(rt,[2,54]),{10:yt,46:dt,71:pt,80:gt,81:ft,84:mt,85:220,87:185,88:At,89:bt,90:Et,91:xt,92:kt},e(Ft,[2,129]),{13:h,18:y,35:221,44:30,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{13:h,18:y,35:222,44:30,45:32,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S},{67:[1,223]},{67:[1,224]},e(rt,[2,45],{21:225,10:nt}),e(vt,[2,127],{87:214,10:yt,46:dt,71:pt,80:gt,81:ft,84:mt,88:At,89:bt,90:Et,91:xt,92:kt}),e(et,[2,123],{45:32,44:114,10:[1,226],13:h,18:y,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S}),e(et,[2,124],{45:32,44:114,10:[1,227],13:h,18:y,46:p,81:E,86:x,88:k,89:_,91:v,92:F,94:D,95:C,96:T,97:w,98:S}),e(et,[2,114]),e(et,[2,116]),e(rt,[2,46]),{10:yt,46:dt,71:pt,79:228,80:gt,81:ft,84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},{10:yt,46:dt,71:pt,79:229,80:gt,81:ft,84:mt,85:184,87:185,88:At,89:bt,90:Et,91:xt,92:kt},e(et,[2,121],{86:_t}),e(et,[2,122],{86:_t})],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var r=function(t,e){this.message=t,this.hash=e};throw r.prototype=Error,new r(t,e)}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},Ct=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,r,n){switch(r){case 0:break;case 1:this.begin("string");break;case 2:this.popState();break;case 3:return"STR";case 4:return 71;case 5:return 78;case 6:return 72;case 7:return 82;case 8:return 73;case 9:return 74;case 10:return 75;case 11:return 12;case 12:return 30;case 13:return 32;case 14:case 15:case 16:case 17:case 18:case 19:return 13;case 20:return 81;case 21:return 91;case 22:return 89;case 23:return 8;case 24:return 86;case 25:return 98;case 26:return 16;case 27:return 15;case 28:return 17;case 29:return 18;case 30:return 53;case 31:return 51;case 32:return 52;case 33:return 54;case 34:return 58;case 35:return 56;case 36:return 57;case 37:return 59;case 38:return 58;case 39:return 56;case 40:return 57;case 41:return 59;case 42:return 63;case 43:return 61;case 44:return 62;case 45:return 64;case 46:return 50;case 47:return 55;case 48:return 60;case 49:return 40;case 50:return 41;case 51:return 46;case 52:return 92;case 53:return 96;case 54:return 84;case 55:case 56:return 97;case 57:return 88;case 58:return 94;case 59:return 95;case 60:return 65;case 61:return 38;case 62:return 39;case 63:return 36;case 64:return 37;case 65:return 42;case 66:return 43;case 67:return 101;case 68:return 9;case 69:return 10;case 70:return 11}},rules:[/^(?:%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:v\b)/,/^(?:\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*==[x]\s*)/,/^(?:\s*==>\s*)/,/^(?:\s*==[o]\s*)/,/^(?:\s*==[\=]\s*)/,/^(?:\s*--\s*)/,/^(?:\s*-\.\s*)/,/^(?:\s*==\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[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])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:\n+)/,/^(?:\s)/,/^(?:$)/],conditions:{string:{rules:[2,3],inclusive:!1},INITIAL:{rules:[0,1,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,33,34,35,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],inclusive:!0}}}}();return Dt.lexer=Ct,t.prototype=Dt,Dt.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[1,5],n=[1,6],i=[1,12],s=[1,13],a=[1,14],u=[1,15],o=[1,16],c=[1,17],l=[1,18],h=[1,19],y=[1,20],d=[1,21],p=[1,22],g=[8,16,17,18,19,20,21,22,23,24,25,26],f=[1,37],m=[1,33],A=[1,34],b=[1,35],E=[1,36],x=[8,10,16,17,18,19,20,21,22,23,24,25,26,28,32,37,39,40,45,57,58],k=[10,28],_=[10,28,37,57,58],v=[2,49],F=[1,45],D=[1,48],C=[1,49],T=[1,52],w=[2,65],S=[1,65],B=[1,66],L=[1,67],I=[1,68],O=[1,69],P=[1,70],N=[1,71],M=[1,72],R=[1,73],$=[8,16,17,18,19,20,21,22,23,24,25,26,47],j=[10,28,37],V={trace:function(){},yy:{},symbols_:{error:2,expressions:3,graph:4,EOF:5,graphStatement:6,idStatement:7,"{":8,stmt_list:9,"}":10,strict:11,GRAPH:12,DIGRAPH:13,textNoTags:14,textNoTagsToken:15,ALPHA:16,NUM:17,COLON:18,PLUS:19,EQUALS:20,MULT:21,DOT:22,BRKT:23,SPACE:24,MINUS:25,keywords:26,stmt:27,";":28,node_stmt:29,edge_stmt:30,attr_stmt:31,"=":32,subgraph:33,attr_list:34,NODE:35,EDGE:36,"[":37,a_list:38,"]":39,",":40,edgeRHS:41,node_id:42,edgeop:43,port:44,":":45,compass_pt:46,SUBGRAPH:47,n:48,ne:49,e:50,se:51,s:52,sw:53,w:54,nw:55,c:56,ARROW_POINT:57,ARROW_OPEN:58,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",8:"{",10:"}",11:"strict",12:"GRAPH",13:"DIGRAPH",16:"ALPHA",17:"NUM",18:"COLON",19:"PLUS",20:"EQUALS",21:"MULT",22:"DOT",23:"BRKT",24:"SPACE",25:"MINUS",26:"keywords",28:";",32:"=",35:"NODE",36:"EDGE",37:"[",39:"]",40:",",45:":",47:"SUBGRAPH",48:"n",49:"ne",50:"e",51:"se",52:"s",53:"sw",54:"w",55:"nw",56:"c",57:"ARROW_POINT",58:"ARROW_OPEN"},productions_:[0,[3,2],[4,5],[4,6],[4,4],[6,1],[6,1],[7,1],[14,1],[14,2],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[15,1],[9,1],[9,3],[27,1],[27,1],[27,1],[27,3],[27,1],[31,2],[31,2],[31,2],[34,4],[34,3],[34,3],[34,2],[38,5],[38,5],[38,3],[30,3],[30,3],[30,2],[30,2],[41,3],[41,3],[41,2],[41,2],[29,2],[29,1],[42,2],[42,1],[44,4],[44,2],[44,2],[33,5],[33,4],[33,3],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,1],[46,0],[43,1],[43,1]],performAction:function(t,e,r,n,i,s,a){var u=s.length-1;switch(i){case 1:this.$=s[u-1];break;case 2:this.$=s[u-4];break;case 3:this.$=s[u-5];break;case 4:this.$=s[u-3];break;case 8:case 10:case 11:this.$=s[u];break;case 9:this.$=s[u-1]+""+s[u];break;case 12:case 13:case 14:case 15:case 16:case 18:case 19:case 20:this.$=s[u];break;case 17:this.$="<br>";break;case 39:this.$="oy";break;case 40:n.addLink(s[u-1],s[u].id,s[u].op),this.$="oy";break;case 42:n.addLink(s[u-1],s[u].id,s[u].op),this.$={op:s[u-2],id:s[u-1]};break;case 44:this.$={op:s[u-1],id:s[u]};break;case 48:n.addVertex(s[u-1]),this.$=s[u-1];break;case 49:n.addVertex(s[u]),this.$=s[u];break;case 66:this.$="arrow";break;case 67:this.$="arrow_open"}},table:[{3:1,4:2,6:3,11:[1,4],12:r,13:n},{1:[3]},{5:[1,7]},{7:8,8:[1,9],14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p},{6:23,12:r,13:n},e(g,[2,5]),e(g,[2,6]),{1:[2,1]},{8:[1,24]},{7:30,8:f,9:25,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},e([8,10,28,32,37,39,40,45,57,58],[2,7],{15:38,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p}),e(x,[2,8]),e(x,[2,10]),e(x,[2,11]),e(x,[2,12]),e(x,[2,13]),e(x,[2,14]),e(x,[2,15]),e(x,[2,16]),e(x,[2,17]),e(x,[2,18]),e(x,[2,19]),e(x,[2,20]),{7:39,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p},{7:30,8:f,9:40,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},{10:[1,41]},{10:[2,21],28:[1,42]},e(k,[2,23]),e(k,[2,24]),e(k,[2,25]),e(_,v,{44:44,32:[1,43],45:F}),e(k,[2,27],{41:46,43:47,57:D,58:C}),e(k,[2,47],{43:47,34:50,41:51,37:T,57:D,58:C}),{34:53,37:T},{34:54,37:T},{34:55,37:T},{7:56,8:[1,57],14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p},{7:30,8:f,9:58,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},e(x,[2,9]),{8:[1,59]},{10:[1,60]},{5:[2,4]},{7:30,8:f,9:61,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},{7:62,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p},e(_,[2,48]),e(_,w,{14:10,15:11,7:63,46:64,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,48:S,49:B,50:L,51:I,52:O,53:P,54:N,55:M,56:R}),e(k,[2,41],{34:74,37:T}),{7:77,8:f,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,33:76,42:75,47:E},e($,[2,66]),e($,[2,67]),e(k,[2,46]),e(k,[2,40],{34:78,37:T}),{7:81,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,38:79,39:[1,80]},e(k,[2,28]),e(k,[2,29]),e(k,[2,30]),{8:[1,82]},{7:30,8:f,9:83,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},{10:[1,84]},{7:30,8:f,9:85,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},{5:[2,2]},{10:[2,22]},e(k,[2,26]),e(_,[2,51],{45:[1,86]}),e(_,[2,52]),e(_,[2,56]),e(_,[2,57]),e(_,[2,58]),e(_,[2,59]),e(_,[2,60]),e(_,[2,61]),e(_,[2,62]),e(_,[2,63]),e(_,[2,64]),e(k,[2,38]),e(j,[2,44],{43:47,41:87,57:D,58:C}),e(j,[2,45],{43:47,41:88,57:D,58:C}),e(_,v,{44:44,45:F}),e(k,[2,39]),{39:[1,89]},e(k,[2,34],{34:90,37:T}),{32:[1,91]},{7:30,8:f,9:92,12:m,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,27:26,29:27,30:28,31:29,33:31,35:A,36:b,42:32,47:E},{10:[1,93]},e(_,[2,55]),{10:[1,94]},e(_,w,{46:95,48:S,49:B,50:L,51:I,52:O,53:P,54:N,55:M,56:R}),e(j,[2,42]),e(j,[2,43]),e(k,[2,33],{34:96,37:T}),e(k,[2,32]),{7:97,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p},{10:[1,98]},e(_,[2,54]),{5:[2,3]},e(_,[2,50]),e(k,[2,31]),{28:[1,99],39:[2,37],40:[1,100]},e(_,[2,53]),{7:81,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,38:101},{7:81,14:10,15:11,16:i,17:s,18:a,19:u,20:o,21:c,22:l,23:h,24:y,25:d,26:p,38:102},{39:[2,35]},{39:[2,36]}],defaultActions:{7:[2,1],41:[2,4],60:[2,2],61:[2,22],94:[2,3],101:[2,35],102:[2,36]},parseError:function(t,e){if(!e.recoverable){var r=function(t,e){this.message=t,this.hash=e};throw r.prototype=Error,new r(t,e)}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},U=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,r,n){switch(r){case 0:return"STYLE";case 1:return"LINKSTYLE";case 2:return"CLASSDEF";case 3:return"CLASS";case 4:return"CLICK";case 5:return 12;case 6:return 13;case 7:return 47;case 8:return 35;case 9:return 36;case 10:case 11:case 12:case 13:case 14:case 15:return"DIR";case 16:return 17;case 17:return 23;case 18:return 18;case 19:return 28;case 20:return 40;case 21:return 32;case 22:return 21;case 23:return 22;case 24:return"ARROW_CROSS";case 25:return 57;case 26:return"ARROW_CIRCLE";case 27:return 58;case 28:return 25;case 29:return 19;case 30:return 20;case 31:return 16;case 32:return"PIPE";case 33:return"PS";case 34:return"PE";case 35:return 37;case 36:return 39;case 37:return 8;case 38:return 10;case 39:return"QUOTE";case 40:return 24;case 41:return"NEWLINE";case 42:return 5}},rules:[/^(?:style\b)/,/^(?:linkStyle\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:click\b)/,/^(?:graph\b)/,/^(?:digraph\b)/,/^(?:subgraph\b)/,/^(?:node\b)/,/^(?:edge\b)/,/^(?:LR\b)/,/^(?:RL\b)/,/^(?:TB\b)/,/^(?:BT\b)/,/^(?:TD\b)/,/^(?:BR\b)/,/^(?:[0-9])/,/^(?:#)/,/^(?::)/,/^(?:;)/,/^(?:,)/,/^(?:=)/,/^(?:\*)/,/^(?:\.)/,/^(?:--[x])/,/^(?:->)/,/^(?:--[o])/,/^(?:--)/,/^(?:-)/,/^(?:\+)/,/^(?:=)/,/^(?:[\u0021-\u0027\u002A-\u002E\u003F\u0041-\u005A\u0061-\u007A\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)/,/^(?:\n)/,/^(?:$)/],conditions:{INITIAL:{rules:[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,33,34,35,36,37,38,39,40,41,42],inclusive:!0}}}}();return V.lexer=U,t.prototype=V,V.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[1,2],n=[1,3],i=[1,4],s=[2,4],a=[1,9],u=[1,11],o=[1,12],c=[1,14],l=[1,15],h=[1,17],y=[1,18],d=[1,19],p=[1,20],g=[1,21],f=[1,23],m=[1,24],A=[1,4,5,10,15,16,18,20,21,22,23,24,25,27,28,39],b=[1,32],E=[4,5,10,15,16,18,20,21,22,23,25,28,39],x=[4,5,10,15,16,18,20,21,22,23,25,27,28,39],k=[37,38,39],_={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,SD:6,document:7,line:8,statement:9,participant:10,actor:11,AS:12,restOfLine:13,signal:14,activate:15,deactivate:16,note_statement:17,title:18,text2:19,loop:20,end:21,opt:22,alt:23,else:24,par:25,par_sections:26,and:27,note:28,placement:29,over:30,actor_pair:31,spaceList:32,",":33,left_of:34,right_of:35,signaltype:36,"+":37,"-":38,ACTOR:39,SOLID_OPEN_ARROW:40,DOTTED_OPEN_ARROW:41,SOLID_ARROW:42,DOTTED_ARROW:43,SOLID_CROSS:44,DOTTED_CROSS:45,TXT:46,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",6:"SD",10:"participant",12:"AS",13:"restOfLine",15:"activate",16:"deactivate",18:"title",20:"loop",21:"end",22:"opt",23:"alt",24:"else",25:"par",27:"and",28:"note",30:"over",33:",",34:"left_of",35:"right_of",37:"+",38:"-",39:"ACTOR",40:"SOLID_OPEN_ARROW",41:"DOTTED_OPEN_ARROW",42:"SOLID_ARROW",43:"DOTTED_ARROW",44:"SOLID_CROSS",45:"DOTTED_CROSS",46:"TXT"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[8,1],[8,1],[9,5],[9,3],[9,2],[9,3],[9,3],[9,2],[9,3],[9,4],[9,4],[9,7],[9,4],[26,1],[26,4],[17,4],[17,4],[32,2],[32,1],[31,3],[31,1],[29,1],[29,1],[14,5],[14,5],[14,4],[11,1],[36,1],[36,1],[36,1],[36,1],[36,1],[36,1],[19,1]],performAction:function(t,e,r,n,i,s,a){var u=s.length-1;switch(i){case 3:return n.apply(s[u]),s[u];case 4:this.$=[];break;case 5:s[u-1].push(s[u]),this.$=s[u-1];break;case 6:case 7:this.$=s[u];break;case 8:this.$=[];break;case 9:s[u-3].description=s[u-1],this.$=s[u-3];break;case 10:this.$=s[u-1];break;case 12:this.$={type:"activeStart",signalType:n.LINETYPE.ACTIVE_START,actor:s[u-1]};break;case 13:this.$={type:"activeEnd",signalType:n.LINETYPE.ACTIVE_END,actor:s[u-1]};break;case 15:this.$=[{type:"setTitle",text:s[u-1]}];break;case 16:s[u-1].unshift({type:"loopStart",loopText:s[u-2],signalType:n.LINETYPE.LOOP_START}),s[u-1].push({type:"loopEnd",loopText:s[u-2],signalType:n.LINETYPE.LOOP_END}),this.$=s[u-1];break;case 17:s[u-1].unshift({type:"optStart",optText:s[u-2],signalType:n.LINETYPE.OPT_START}),s[u-1].push({type:"optEnd",optText:s[u-2],signalType:n.LINETYPE.OPT_END}),this.$=s[u-1];break;case 18:s[u-4].unshift({type:"altStart",altText:s[u-5],signalType:n.LINETYPE.ALT_START}),s[u-4].push({type:"else",altText:s[u-2],signalType:n.LINETYPE.ALT_ELSE}),s[u-4]=s[u-4].concat(s[u-1]),s[u-4].push({type:"altEnd",signalType:n.LINETYPE.ALT_END}),this.$=s[u-4];break;case 19:s[u-1].unshift({type:"parStart",parText:s[u-2],signalType:n.LINETYPE.PAR_START}),s[u-1].push({type:"parEnd",signalType:n.LINETYPE.PAR_END}),this.$=s[u-1];break;case 21:this.$=s[u-3].concat([{type:"and",parText:s[u-1],signalType:n.LINETYPE.PAR_AND},s[u]]);break;case 22:this.$=[s[u-1],{type:"addNote",placement:s[u-2],actor:s[u-1].actor,text:s[u]}];break;case 23:s[u-2]=[].concat(s[u-1],s[u-1]).slice(0,2),s[u-2][0]=s[u-2][0].actor,s[u-2][1]=s[u-2][1].actor,this.$=[s[u-1],{type:"addNote",placement:n.PLACEMENT.OVER,actor:s[u-2].slice(0,2),text:s[u]}];break;case 26:this.$=[s[u-2],s[u]];break;case 27:this.$=s[u];break;case 28:this.$=n.PLACEMENT.LEFTOF;break;case 29:this.$=n.PLACEMENT.RIGHTOF;break;case 30:this.$=[s[u-4],s[u-1],{type:"addMessage",from:s[u-4].actor,to:s[u-1].actor,signalType:s[u-3],msg:s[u]},{type:"activeStart",signalType:n.LINETYPE.ACTIVE_START,actor:s[u-1]}];break;case 31:this.$=[s[u-4],s[u-1],{type:"addMessage",from:s[u-4].actor,to:s[u-1].actor,signalType:s[u-3],msg:s[u]},{type:"activeEnd",signalType:n.LINETYPE.ACTIVE_END,actor:s[u-4]}];break;case 32:this.$=[s[u-3],s[u-1],{type:"addMessage",from:s[u-3].actor,to:s[u-1].actor,signalType:s[u-2],msg:s[u]}];break;case 33:this.$={type:"addActor",actor:s[u]};break;case 34:this.$=n.LINETYPE.SOLID_OPEN;break;case 35:this.$=n.LINETYPE.DOTTED_OPEN;break;case 36:this.$=n.LINETYPE.SOLID;break;case 37:this.$=n.LINETYPE.DOTTED;break;case 38:this.$=n.LINETYPE.SOLID_CROSS;break;case 39:this.$=n.LINETYPE.DOTTED_CROSS;break;case 40:this.$=s[u].substring(1).trim().replace(/\\n/gm,"\n")}},table:[{3:1,4:r,5:n,6:i},{1:[3]},{3:5,4:r,5:n,6:i},{3:6,4:r,5:n,6:i},e([1,4,5,10,15,16,18,20,22,23,25,28,39],s,{7:7}),{1:[2,1]},{1:[2,2]},{1:[2,3],4:a,5:u,8:8,9:10,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,22:d,23:p,25:g,28:f,39:m},e(A,[2,5]),{9:25,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,22:d,23:p,25:g,28:f,39:m},e(A,[2,7]),e(A,[2,8]),{11:26,39:m},{5:[1,27]},{11:28,39:m},{11:29,39:m},{5:[1,30]},{19:31,46:b},{13:[1,33]},{13:[1,34]},{13:[1,35]},{13:[1,36]},{36:37,40:[1,38],41:[1,39],42:[1,40],43:[1,41],44:[1,42],45:[1,43]},{29:44,30:[1,45],34:[1,46],35:[1,47]},e([5,12,33,40,41,42,43,44,45,46],[2,33]),e(A,[2,6]),{5:[1,49],12:[1,48]},e(A,[2,11]),{5:[1,50]},{5:[1,51]},e(A,[2,14]),{5:[1,52]},{5:[2,40]},e(E,s,{7:53}),e(E,s,{7:54}),e([4,5,10,15,16,18,20,22,23,24,25,28,39],s,{7:55}),e(x,s,{26:56,7:57}),{11:60,37:[1,58],38:[1,59],39:m},e(k,[2,34]),e(k,[2,35]),e(k,[2,36]),e(k,[2,37]),e(k,[2,38]),e(k,[2,39]),{11:61,39:m},{11:63,31:62,39:m},{39:[2,28]},{39:[2,29]},{13:[1,64]},e(A,[2,10]),e(A,[2,12]),e(A,[2,13]),e(A,[2,15]),{4:a,5:u,8:8,9:10,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,21:[1,65],22:d,23:p,25:g,28:f,39:m},{4:a,5:u,8:8,9:10,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,21:[1,66],22:d,23:p,25:g,28:f,39:m},{4:a,5:u,8:8,9:10,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,22:d,23:p,24:[1,67],25:g,28:f,39:m},{21:[1,68]},{4:a,5:u,8:8,9:10,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,21:[2,20],22:d,23:p,25:g,27:[1,69],28:f,39:m},{11:70,39:m},{11:71,39:m},{19:72,46:b},{19:73,46:b},{19:74,46:b},{33:[1,75],46:[2,27]},{5:[1,76]},e(A,[2,16]),e(A,[2,17]),{13:[1,77]},e(A,[2,19]),{13:[1,78]},{19:79,46:b},{19:80,46:b},{5:[2,32]},{5:[2,22]},{5:[2,23]},{11:81,39:m},e(A,[2,9]),e(E,s,{7:82}),e(x,s,{7:57,26:83}),{5:[2,30]},{5:[2,31]},{46:[2,26]},{4:a,5:u,8:8,9:10,10:o,11:22,14:13,15:c,16:l,17:16,18:h,20:y,21:[1,84],22:d,23:p,25:g,28:f,39:m},{21:[2,21]},e(A,[2,18])],defaultActions:{5:[2,1],6:[2,2],32:[2,40],46:[2,28],47:[2,29],72:[2,32],73:[2,22],74:[2,23],79:[2,30],80:[2,31],81:[2,26],83:[2,21]},parseError:function(t,e){if(!e.recoverable){var r=new Error(t);throw r.hash=e,r}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},v=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=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,r,n){switch(r){case 0:return 5;case 1:case 2:case 3:case 4:break;case 5:return this.begin("ID"),10;case 6:return this.begin("ALIAS"),39;case 7:return this.popState(),this.popState(),this.begin("LINE"),12;case 8:return this.popState(),this.popState(),5;case 9:return this.begin("LINE"),20;case 10:return this.begin("LINE"),22;case 11:return this.begin("LINE"),23;case 12:return this.begin("LINE"),24;case 13:return this.begin("LINE"),25;case 14:return this.begin("LINE"),27;case 15:return this.popState(),13;case 16:return 21;case 17:return 34;case 18:return 35;case 19:return 30;case 20:return 28;case 21:return this.begin("ID"),15;case 22:return this.begin("ID"),16;case 23:return 18;case 24:return 6;case 25:return 33;case 26:return 5;case 27:return e.yytext=e.yytext.trim(),39;case 28:return 42;case 29:return 43;case 30:return 40;case 31:return 41;case 32:return 44;case 33:return 45;case 34:return 46;case 35:return 37;case 36:return 38;case 37:return 5;case 38:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:[^#\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,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?::[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[2,3,15],inclusive:!1},ALIAS:{rules:[2,3,7,8],inclusive:!1},ID:{rules:[2,3,6],inclusive:!1},INITIAL:{rules:[0,1,3,4,5,9,10,11,12,13,14,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],inclusive:!0}}}}();return _.lexer=v,t.prototype=_,_.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";var n={},i=[],s=[],a="",u=r(0),o=u.Log;e.addActor=function(t,e,r){var i=n[t];i&&e===i.name&&null==r||(null==r&&(r=e),n[t]={name:e,description:r})},e.addMessage=function(t,e,r,n){i.push({from:t,to:e,message:r,answer:n})},e.addSignal=function(t,e,r,n){o.debug("Adding message from="+t+" to="+e+" message="+r+" type="+n),i.push({from:t,to:e,message:r,type:n})},e.getMessages=function(){return i},e.getActors=function(){return n},e.getActor=function(t){return n[t]},e.getActorKeys=function(){return Object.keys(n)},e.getTitle=function(){return a},e.clear=function(){n={},i=[]},e.LINETYPE={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},e.ARROWTYPE={FILLED:0,OPEN:1},e.PLACEMENT={LEFTOF:0,RIGHTOF:1,OVER:2},e.addNote=function(t,r,n){var a={actor:t,placement:r,message:n},u=[].concat(t,t);s.push(a),i.push({from:u[0],to:u[1],message:n,type:e.LINETYPE.NOTE,placement:r})},e.setTitle=function(t){a=t},e.parseError=function(t,e){global.mermaidAPI.parseError(t,e)},e.apply=function(t){if(t instanceof Array)t.forEach(function(t){e.apply(t)});else switch(t.type){case"addActor":e.addActor(t.actor,t.actor,t.description);break;case"activeStart":case"activeEnd":e.addSignal(t.actor,void 0,void 0,t.signalType);break;case"addNote":e.addNote(t.actor,t.placement,t.text);break;case"addMessage":e.addSignal(t.from,t.to,t.msg,t.signalType);break;case"loopStart":e.addSignal(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":e.addSignal(void 0,void 0,void 0,t.signalType);break;case"optStart":e.addSignal(void 0,void 0,t.optText,t.signalType);break;case"optEnd":e.addSignal(void 0,void 0,void 0,t.signalType);break;case"altStart":case"else":e.addSignal(void 0,void 0,t.altText,t.signalType);break;case"altEnd":e.addSignal(void 0,void 0,void 0,t.signalType);break;case"setTitle":e.setTitle(t.text);break;case"parStart":case"and":e.addSignal(void 0,void 0,t.parText,t.signalType);break;case"parEnd":e.addSignal(void 0,void 0,void 0,t.signalType)}}},function(t,e,r){"use strict";var n=r(0),i=n.Log,s="",a=!1;e.setMessage=function(t){i.debug("Setting message to: "+t),s=t},e.getMessage=function(){return s},e.setInfo=function(t){a=t},e.getInfo=function(){return a},e.parseError=function(t,e){global.mermaidAPI.parseError(t,e)}},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[6,9,10,12],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,message:11,say:12,TXT:13,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo",12:"say",13:"TXT"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1],[8,1],[11,2]],performAction:function(t,e,r,n,i,s,a){var u=s.length-1;switch(i){case 1:return n;case 4:break;case 6:n.setInfo(!0);break;case 7:n.setMessage(s[u]);break;case 8:this.$=s[u-1].substring(1).trim().replace(/\\n/gm,"\n")}},table:[{3:1,4:[1,2]},{1:[3]},e(r,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8],11:9,12:[1,10]},{1:[2,1]},e(r,[2,3]),e(r,[2,4]),e(r,[2,5]),e(r,[2,6]),e(r,[2,7]),{13:[1,11]},e(r,[2,8])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var r=function(t,e){this.message=t,this.hash=e};throw r.prototype=Error,new r(t,e)}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},i=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=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,r,n){switch(r){case 0:return 9;case 1:return 10;case 2:return 4;case 3:return 12;case 4:return 13;case 5:return 6;case 6:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:showInfo\b)/i,/^(?:info\b)/i,/^(?:say\b)/i,/^(?::[^#\n;]+)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6],inclusive:!0}}}}();return n.lexer=i,t.prototype=n,n.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[6,8,10,11,12,13,14],n=[1,9],i=[1,10],s=[1,11],a=[1,12],u={trace:function(){},yy:{},symbols_:{error:2,start:3,gantt:4,document:5,EOF:6,line:7,SPACE:8,statement:9,NL:10,dateFormat:11,title:12,section:13,taskTxt:14,taskData:15,$accept:0,$end:1},terminals_:{2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",11:"dateFormat",12:"title",13:"section",14:"taskTxt",15:"taskData"},productions_:[0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,1],[9,1],[9,2]],performAction:function(t,e,r,n,i,s,a){var u=s.length-1;switch(i){case 1:return s[u-1];case 2:this.$=[];break;case 3:s[u-1].push(s[u]),this.$=s[u-1];break;case 4:case 5:this.$=s[u];break;case 6:case 7:this.$=[];break;case 8:n.setDateFormat(s[u].substr(11)),this.$=s[u].substr(11);break;case 9:n.setTitle(s[u].substr(6)),this.$=s[u].substr(6);break;case 10:n.addSection(s[u].substr(8)),this.$=s[u].substr(8);break;case 11:n.addTask(s[u-1],s[u]),this.$="task"}},table:[{3:1,4:[1,2]},{1:[3]},e(r,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:n,12:i,13:s,14:a},e(r,[2,7],{1:[2,1]}),e(r,[2,3]),{9:13,11:n,12:i,13:s,14:a},e(r,[2,5]),e(r,[2,6]),e(r,[2,8]),e(r,[2,9]),e(r,[2,10]),{15:[1,14]},e(r,[2,4]),e(r,[2,11])],defaultActions:{},parseError:function(t,e){if(!e.recoverable){var r=function(t,e){this.message=t,this.hash=e};throw r.prototype=Error,new r(t,e)}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},o=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=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,r,n){switch(r){case 0:return 10;case 1:case 2:case 3:break;case 4:return 4;case 5:return 11;case 6:return"date";case 7:return 12;case 8:return 13;case 9:return 14;case 10:return 15;case 11:return":";case 12:return 6;case 13:return"INVALID"}},rules:[/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\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:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13],inclusive:!0}}}}();return u.lexer=o,t.prototype=u,u.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";var n=r(15),i=r(0),s=i.Log,a="",u="",o=[],c=[],l="";e.clear=function(){o=[],c=[],l="",u="",g=0,h=void 0,y=void 0,b=[]},e.setDateFormat=function(t){a=t},e.getDateFormat=function(){return a},e.setTitle=function(t){u=t},e.getTitle=function(){return u},e.addSection=function(t){l=t,o.push(t)},e.getTasks=function(){for(var t=x(),e=0;!t&&e<10;)t=x(),e++;return c=b};var h,y,d=function(t,r,i){i=i.trim();var a=/^after\s+([\d\w-]+)/,u=a.exec(i.trim());if(null!==u){var o=e.findTaskById(u[1]);if(void 0===o){var c=new Date;return c.setHours(0,0,0,0),c}return o.endTime}return n(i,r.trim(),!0).isValid()?n(i,r.trim(),!0).toDate():(s.debug("Invalid date:"+i),s.debug("With date format:"+r.trim()),new Date)},p=function(t,e,r){if(r=r.trim(),n(r,e.trim(),!0).isValid())return n(r,e.trim()).toDate();var i=n(t),s=/^([\d]+)([wdhms])/,a=s.exec(r.trim());if(null!==a){switch(a[2]){case"s":i.add(a[1],"seconds");break;case"m":i.add(a[1],"minutes");break;case"h":i.add(a[1],"hours");break;case"d":i.add(a[1],"days");break;case"w":i.add(a[1],"weeks")}return i.toDate()}return i.toDate()},g=0,f=function(t){return void 0===t?"task"+(g+=1):t},m=function(t,r){var n;n=":"===r.substr(0,1)?r.substr(1,r.length):r;for(var i=n.split(","),s={},a=e.getDateFormat(),u=!0;u;)u=!1,i[0].match(/^\s*active\s*$/)&&(s.active=!0,i.shift(1),u=!0),i[0].match(/^\s*done\s*$/)&&(s.done=!0,i.shift(1),u=!0),i[0].match(/^\s*crit\s*$/)&&(s.crit=!0,i.shift(1),u=!0);var o;for(o=0;o<i.length;o++)i[o]=i[o].trim();switch(i.length){case 1:s.id=f(),s.startTime=t.endTime,s.endTime=p(s.startTime,a,i[0]);break;case 2:s.id=f(),s.startTime=d(0,a,i[0]),s.endTime=p(s.startTime,a,i[1]);break;case 3:s.id=f(i[0]),s.startTime=d(0,a,i[1]),s.endTime=p(s.startTime,a,i[2])}return s},A=function(t,e){var r;r=":"===e.substr(0,1)?e.substr(1,e.length):e;for(var n=r.split(","),i={},s=!0;s;)s=!1,n[0].match(/^\s*active\s*$/)&&(i.active=!0,n.shift(1),s=!0),n[0].match(/^\s*done\s*$/)&&(i.done=!0,n.shift(1),s=!0),n[0].match(/^\s*crit\s*$/)&&(i.crit=!0,n.shift(1),s=!0);var a;for(a=0;a<n.length;a++)n[a]=n[a].trim();switch(n.length){case 1:i.id=f(),i.startTime={type:"prevTaskEnd",id:t},i.endTime={data:n[0]};break;case 2:i.id=f(),i.startTime={type:"getStartDate",startData:n[0]},i.endTime={data:n[1]};break;case 3:i.id=f(n[0]),i.startTime={type:"getStartDate",startData:n[1]},i.endTime={data:n[2]}}return i},b=[],E={};e.addTask=function(t,e){var r={section:l,type:l,processed:!1,raw:{data:e},task:t},n=A(y,e);r.raw.startTime=n.startTime,r.raw.endTime=n.endTime,r.id=n.id,r.prevTaskId=y,r.active=n.active,r.done=n.done,r.crit=n.crit;var i=b.push(r);y=r.id,E[r.id]=i-1},e.findTaskById=function(t){var e=E[t];return b[e]},e.addTaskOrg=function(t,e){var r={section:l,type:l,description:t,task:t},n=m(h,e);r.startTime=n.startTime,r.endTime=n.endTime,r.id=n.id,r.active=n.active,r.done=n.done,r.crit=n.crit,h=r,c.push(r)};var x=function(){var t,r=e.getDateFormat(),n=!0;for(t=0;t<b.length;t++)!function(t){var n=b[t],i="";switch(b[t].raw.startTime.type){case"prevTaskEnd":var s=e.findTaskById(n.prevTaskId);n.startTime=s.endTime;break;case"getStartDate":i=d(0,r,b[t].raw.startTime.startData),i&&(b[t].startTime=i)}b[t].startTime&&(b[t].endTime=p(b[t].startTime,r,b[t].raw.endTime.data),b[t].endTime&&(b[t].processed=!0)),b[t].processed}(t),n=n&&b[t].processed;return n};e.parseError=function(t,e){global.mermaidAPI.parseError(t,e)}},function(t,e){t.exports=require("moment")},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[1,11],n=[1,12],i=[1,13],s=[1,15],a=[1,16],u=[1,17],o=[6,8],c=[1,26],l=[1,27],h=[1,28],y=[1,29],d=[1,30],p=[1,31],g=[6,8,13,17,23,26,27,28,29,30,31],f=[6,8,13,17,23,26,27,28,29,30,31,45,46,47],m=[23,45,46,47],A=[23,30,31,45,46,47],b=[23,26,27,28,29,45,46,47],E=[6,8,13],x=[1,46],k={trace:function(){},yy:{},symbols_:{error:2,mermaidDoc:3,graphConfig:4,CLASS_DIAGRAM:5,NEWLINE:6,statements:7,EOF:8,statement:9,className:10,alphaNumToken:11,relationStatement:12,LABEL:13,classStatement:14,methodStatement:15,CLASS:16,STRUCT_START:17,members:18,STRUCT_STOP:19,MEMBER:20,SEPARATOR:21,relation:22,STR:23,relationType:24,lineType:25,AGGREGATION:26,EXTENSION:27,COMPOSITION:28,DEPENDENCY:29,LINE:30,DOTTED_LINE:31,commentToken:32,textToken:33,graphCodeTokens:34,textNoTagsToken:35,TAGSTART:36,TAGEND:37,"==":38,"--":39,PCT:40,DEFAULT:41,SPACE:42,MINUS:43,keywords:44,UNICODE_TEXT:45,NUM:46,ALPHA:47,$accept:0,$end:1},terminals_:{2:"error",5:"CLASS_DIAGRAM",6:"NEWLINE",8:"EOF",13:"LABEL",16:"CLASS",17:"STRUCT_START",19:"STRUCT_STOP",20:"MEMBER",21:"SEPARATOR",23:"STR",26:"AGGREGATION",27:"EXTENSION",28:"COMPOSITION",29:"DEPENDENCY",30:"LINE",31:"DOTTED_LINE",34:"graphCodeTokens",36:"TAGSTART",37:"TAGEND",38:"==",39:"--",40:"PCT",41:"DEFAULT",42:"SPACE",43:"MINUS",44:"keywords",45:"UNICODE_TEXT",46:"NUM",47:"ALPHA"},productions_:[0,[3,1],[4,4],[7,1],[7,3],[10,2],[10,1],[9,1],[9,2],[9,1],[9,1],[14,2],[14,5],[18,1],[18,2],[15,1],[15,2],[15,1],[15,1],[12,3],[12,4],[12,4],[12,5],[22,3],[22,2],[22,2],[22,1],[24,1],[24,1],[24,1],[24,1],[25,1],[25,1],[32,1],[32,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[33,1],[35,1],[35,1],[35,1],[35,1],[11,1],[11,1],[11,1]],performAction:function(t,e,r,n,i,s,a){var u=s.length-1;switch(i){case 5:this.$=s[u-1]+s[u];break;case 6:this.$=s[u];break;case 7:n.addRelation(s[u]);break;case 8:s[u-1].title=n.cleanupLabel(s[u]),n.addRelation(s[u-1]);break;case 12:n.addMembers(s[u-3],s[u-1]);break;case 13:this.$=[s[u]];break;case 14:s[u].push(s[u-1]),this.$=s[u];break;case 15:break;case 16:n.addMembers(s[u-1],n.cleanupLabel(s[u]));break;case 17:console.warn("Member",s[u]);break;case 18:break;case 19:this.$={id1:s[u-2],id2:s[u],relation:s[u-1],relationTitle1:"none",relationTitle2:"none"};break;case 20:this.$={id1:s[u-3],id2:s[u],relation:s[u-1],relationTitle1:s[u-2],relationTitle2:"none"};break;case 21:this.$={id1:s[u-3],id2:s[u],relation:s[u-2],relationTitle1:"none",relationTitle2:s[u-1]};break;case 22:this.$={id1:s[u-4],id2:s[u],relation:s[u-2],relationTitle1:s[u-3],relationTitle2:s[u-1]};break;case 23:this.$={type1:s[u-2],type2:s[u],lineType:s[u-1]};break;case 24:this.$={type1:"none",type2:s[u],lineType:s[u-1]};break;case 25:this.$={type1:s[u-1],type2:"none",lineType:s[u]};break;case 26:this.$={type1:"none",type2:"none",lineType:s[u]};break;case 27:this.$=n.relationType.AGGREGATION;break;case 28:this.$=n.relationType.EXTENSION;break;case 29:this.$=n.relationType.COMPOSITION;break;case 30:this.$=n.relationType.DEPENDENCY;break;case 31:this.$=n.lineType.LINE;break;case 32:this.$=n.lineType.DOTTED_LINE}},table:[{3:1,4:2,5:[1,3]},{1:[3]},{1:[2,1]},{6:[1,4]},{7:5,9:6,10:10,11:14,12:7,14:8,15:9,16:r,20:n,21:i,45:s,46:a,47:u},{8:[1,18]},{6:[1,19],8:[2,3]},e(o,[2,7],{13:[1,20]}),e(o,[2,9]),e(o,[2,10]),e(o,[2,15],{22:21,24:24,25:25,13:[1,23],23:[1,22],26:c,27:l,28:h,29:y,30:d,31:p}),{10:32,11:14,45:s,46:a,47:u},e(o,[2,17]),e(o,[2,18]),e(g,[2,6],{11:14,10:33,45:s,46:a,47:u}),e(f,[2,46]),e(f,[2,47]),e(f,[2,48]),{1:[2,2]},{7:34,9:6,10:10,11:14,12:7,14:8,15:9,16:r,20:n,21:i,45:s,46:a,47:u},e(o,[2,8]),{10:35,11:14,23:[1,36],45:s,46:a,47:u},{22:37,24:24,25:25,26:c,27:l,28:h,29:y,30:d,31:p},e(o,[2,16]),{25:38,30:d,31:p},e(m,[2,26],{24:39,26:c,27:l,28:h,29:y}),e(A,[2,27]),e(A,[2,28]),e(A,[2,29]),e(A,[2,30]),e(b,[2,31]),e(b,[2,32]),e(o,[2,11],{17:[1,40]}),e(g,[2,5]),{8:[2,4]},e(E,[2,19]),{10:41,11:14,45:s,46:a,47:u},{10:42,11:14,23:[1,43],45:s,46:a,47:u},e(m,[2,25],{24:44,26:c,27:l,28:h,29:y}),e(m,[2,24]),{18:45,20:x},e(E,[2,21]),e(E,[2,20]),{10:47,11:14,45:s,46:a,47:u},e(m,[2,23]),{19:[1,48]},{18:49,19:[2,13],20:x},e(E,[2,22]),e(o,[2,12]),{19:[2,14]}],defaultActions:{2:[2,1],18:[2,2],34:[2,4],49:[2,14]},parseError:function(t,e){if(!e.recoverable){var r=function(t,e){this.message=t,this.hash=e};throw r.prototype=Error,new r(t,e)}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},_=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,r,n){switch(r){case 0:break;case 1:return 6;case 2:break;case 3:return 5;case 4:return this.begin("struct"),17;case 5:return this.popState(),19;case 6:break;case 7:return"MEMBER";case 8:return 16;case 9:this.begin("string");break;case 10:this.popState();break;case 11:return"STR";case 12:case 13:return 27;case 14:case 15:return 29;case 16:return 28;case 17:return 26;case 18:return 30;case 19:return 31;case 20:return 13;case 21:return 43;case 22:return"DOT";case 23:return"PLUS";case 24:return 40;case 25:case 26:return"EQUALS";case 27:return 47;case 28:return"PUNCTUATION";case 29:return 46;case 30:return 45;case 31:return 42;case 32:return 8}},rules:[/^(?:%%[^\n]*)/,/^(?:\n+)/,/^(?:\s+)/,/^(?:classDiagram\b)/,/^(?:[\{])/,/^(?:\})/,/^(?:[\n])/,/^(?:[^\{\}\n]*)/,/^(?:class\b)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::[^#\n;]+)/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:[A-Za-z]+)/,/^(?:[!"#$%&'*+,-.`?\\_\/])/,/^(?:[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:[10,11],inclusive:!1},struct:{rules:[5,6,7],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,8,9,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],inclusive:!0}}}}();return k.lexer=_,t.prototype=k,k.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";var n,i=r(0),s=i.Log,a=[];n={},e.addClass=function(t){void 0===n[t]&&(n[t]={id:t,methods:[],members:[]})},e.clear=function(){a=[],n={}},t.exports.getClass=function(t){return n[t]},t.exports.getClasses=function(){return n},t.exports.getRelations=function(){return a},e.addRelation=function(t){s.warn("Adding relation: "+JSON.stringify(t)),e.addClass(t.id1),e.addClass(t.id2),a.push(t)},e.addMembers=function(t,e){var r=n[t];"string"==typeof e&&(")"===e.substr(-1)?r.methods.push(e):r.members.push(e))},e.cleanupLabel=function(t){return":"===t.substring(0,1)?t.substr(2).trim():t.trim()},e.lineType={LINE:0,DOTTED_LINE:1},e.relationType={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3}},function(t,e,r){"use strict";(function(t){var n=function(){function t(){this.yy={}}var e=function(t,e,r,n){for(r=r||{},n=t.length;n--;r[t[n]]=e);return r},r=[2,3],n=[1,7],i=[7,12,15,17,19,20,21],s=[7,11,12,15,17,19,20,21],a=[2,20],u=[1,32],o={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,r,n,i,s,a){var u=s.length-1;switch(i){case 1:return s[u-1];case 2:return n.setDirection(s[u-3]),s[u-1];case 4:n.setOptions(s[u-1]),this.$=s[u];break;case 5:s[u-1]+=s[u],this.$=s[u-1];break;case 7:this.$=[];break;case 8:s[u-1].push(s[u]),this.$=s[u-1];break;case 9:this.$=s[u-1];break;case 11:n.commit(s[u]);break;case 12:n.branch(s[u]);break;case 13:n.checkout(s[u]);break;case 14:n.merge(s[u]);break;case 15:n.reset(s[u]);break;case 16:this.$="";break;case 17:this.$=s[u];break;case 18:this.$=s[u-1]+":"+s[u];break;case 19:this.$=s[u-1]+":"+n.count,n.count=0;break;case 20:n.count=0;break;case 21:n.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:r,9:6,12:n},{5:[1,8]},{7:[1,9]},e(i,[2,7],{10:10,11:[1,11]}),e(s,[2,6]),{6:12,7:r,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]},e(s,[2,5]),{7:[1,21]},e(i,[2,8]),{12:[1,22]},e(i,[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]},e(i,[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:u},{12:a,25:33,26:u},{12:[2,18]},{12:a,25:34,26:u},{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 r=function(t,e){this.message=t,this.hash=e};throw r.prototype=Error,new r(t,e)}this.trace(t)},parse:function(t){var e=this,r=[0],n=[null],i=[],s=this.table,a="",u=0,o=0,c=0,l=i.slice.call(arguments,1),h=Object.create(this.lexer),y={yy:{}};for(var d in this.yy)Object.prototype.hasOwnProperty.call(this.yy,d)&&(y.yy[d]=this.yy[d]);h.setInput(t,y.yy),y.yy.lexer=h,y.yy.parser=this,void 0===h.yylloc&&(h.yylloc={});var p=h.yylloc;i.push(p);var g=h.options&&h.options.ranges;"function"==typeof y.yy.parseError?this.parseError=y.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var f,m,A,b,E,x,k,_,v,F={};;){if(A=r[r.length-1],this.defaultActions[A]?b=this.defaultActions[A]:(null!==f&&void 0!==f||(f=function(){var t;return t=h.lex()||1,"number"!=typeof t&&(t=e.symbols_[t]||t),t}()),b=s[A]&&s[A][f]),void 0===b||!b.length||!b[0]){var D="";v=[];for(x in s[A])this.terminals_[x]&&x>2&&v.push("'"+this.terminals_[x]+"'");D=h.showPosition?"Parse error on line "+(u+1)+":\n"+h.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[f]||f)+"'":"Parse error on line "+(u+1)+": Unexpected "+(1==f?"end of input":"'"+(this.terminals_[f]||f)+"'"),this.parseError(D,{text:h.match,token:this.terminals_[f]||f,line:h.yylineno,loc:p,expected:v})}if(b[0]instanceof Array&&b.length>1)throw new Error("Parse Error: multiple actions possible at state: "+A+", token: "+f);switch(b[0]){case 1:r.push(f),n.push(h.yytext),i.push(h.yylloc),r.push(b[1]),f=null,m?(f=m,m=null):(o=h.yyleng,a=h.yytext,u=h.yylineno,p=h.yylloc,c>0&&c--);break;case 2:if(k=this.productions_[b[1]][1],F.$=n[n.length-k],F._$={first_line:i[i.length-(k||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(k||1)].first_column,last_column:i[i.length-1].last_column},g&&(F._$.range=[i[i.length-(k||1)].range[0],i[i.length-1].range[1]]),void 0!==(E=this.performAction.apply(F,[a,o,u,y.yy,b[1],n,i].concat(l))))return E;k&&(r=r.slice(0,-1*k*2),n=n.slice(0,-1*k),i=i.slice(0,-1*k)),r.push(this.productions_[b[1]][0]),n.push(F.$),i.push(F._$),_=s[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},c=function(){return{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,r=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 n=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),r.length-1&&(this.yylineno-=r.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:r?(r.length===n.length?this.yylloc.first_column:0)+n[n.length-r.length].length-r[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 r,n,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))),n=t[0].match(/(?:\r\n?|\n).*/g),n&&(this.yylineno+=n.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:n?n[n.length-1].length-n[n.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],r=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),r)return r;if(this._backtrack){for(var s in i)this[s]=i[s];return!1}return!1},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var t,e,r,n;this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),s=0;s<i.length;s++)if((r=this._input.match(this.rules[i[s]]))&&(!e||r[0].length>e[0].length)){if(e=r,n=s,this.options.backtrack_lexer){if(!1!==(t=this.test_match(r,i[s])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[n]))&&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),t>=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,r,n){switch(r){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_]+)/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}}}}();return o.lexer=c,t.prototype=o,o.Parser=t,new t}();e.parser=n,e.Parser=n.Parser,e.parse=function(){return n.parse.apply(n,arguments)},e.main=function(t){t[1]||(console.log("Usage: "+t[0]+" FILE"),process.exit(1));var n=r(3).readFileSync(r(4).normalize(t[1]),"utf8");return e.parser.parse(n)},void 0!==t&&r.c[r.s]===t&&e.main(process.argv.slice(1))}).call(e,r(2)(t))},function(t,e,r){"use strict";function n(t,e){return Math.floor(Math.random()*(e-t))+t}function i(){for(var t="",e=0;e<7;e++)t+="0123456789abcdef"[n(0,16)];return t}function s(t,e){for(l.debug("Entering isfastforwardable:",t.id,e.id);t.seq<=e.seq&&t!==e&&null!=e.parent;){if(Array.isArray(e.parent))return l.debug("In merge commit:",e.parent),s(t,y[e.parent[0]])||s(t,y[e.parent[1]]);e=y[e.parent]}return l.debug(t.id,e.id),t.id===e.id}function a(t,e){return t.seq>e.seq&&s(e,t)}function u(t,e,r){var n=t.indexOf(e);-1===n?t.push(r):t.splice(n,1,r)}function o(t){var e=h.maxBy(t,"seq"),r="";t.forEach(function(t){r+=t===e?"\t*":"\t|"});var n=[r,e.id,e.seq];if(h.each(p,function(t,r){t===e.id&&n.push(r)}),l.debug(n.join(" ")),Array.isArray(e.parent)){var i=y[e.parent[0]];u(t,e,i),t.push(y[e.parent[1]])}else{if(null==e.parent)return;var s=y[e.parent];u(t,e,s)}t=h.uniqBy(t,"id"),o(t)}var c=r(0),l=c.Log,h=r(20),y={},d=null,p={master:d},g="master",f="LR",m=0;e.setDirection=function(t){f=t};var A={};e.setOptions=function(t){l.debug("options str",t),t=t&&t.trim(),t=t||"{}";try{A=JSON.parse(t)}catch(t){l.error("error while parsing gitGraph options",t.message)}},e.getOptions=function(){return A},e.commit=function(t){var e={id:i(),message:t,seq:m++,parent:null==d?null:d.id};d=e,y[e.id]=e,p[g]=e.id,l.debug("in pushCommit "+e.id)},e.branch=function(t){p[t]=null!=d?d.id:null,l.debug("in createBranch")},e.merge=function(t){var e=y[p[g]],r=y[p[t]];if(a(e,r))return void l.debug("Already merged");if(s(e,r))p[g]=p[t],d=y[p[g]];else{var n={id:i(),message:"merged branch "+t+" into "+g,seq:m++,parent:[null==d?null:d.id,p[t]]};d=n,y[n.id]=n,p[g]=n.id}l.debug(p),l.debug("in mergeBranch")},e.checkout=function(t){l.debug("in checkout"),g=t;var e=p[g];d=y[e]},e.reset=function(t){l.debug("in reset",t);var e=t.split(":")[0],r=parseInt(t.split(":")[1]),n="HEAD"===e?d:y[p[e]];for(l.debug(n,r);r>0;)if(n=y[n.parent],r--,!n){var i="Critical error - unique parent commit not found during reset";throw l.error(i),i}d=n,p[g]=n.id},e.prettyPrint=function(){l.debug(y),o([e.getCommitsArray()[0]])},e.clear=function(){y={},d=null,p={master:d},g="master",m=0},e.getBranchesAsObjArray=function(){return h.map(p,function(t,e){return{name:e,commit:y[t]}})},e.getBranches=function(){return p},e.getCommits=function(){return y},e.getCommitsArray=function(){var t=Object.keys(y).map(function(t){return y[t]});return t.forEach(function(t){l.debug(t.id)}),h.orderBy(t,["seq"],["desc"])},e.getCurrentBranch=function(){return g},e.getDirection=function(){return f},e.getHead=function(){return d}},function(t,e){t.exports=require("lodash")},function(t,e,r){"use strict";var n="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},i=r(0),s=i.Log,a=r(5),u=r(6),o=r(23),c=r(25),l=r(27),h=r(12),y=r(7),d=r(8),p=r(9),g=r(10),f=r(11),m=r(28),A=r(13),b=r(14),E=r(16),x=r(29),k=r(17),_=r(18),v=r(31),F=r(19),D=r(1),C={logLevel:5,cloneCssStyles:!0,startOnLoad:!0,arrowMarkerAbsolute:!1,flowchart:{htmlLabels:!0,useMaxWidth:!0},sequenceDiagram:{diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!0,bottomMarginAdj:1,useMaxWidth:!0},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"',numberSectionStyles:3,axisFormatter:[["%I:%M",function(t){return t.getHours()}],["w. %U",function(t){return 1===t.getDay()}],["%a %d",function(t){return t.getDay()&&1!==t.getDate()}],["%b %d",function(t){return 1!==t.getDate()}],["%m-%y",function(t){return t.getMonth()}]]},classDiagram:{},gitGraph:{},info:{}};i.setLogLevel(C.logLevel);var T=function(t){var e,r=u.detectType(t);switch(r){case"gitGraph":e=_,e.parser.yy=F;break;case"graph":e=y,e.parser.yy=a;break;case"dotGraph":e=d,e.parser.yy=a;break;case"sequenceDiagram":e=p,e.parser.yy=g;break;case"info":e=h,e.parser.yy=f;break;case"gantt":e=A,e.parser.yy=b;break;case"classDiagram":e=E,e.parser.yy=k}try{return e.parse(t),!0}catch(t){return!1}};e.parse=T,e.version=function(){return r(32).version},e.encodeEntities=function(t){var e=t;return e=e.replace(/style.*:\S*#.*;/g,function(t){return t.substring(0,t.length-1)}),e=e.replace(/classDef.*:\S*#.*;/g,function(t){return t.substring(0,t.length-1)}),e=e.replace(/#\w+;/g,function(t){var e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"fl°°"+e+"¶ß":"fl°"+e+"¶ß"})},e.decodeEntities=function(t){var e=t;return e=e.replace(/fl°°/g,function(){return"&#"}),e=e.replace(/fl°/g,function(){return"&"}),e=e.replace(/¶ß/g,function(){return";"})};var w=function(t,r,n,i){if(void 0!==i)i.innerHTML="",D.select(i).append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g");else{var h=document.querySelector("#d"+t);h&&(h.innerHTML=""),D.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=r,r=e.encodeEntities(r);var y=D.select("#d"+t).node(),d=u.detectType(r),p={};switch(d){case"gitGraph":C.flowchart.arrowMarkerAbsolute=C.arrowMarkerAbsolute,v.setConf(C.gitGraph),v.draw(r,t,!1);break;case"graph":C.flowchart.arrowMarkerAbsolute=C.arrowMarkerAbsolute,o.setConf(C.flowchart),o.draw(r,t,!1),C.cloneCssStyles&&(p=o.getClasses(r,!1),u.cloneCssStyles(y.firstChild,p));break;case"dotGraph":C.flowchart.arrowMarkerAbsolute=C.arrowMarkerAbsolute,o.setConf(C.flowchart),o.draw(r,t,!0),C.cloneCssStyles&&(p=o.getClasses(r,!0),u.cloneCssStyles(y.firstChild,p));break;case"sequenceDiagram":C.sequenceDiagram.arrowMarkerAbsolute=C.arrowMarkerAbsolute,c.setConf(C.sequenceDiagram),c.draw(r,t),C.cloneCssStyles&&u.cloneCssStyles(y.firstChild,[]);break;case"gantt":C.gantt.arrowMarkerAbsolute=C.arrowMarkerAbsolute,m.setConf(C.gantt),m.draw(r,t),C.cloneCssStyles&&u.cloneCssStyles(y.firstChild,[]);break;case"classDiagram":C.classDiagram.arrowMarkerAbsolute=C.arrowMarkerAbsolute,x.setConf(C.classDiagram),x.draw(r,t),C.cloneCssStyles&&u.cloneCssStyles(y.firstChild,[]);break;case"info":C.info.arrowMarkerAbsolute=C.arrowMarkerAbsolute,l.draw(r,t,e.version()),C.cloneCssStyles&&u.cloneCssStyles(y.firstChild,[])}D.select("#d"+t).selectAll("foreignobject div").attr("xmlns","http://www.w3.org/1999/xhtml");var g="";C.arrowMarkerAbsolute&&(g=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,g=g.replace(/\(/g,"\\("),g=g.replace(/\)/g,"\\)"));var f=D.select("#d"+t).node().innerHTML.replace(/url\(#arrowhead/g,"url("+g+"#arrowhead","g");f=e.decodeEntities(f),void 0!==n?n(f,a.bindFunctions):s.warn("CB = undefined!");var A=D.select("#d"+t).node();return null!==A&&"function"==typeof A.remove&&D.select("#d"+t).node().remove(),f};e.render=function(t,e,r,n){try{if(1===arguments.length&&(e=t,t="mermaidId0"),"undefined"!=typeof document)return w(t,e,r,n)}catch(t){s.warn(t)}};var S=function(t){var e,r=Object.keys(t);for(e=0;e<r.length;e++)if("object"===n(t[r[e]])){var i,a=Object.keys(t[r[e]]);for(i=0;i<a.length;i++)s.debug("Setting conf ",r[e],"-",a[i]),void 0===C[r[e]]&&(C[r[e]]={}),s.debug("Setting config: "+r[e]+" "+a[i]+" to "+t[r[e]][a[i]]),C[r[e]][a[i]]=t[r[e]][a[i]]}else C[r[e]]=t[r[e]]};e.initialize=function(t){s.debug("Initializing mermaidAPI"),"object"===(void 0===t?"undefined":n(t))&&S(t),i.setLogLevel(C.logLevel)},e.getConfig=function(){return C},e.parseError=function(t,e){"undefined"!=typeof mermaid?global.mermaid.parseError(t,e):(s.debug("Mermaid Syntax error:"),s.debug(t))},global.mermaidAPI={render:e.render,parse:e.parse,initialize:e.initialize,detectType:u.detectType,parseError:e.parseError,getConfig:e.getConfig}},function(t,e){t.exports=require("d3")},function(t,e,r){"use strict";var n=r(5),i=r(7),s=r(8),a=r(1),u=r(24),o=r(0),c=o.Log,l={};t.exports.setConf=function(t){var e,r=Object.keys(t);for(e=0;e<r.length;e++)l[r[e]]=t[r[e]]},e.addVertices=function(t,e){var r=function(t,e){var r;for(r=0;r<e.length;r++)void 0!==e[r]&&(t=t+e[r]+";");return t};Object.keys(t).forEach(function(n){var i,s=t[n],a="";s.classes.length>0&&(a=s.classes.join(" "));var u="";u=r(u,s.styles),i=void 0===s.text?s.id:s.text;var o="";if(l.htmlLabels)o="html",i=i.replace(/fa:fa[\w-]+/g,function(t){return'<i class="fa '+t.substring(3)+'"></i>'});else{var c=document.createElementNS("http://www.w3.org/2000/svg","text"),h=i.split(/<br>/),y=0;for(y=0;y<h.length;y++){var d=document.createElementNS("http://www.w3.org/2000/svg","tspan");d.setAttributeNS("http://www.w3.org/XML/1998/namespace","xml:space","preserve"),d.setAttribute("dy","1em"),d.setAttribute("x","1"),d.textContent=h[y],c.appendChild(d)}o="svg",i=c}var p=0,g="";switch(s.type){case"round":p=5,g="rect";break;case"square":g="rect";break;case"diamond":g="question";break;case"odd":case"odd_right":g="rect_left_inv_arrow";break;case"circle":g="circle";break;case"ellipse":g="ellipse";break;case"group":g="rect",i=l.htmlLabels?"":document.createElementNS("http://www.w3.org/2000/svg","text");break;default:g="rect"}e.setNode(s.id,{labelType:o,shape:g,label:i,rx:p,ry:p,class:a,style:u,id:s.id})})},e.addEdges=function(t,e){var r,n=0;void 0!==t.defaultStyle&&(r=t.defaultStyle.toString().replace(/,/g,";")),t.forEach(function(i){n++;var s={};"arrow_open"===i.type?s.arrowhead="none":s.arrowhead="normal";var a="";if(void 0!==i.style)i.style.forEach(function(t){a=a+t+";"});else switch(i.stroke){case"normal":a="fill:none",void 0!==r&&(a=r);break;case"dotted":a="stroke: #333; fill:none;stroke-width:2px;stroke-dasharray:3;";break;case"thick":a="stroke: #333; stroke-width: 3.5px;fill:none"}s.style=a,void 0!==i.interpolate?s.lineInterpolate=i.interpolate:void 0!==t.defaultInterpolate&&(s.lineInterpolate=t.defaultInterpolate),void 0===i.text?void 0!==i.style&&(s.arrowheadStyle="fill: #333"):(s.arrowheadStyle="fill: #333",void 0===i.style?(s.labelpos="c",l.htmlLabels?(s.labelType="html",s.label='<span class="edgeLabel">'+i.text+"</span>"):(s.labelType="text",s.style="stroke: #333; stroke-width: 1.5px;fill:none",s.label=i.text.replace(/<br>/g,"\n"))):s.label=i.text.replace(/<br>/g,"\n")),e.setEdge(i.start,i.end,s,n)})},e.getClasses=function(t,e){var r;n.clear(),r=e?s.parser:i.parser,r.yy=n,r.parse(t);var a=n.getClasses();return void 0===a.default&&(a.default={id:"default"},a.default.styles=[],a.default.clusterStyles=["rx:4px","fill: rgb(255, 255, 222)","rx: 4px","stroke: rgb(170, 170, 51)","stroke-width: 1px"],a.default.nodeLabelStyles=["fill:#000","stroke:none","font-weight:300",'font-family:"Helvetica Neue",Helvetica,Arial,sans-serf',"font-size:14px"],a.default.edgeLabelStyles=["fill:#000","stroke:none","font-weight:300",'font-family:"Helvetica Neue",Helvetica,Arial,sans-serf',"font-size:14px"]),a},e.draw=function(t,r,o){c.debug("Drawing flowchart");var h;n.clear(),h=o?s.parser:i.parser,h.yy=n;try{h.parse(t)}catch(t){c.debug("Parsing failed")}var y;void 0===(y=n.getDirection())&&(y="TD");var d,p=new u.graphlib.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:y,marginx:20,marginy:20}).setDefaultEdgeLabel(function(){return{}}),g=n.getSubGraphs(),f=0;for(f=g.length-1;f>=0;f--)d=g[f],n.addVertex(d.id,d.title,"group",void 0);var m=n.getVertices(),A=n.getEdges();f=0;var b;for(f=g.length-1;f>=0;f--)for(d=g[f],a.selectAll("cluster").append("text"),b=0;b<d.nodes.length;b++)p.setParent(d.nodes[b],d.id);e.addVertices(m,p),e.addEdges(A,p);var E=u.render,x=new E;x.shapes().question=function(t,e,r){var n=e.width,i=e.height,s=.8*(n+i),a=[{x:s/2,y:0},{x:s,y:-s/2},{x:s/2,y:-s},{x:0,y:-s/2}],o=t.insert("polygon",":first-child").attr("points",a.map(function(t){return t.x+","+t.y}).join(" ")).attr("rx",5).attr("ry",5).attr("transform","translate("+-s/2+","+2*s/4+")");return r.intersect=function(t){return u.intersect.polygon(r,a,t)},o},x.shapes().rect_left_inv_arrow=function(t,e,r){var n=e.width,i=e.height,s=[{x:-i/2,y:0},{x:n,y:0},{x:n,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}],a=t.insert("polygon",":first-child").attr("points",s.map(function(t){return t.x+","+t.y}).join(" ")).attr("transform","translate("+-n/2+","+2*i/4+")");return r.intersect=function(t){return u.intersect.polygon(r,s,t)},a},x.shapes().rect_right_inv_arrow=function(t,e,r){var n=e.width,i=e.height,s=[{x:0,y:0},{x:n+i/2,y:0},{x:n,y:-i/2},{x:n+i/2,y:-i},{x:0,y:-i}],a=t.insert("polygon",":first-child").attr("points",s.map(function(t){return t.x+","+t.y}).join(" ")).attr("transform","translate("+-n/2+","+2*i/4+")");return r.intersect=function(t){return u.intersect.polygon(r,s,t)},a},x.arrows().none=function(t,e,r,n){var i=t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto"),s=i.append("path").attr("d","M 0 0 L 0 0 L 0 0 z");u.util.applyStyle(s,r[n+"Style"])},x.arrows().normal=function(t,e,r,n){t.append("marker").attr("id",e).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowheadPath").style("stroke-width",1).style("stroke-dasharray","1,0")};var k=a.select("#"+r),_=a.select("#"+r+" g");for(x(_,p),_.selectAll("g.node").attr("title",function(){return n.getTooltip(this.id)}),l.useMaxWidth?(k.attr("height","100%"),k.attr("width",l.width),k.attr("viewBox","0 0 "+(p.graph().width+20)+" "+(p.graph().height+20)),k.attr("style","max-width:"+(p.graph().width+20)+"px;")):(k.attr("height",p.graph().height),void 0===l.width?k.attr("width",p.graph().width):k.attr("width",l.width),k.attr("viewBox","0 0 "+(p.graph().width+20)+" "+(p.graph().height+20))),n.indexNodes("subGraph"+f),f=0;f<g.length;f++)if(d=g[f],"undefined"!==d.title){var v=document.querySelectorAll("#"+r+" #"+d.id+" rect"),F=document.querySelectorAll("#"+r+" #"+d.id),D=v[0].x.baseVal.value,C=v[0].y.baseVal.value,T=v[0].width.baseVal.value,w=a.select(F[0]),S=w.append("text");S.attr("x",D+T/2),S.attr("y",C+14),S.attr("fill","black"),S.attr("stroke","none"),S.attr("id",r+"Text"),S.style("text-anchor","middle"),void 0===d.title?S.text("Undef"):S.text(d.title)}if(!l.htmlLabels){var B,L=document.querySelectorAll("#"+r+" .edgeLabel .label");for(B=0;B<L.length;B++){var I=L[f],O=I.getBBox(),P=document.createElementNS("http://www.w3.org/2000/svg","rect");P.setAttribute("rx",0),P.setAttribute("ry",0),P.setAttribute("width",O.width),P.setAttribute("height",O.height),P.setAttribute("style","fill:#e8e8e8;"),I.insertBefore(P,I.firstChild)}}}},function(t,e){t.exports=require("dagre-d3-renderer")},function(t,e,r){"use strict";var n=r(9).parser;n.yy=r(10);var i=r(26),s=r(1),a=r(0),u=a.Log,o={diagramMarginX:50,diagramMarginY:30,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,mirrorActors:!1,bottomMarginAdj:1,activationWidth:10,textPlacement:"tspan"};e.bounds={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],init:function(){this.sequenceItems=[],this.activations=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,r,n){void 0===t[e]?t[e]=r:t[e]=n(r,t[e])},updateBounds:function(t,r,n,i){function s(s){return function(c){u++;var l=a.sequenceItems.length-u+1;a.updateVal(c,"starty",r-l*o.boxMargin,Math.min),a.updateVal(c,"stopy",i+l*o.boxMargin,Math.max),a.updateVal(e.bounds.data,"startx",t-l*o.boxMargin,Math.min),a.updateVal(e.bounds.data,"stopx",n+l*o.boxMargin,Math.max),"activation"!==s&&(a.updateVal(c,"startx",t-l*o.boxMargin,Math.min),a.updateVal(c,"stopx",n+l*o.boxMargin,Math.max),a.updateVal(e.bounds.data,"starty",r-l*o.boxMargin,Math.min),a.updateVal(e.bounds.data,"stopy",i+l*o.boxMargin,Math.max))}}var a=this,u=0;this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},insert:function(t,r,n,i){var s,a,u,o;s=Math.min(t,n),u=Math.max(t,n),a=Math.min(r,i),o=Math.max(r,i),this.updateVal(e.bounds.data,"startx",s,Math.min),this.updateVal(e.bounds.data,"starty",a,Math.min),this.updateVal(e.bounds.data,"stopx",u,Math.max),this.updateVal(e.bounds.data,"stopy",o,Math.max),this.updateBounds(s,a,u,o)},newActivation:function(t,e){var r=n.yy.getActors()[t.from.actor],s=h(t.from.actor).length,a=r.x+o.width/2+(s-1)*o.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+o.activationWidth,stopy:void 0,actor:t.from.actor,anchored:i.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]},newLoop:function(t){this.sequenceItems.push({startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t})},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){var r=this.sequenceItems.pop();r.sections=r.sections||[],r.sectionTitles=r.sectionTitles||[],r.sections.push(e.bounds.getVerticalPos()),r.sectionTitles.push(t),this.sequenceItems.push(r)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}};var c=function(t,r,n,s,a){var u=i.getNoteRect();u.x=r,u.y=n,u.width=a||o.width,u.class="note";var c=t.append("g"),l=i.drawRect(c,u),h=i.getTextObj();h.x=r-4,h.y=n-13,h.textMargin=o.noteMargin,h.dy="1em",h.text=s.message,h.class="noteText";var y=i.drawText(c,h,u.width-o.noteMargin),d=y[0][0].getBBox().height;!a&&d>o.width?(y.remove(),c=t.append("g"),y=i.drawText(c,h,2*u.width-o.noteMargin),d=y[0][0].getBBox().height,l.attr("width",2*u.width),e.bounds.insert(r,n,r+2*u.width,n+2*o.noteMargin+d)):e.bounds.insert(r,n,r+u.width,n+2*o.noteMargin+d),l.attr("height",d+2*o.noteMargin),e.bounds.bumpVerticalPos(d+2*o.noteMargin)},l=function(t,r,i,s,a){var u,c=t.append("g"),l=r+(i-r)/2,h=c.append("text").attr("x",l).attr("y",s-7).style("text-anchor","middle").attr("class","messageText").text(a.message);u=void 0!==h[0][0].getBBox?h[0][0].getBBox().width:h[0][0].getBoundingClientRect();var y;if(r===i){y=c.append("path").attr("d","M "+r+","+s+" C "+(r+60)+","+(s-10)+" "+(r+60)+","+(s+30)+" "+r+","+(s+20)),e.bounds.bumpVerticalPos(30);var d=Math.max(u/2,100);e.bounds.insert(r-d,e.bounds.getVerticalPos()-10,i+d,e.bounds.getVerticalPos())}else y=c.append("line"),y.attr("x1",r),y.attr("y1",s),y.attr("x2",i),y.attr("y2",s),e.bounds.insert(r,e.bounds.getVerticalPos()-10,i,e.bounds.getVerticalPos());a.type===n.yy.LINETYPE.DOTTED||a.type===n.yy.LINETYPE.DOTTED_CROSS||a.type===n.yy.LINETYPE.DOTTED_OPEN?(y.style("stroke-dasharray","3, 3"),y.attr("class","messageLine1")):y.attr("class","messageLine0");var p="";o.arrowMarkerAbsolute&&(p=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,p=p.replace(/\(/g,"\\("),p=p.replace(/\)/g,"\\)")),y.attr("stroke-width",2),y.attr("stroke","black"),y.style("fill","none"),a.type!==n.yy.LINETYPE.SOLID&&a.type!==n.yy.LINETYPE.DOTTED||y.attr("marker-end","url("+p+"#arrowhead)"),a.type!==n.yy.LINETYPE.SOLID_CROSS&&a.type!==n.yy.LINETYPE.DOTTED_CROSS||y.attr("marker-end","url("+p+"#crosshead)")};t.exports.drawActors=function(t,r,n,s){var a;for(a=0;a<n.length;a++){var u=n[a];r[u].x=a*o.actorMargin+a*o.width,r[u].y=s,r[u].width=o.diagramMarginX,r[u].height=o.diagramMarginY,i.drawActor(t,r[u].x,s,r[u].description,o),e.bounds.insert(r[u].x,s,r[u].x+o.width,o.height)}e.bounds.bumpVerticalPos(o.height)},t.exports.setConf=function(t){Object.keys(t).forEach(function(e){o[e]=t[e]})};var h=function(e){return t.exports.bounds.activations.filter(function(t){return t.actor===e})},y=function(t){var e=n.yy.getActors(),r=h(t);return[r.reduce(function(t,e){return Math.min(t,e.startx)},e[t].x+o.width/2),r.reduce(function(t,e){return Math.max(t,e.stopx)},e[t].x+o.width/2)]};t.exports.draw=function(r,a){function h(t,r){var n=e.bounds.endActivation(t);n.starty+18>r&&(n.starty=r-6,r+=12),i.drawActivation(f,n,r,o),e.bounds.insert(n.startx,r-10,n.stopx,r)}n.yy.clear(),n.parse(r+"\n"),e.bounds.init();var d,p,g,f=s.select("#"+a),m=n.yy.getActors(),A=n.yy.getActorKeys(),b=n.yy.getMessages(),E=n.yy.getTitle();t.exports.drawActors(f,m,A,0),i.insertArrowHead(f),i.insertArrowCrossHead(f),b.forEach(function(t){var r;switch(t.type){case n.yy.LINETYPE.NOTE:e.bounds.bumpVerticalPos(o.boxMargin),d=m[t.from].x,p=m[t.to].x,t.placement===n.yy.PLACEMENT.RIGHTOF?c(f,d+(o.width+o.actorMargin)/2,e.bounds.getVerticalPos(),t):t.placement===n.yy.PLACEMENT.LEFTOF?c(f,d-(o.width+o.actorMargin)/2,e.bounds.getVerticalPos(),t):t.to===t.from?c(f,d,e.bounds.getVerticalPos(),t):(g=Math.abs(d-p)+o.actorMargin,c(f,(d+p+o.width-g)/2,e.bounds.getVerticalPos(),t,g));break;case n.yy.LINETYPE.ACTIVE_START:e.bounds.newActivation(t,f);break;case n.yy.LINETYPE.ACTIVE_END:h(t,e.bounds.getVerticalPos());break;case n.yy.LINETYPE.LOOP_START:e.bounds.bumpVerticalPos(o.boxMargin),e.bounds.newLoop(t.message),e.bounds.bumpVerticalPos(o.boxMargin+o.boxTextMargin);break;case n.yy.LINETYPE.LOOP_END:r=e.bounds.endLoop(),i.drawLoop(f,r,"loop",o),e.bounds.bumpVerticalPos(o.boxMargin);break;case n.yy.LINETYPE.OPT_START:e.bounds.bumpVerticalPos(o.boxMargin),e.bounds.newLoop(t.message),e.bounds.bumpVerticalPos(o.boxMargin+o.boxTextMargin);break;case n.yy.LINETYPE.OPT_END:r=e.bounds.endLoop(),i.drawLoop(f,r,"opt",o),e.bounds.bumpVerticalPos(o.boxMargin);break;case n.yy.LINETYPE.ALT_START:e.bounds.bumpVerticalPos(o.boxMargin),e.bounds.newLoop(t.message),e.bounds.bumpVerticalPos(o.boxMargin+o.boxTextMargin);break;case n.yy.LINETYPE.ALT_ELSE:e.bounds.bumpVerticalPos(o.boxMargin),r=e.bounds.addSectionToLoop(t.message),e.bounds.bumpVerticalPos(o.boxMargin);break;case n.yy.LINETYPE.ALT_END:r=e.bounds.endLoop(),i.drawLoop(f,r,"alt",o),e.bounds.bumpVerticalPos(o.boxMargin);break;case n.yy.LINETYPE.PAR_START:e.bounds.bumpVerticalPos(o.boxMargin),e.bounds.newLoop(t.message),e.bounds.bumpVerticalPos(o.boxMargin+o.boxTextMargin);break;case n.yy.LINETYPE.PAR_AND:e.bounds.bumpVerticalPos(o.boxMargin),r=e.bounds.addSectionToLoop(t.message),e.bounds.bumpVerticalPos(o.boxMargin);break;case n.yy.LINETYPE.PAR_END:r=e.bounds.endLoop(),i.drawLoop(f,r,"par",o),e.bounds.bumpVerticalPos(o.boxMargin);break;default:try{e.bounds.bumpVerticalPos(o.messageMargin);var s=y(t.from),a=y(t.to),u=s[0]<=a[0]?1:0,A=s[0]<a[0]?0:1;d=s[u],p=a[A];var b=e.bounds.getVerticalPos();l(f,d,p,b,t);var E=s.concat(a);e.bounds.insert(Math.min.apply(null,E),b,Math.max.apply(null,E),b)}catch(t){console.error("error while drawing message",t)}}}),o.mirrorActors&&(e.bounds.bumpVerticalPos(2*o.boxMargin),t.exports.drawActors(f,m,A,e.bounds.getVerticalPos()));var x=e.bounds.getBounds();u.debug("For line height fix Querying: #"+a+" .actor-line"),s.selectAll("#"+a+" .actor-line").attr("y2",x.stopy);var k=x.stopy-x.starty+2*o.diagramMarginY;o.mirrorActors&&(k=k-o.boxMargin+o.bottomMarginAdj);var _=x.stopx-x.startx+2*o.diagramMarginX;E&&f.append("text").text(E).attr("x",(x.stopx-x.startx)/2-2*o.diagramMarginX).attr("y",-25),o.useMaxWidth?(f.attr("height","100%"),f.attr("width","100%"),f.attr("style","max-width:"+_+"px;")):(f.attr("height",k),f.attr("width",_));var v=E?40:0;f.attr("viewBox",x.startx-o.diagramMarginX+" -"+(o.diagramMarginY+v)+" "+_+" "+(k+v))}},function(t,e,r){"use strict";e.drawRect=function(t,e){var r=t.append("rect");return r.attr("x",e.x),r.attr("y",e.y),r.attr("fill",e.fill),r.attr("stroke",e.stroke),r.attr("width",e.width),r.attr("height",e.height),r.attr("rx",e.rx),r.attr("ry",e.ry),void 0!==e.class&&r.attr("class",e.class),r},e.drawText=function(t,e,r){var n=e.text.replace(/<br\/?>/gi," "),i=t.append("text");i.attr("x",e.x),i.attr("y",e.y),i.style("text-anchor",e.anchor),i.attr("fill",e.fill),void 0!==e.class&&i.attr("class",e.class);var s=i.append("tspan");return s.attr("x",e.x+2*e.textMargin),s.attr("fill",e.fill),s.text(n),void 0!==i.textwrap&&i.textwrap({x:e.x,y:e.y,width:r,height:1800},e.textMargin),i},e.drawLabel=function(t,r){var n=t.append("polygon");n.attr("points",function(t,e,r,n,i){return t+","+e+" "+(t+r)+","+e+" "+(t+r)+","+(e+n-i)+" "+(t+r-1.2*i)+","+(e+n)+" "+t+","+(e+n)}(r.x,r.y,50,20,7)),n.attr("class","labelBox"),r.y=r.y+r.labelMargin,r.x=r.x+.5*r.labelMargin,e.drawText(t,r)};var n=-1;e.drawActor=function(t,r,s,a,u){var o=r+u.width/2,c=t.append("g");0===s&&(n++,c.append("line").attr("id","actor"+n).attr("x1",o).attr("y1",5).attr("x2",o).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));var l=e.getNoteRect();l.x=r,l.y=s,l.fill="#eaeaea",l.width=u.width,l.height=u.height,l.class="actor",l.rx=3,l.ry=3,e.drawRect(c,l),i(u)(a,c,l.x,l.y,l.width,l.height,{class:"actor"})},e.anchorElement=function(t){return t.append("g")},e.drawActivation=function(t,r,n){var i=e.getNoteRect(),s=r.anchored;i.x=r.startx,i.y=r.starty,i.fill="#f4f4f4",i.width=r.stopx-r.startx,i.height=n-r.starty,e.drawRect(s,i)},e.drawLoop=function(t,r,n,i){var s=t.append("g"),a=function(t,e,r,n){return s.append("line").attr("x1",t).attr("y1",e).attr("x2",r).attr("y2",n).attr("class","loopLine")};a(r.startx,r.starty,r.stopx,r.starty),a(r.stopx,r.starty,r.stopx,r.stopy),a(r.startx,r.stopy,r.stopx,r.stopy),a(r.startx,r.starty,r.startx,r.stopy),void 0!==r.sections&&r.sections.forEach(function(t){a(r.startx,t,r.stopx,t).style("stroke-dasharray","3, 3")});var u=e.getTextObj();u.text=n,u.x=r.startx,u.y=r.starty,u.labelMargin=15,u.class="labelText",e.drawLabel(s,u),u=e.getTextObj(),u.text="[ "+r.title+" ]",u.x=r.startx+(r.stopx-r.startx)/2,u.y=r.starty+1.5*i.boxMargin,u.anchor="middle",u.class="loopText",e.drawText(s,u),void 0!==r.sectionTitles&&r.sectionTitles.forEach(function(t,n){""!==t&&(u.text="[ "+t+" ]",u.y=r.sections[n]+1.5*i.boxMargin,e.drawText(s,u))})},e.insertArrowHead=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")},e.insertArrowCrossHead=function(t){var e=t.append("defs"),r=e.append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);r.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),r.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},e.getTextObj=function(){return{x:0,y:0,fill:"black","text-anchor":"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0}},e.getNoteRect=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}};var i=function(){function t(t,e,r,i,s,a,u){n(e.append("text").attr("x",r+s/2).attr("y",i+a/2+5).style("text-anchor","middle").text(t),u)}function e(t,e,r,i,s,a,u){var o=e.append("text").attr("x",r+s/2).attr("y",i).style("text-anchor","middle");if(o.append("tspan").attr("x",r+s/2).attr("dy","0").text(t),void 0!==o.textwrap){o.textwrap({x:r+s/2,y:i,width:s,height:a},0);var c=o.selectAll("tspan");c.length>0&&c[0].length>0&&(c=c[0],o.attr("y",i+(a/2-o[0][0].getBBox().height*(1-1/c.length)/2)).attr("dominant-baseline","central").attr("alignment-baseline","central"))}n(o,u)}function r(t,r,i,s,a,u,o){var c=r.append("switch"),l=c.append("foreignObject").attr("x",i).attr("y",s).attr("width",a).attr("height",u),h=l.append("div").style("display","table").style("height","100%").style("width","100%");h.append("div").style("display","table-cell").style("text-align","center").style("vertical-align","middle").text(t),e(t,c,i,s,a,u,o),n(h,o)}function n(t,e){for(var r in e)e.hasOwnProperty(r)&&t.attr(r,e[r])}return function(n){return"fo"===n.textPlacement?r:"old"===n.textPlacement?t:e}}()},function(t,e,r){"use strict";var n=r(11),i=r(12),s=r(1),a=r(0),u=a.Log;e.draw=function(t,e,r){var a;a=i.parser,a.yy=n,u.debug("Renering example diagram"),a.parse(t);var o=s.select("#"+e);o.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("mermaid "+r),o.attr("height",100),o.attr("width",400)}},function(t,e,r){"use strict";var n=r(13).parser;n.yy=r(14);var i,s=r(1),a=r(15),u={titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"'};t.exports.setConf=function(t){Object.keys(t).forEach(function(e){u[e]=t[e]})};var o;t.exports.draw=function(t,e){function r(t,e,r,n,i,s,a,o){m.append("g").selectAll("rect").data(t).enter().append("rect").attr("x",0).attr("y",function(t,n){return n*e+r-2}).attr("width",function(){return a-u.rightPadding/2}).attr("height",e).attr("class",function(t){for(var e=0;e<x.length;e++)if(t.type===x[e])return"section section"+e%u.numberSectionStyles;return"section section0"});var c=m.append("g").selectAll("rect").data(t).enter();c.append("rect").attr("rx",3).attr("ry",3).attr("x",function(t){return E(t.startTime)+n}).attr("y",function(t,n){return n*e+r}).attr("width",function(t){return E(t.endTime)-E(t.startTime)}).attr("height",i).attr("class",function(t){for(var e="task ",r=0,n=0;n<x.length;n++)t.type===x[n]&&(r=n%u.numberSectionStyles);return t.active?t.crit?e+" activeCrit"+r:e+" active"+r:t.done?t.crit?e+" doneCrit"+r:e+" done"+r:t.crit?e+" crit"+r:e+" task"+r}),c.append("text").text(function(t){return t.task}).attr("font-size",u.fontSize).attr("x",function(t){var e=E(t.startTime),r=E(t.endTime),i=this.getBBox().width;return i>r-e?r+i+1.5*u.leftPadding>a?e+n-5:r+n+5:(r-e)/2+e+n}).attr("y",function(t,n){return n*e+u.barHeight/2+(u.fontSize/2-2)+r}).attr("text-height",i).attr("class",function(t){for(var e=E(t.startTime),r=E(t.endTime),n=this.getBBox().width,i=0,s=0;s<x.length;s++)t.type===x[s]&&(i=s%u.numberSectionStyles);var o="";return t.active&&(o=t.crit?"activeCritText"+i:"activeText"+i),t.done?o=t.crit?o+" doneCritText"+i:o+" doneText"+i:t.crit&&(o=o+" critText"+i),n>r-e?r+n+1.5*u.leftPadding>a?"taskTextOutsideLeft taskTextOutside"+i+" "+o:"taskTextOutsideRight taskTextOutside"+i+" "+o:"taskText taskText"+i+" "+o})}function c(t,e,r,n){var a,o=[[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["h1 %I:%M",function(t){return t.getMinutes()}]],c=[["%Y",function(){return!0}]],l=[["%I:%M",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!==t.getDate()}],["%b %d",function(t){return 1!==t.getDate()}],["%B",function(t){return t.getMonth()}]];void 0!==u.axisFormatter&&(l=[],u.axisFormatter.forEach(function(t){var e=[];e[0]=t[0],e[1]=t[1],l.push(e)})),a=o.concat(l).concat(c);var h=s.svg.axis().scale(E).orient("bottom").tickSize(-n+e+u.gridLineStartPadding,0,0).tickFormat(s.time.format.multi(a));i>7&&i<230&&(h=h.ticks(s.time.monday.range)),m.append("g").attr("class","grid").attr("transform","translate("+t+", "+(n-50)+")").call(h).selectAll("text").style("text-anchor","middle").attr("fill","#000").attr("stroke","none").attr("font-size",10).attr("dy","1em")}function l(t,e){for(var r=[],n=0,i=0;i<x.length;i++)r[i]=[x[i],d(x[i],_)];m.append("g").selectAll("text").data(r).enter().append("text").text(function(t){return t[0]}).attr("x",10).attr("y",function(i,s){if(!(s>0))return i[1]*t/2+e;for(var a=0;a<s;a++)return n+=r[s-1][1],i[1]*t/2+n*t+e}).attr("class",function(t){for(var e=0;e<x.length;e++)if(t[0]===x[e])return"sectionTitle sectionTitle"+e%u.numberSectionStyles;return"sectionTitle"})}function h(t,e,r,n){var i=m.append("g").attr("class","today"),s=new Date;i.append("line").attr("x1",E(s)+t).attr("x2",E(s)+t).attr("y1",u.titleTopMargin).attr("y2",n-u.titleTopMargin).attr("class","today")}function y(t){for(var e=t.length,r={};e;)r[t[--e]]=(r[t[e]]||0)+1;return r}function d(t,e){return y(e)[t]||0}n.yy.clear(),n.parse(t);var p=document.getElementById(e);o=p.parentElement.offsetWidth,void 0===o&&(o=1200),void 0!==u.useWidth&&(o=u.useWidth);var g=n.yy.getTasks(),f=g.length*(u.barHeight+u.barGap)+2*u.topPadding;p.setAttribute("height","100%"),p.setAttribute("viewBox","0 0 "+o+" "+f);var m=s.select("#"+e),A=s.min(g,function(t){return t.startTime}),b=s.max(g,function(t){return t.endTime}),E=s.time.scale().domain([s.min(g,function(t){return t.startTime}),s.max(g,function(t){return t.endTime})]).rangeRound([0,o-u.leftPadding-u.rightPadding]),x=[];i=a.duration(b-A).asDays();for(var k=0;k<g.length;k++)x.push(g[k].type);var _=x;x=function(t){for(var e={},r=[],n=0,i=t.length;n<i;++n)e.hasOwnProperty(t[n])||(e[t[n]]=!0,r.push(t[n]));return r}(x),function(t,e,n){var i=u.barHeight,a=i+u.barGap,o=u.topPadding,y=u.leftPadding,d=s.scale.linear().domain([0,x.length]).range(["#00B9FA","#F95002"]).interpolate(s.interpolateHcl);c(y,o,e,n),r(t,a,o,y,i,d,e,n),l(a,o),h(y,o,e,n)}(g,o,f),void 0!==u.useWidth&&p.setAttribute("width",o),m.append("text").text(n.yy.getTitle()).attr("x",o/2).attr("y",u.titleTopMargin).attr("class","titleText")}},function(t,e,r){"use strict";var n=r(16).parser,i=r(17);n.yy=i;var s,a=r(1),u=r(0),o=u.Log,c=r(30);s={};var l=0,h={dividerMargin:10,padding:5,textHeight:10},y=function(t){var e,r=Object.keys(s);for(e=0;e<r.length;e++)if(s[r[e]].label===t)return r[e]},d=function(t){t.append("defs").append("marker").attr("id","extensionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),t.append("defs").append("marker").attr("id","extensionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z"),t.append("defs").append("marker").attr("id","compositionStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","compositionEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","aggregationStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","aggregationEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),t.append("defs").append("marker").attr("id","dependencyStart").attr("class","extension").attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),t.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 18,7 L9,13 L14,7 L9,1 Z")},p=0,g=function(t,e,r){var n=function(t){switch(t){case i.relationType.AGGREGATION:return"aggregation";case i.relationType.EXTENSION:return"extension";case i.relationType.COMPOSITION:return"composition";case i.relationType.DEPENDENCY:return"dependency"}},s=e.points,u=a.svg.line().x(function(t){return t.x}).y(function(t){return t.y}).interpolate("basis"),o=t.append("path").attr("d",u(s)).attr("id","edge"+p).attr("class","relation"),c="";h.arrowMarkerAbsolute&&(c=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,c=c.replace(/\(/g,"\\("),c=c.replace(/\)/g,"\\)")),"none"!==r.relation.type1&&o.attr("marker-start","url("+c+"#"+n(r.relation.type1)+"Start)"),"none"!==r.relation.type2&&o.attr("marker-end","url("+c+"#"+n(r.relation.type2)+"End)");var l,y,d=e.points.length;if(d%2!=0){var g=e.points[Math.floor(d/2)],f=e.points[Math.ceil(d/2)];l=(g.x+f.x)/2,y=(g.y+f.y)/2}else{var m=e.points[Math.floor(d/2)];l=m.x,y=m.y}if(void 0!==r.title){var A=t.append("g").attr("class","classLabel"),b=A.append("text").attr("class","label").attr("x",l).attr("y",y).attr("fill","red").attr("text-anchor","middle").text(r.title);window.label=b;var E=b.node().getBBox();A.insert("rect",":first-child").attr("class","box").attr("x",E.x-h.padding/2).attr("y",E.y-h.padding/2).attr("width",E.width+h.padding).attr("height",E.height+h.padding)}p++},f=function(t,e){o.info("Rendering class "+e);var r=function(t,e,r){var n=t.append("tspan").attr("x",h.padding).text(e);r||n.attr("dy",h.textHeight)},n="classId"+l,i={id:n,label:e.id,width:0,height:0},a=t.append("g").attr("id",n).attr("class","classGroup"),u=a.append("text").attr("x",h.padding).attr("y",h.textHeight+h.padding).text(e.id),c=u.node().getBBox().height,y=a.append("line").attr("x1",0).attr("y1",h.padding+c+h.dividerMargin/2).attr("y2",h.padding+c+h.dividerMargin/2),d=a.append("text").attr("x",h.padding).attr("y",c+h.dividerMargin+h.textHeight).attr("fill","white").attr("class","classText"),p=!0;e.members.forEach(function(t){r(d,t,p),p=!1});var g=d.node().getBBox(),f=a.append("line").attr("x1",0).attr("y1",h.padding+c+h.dividerMargin+g.height).attr("y2",h.padding+c+h.dividerMargin+g.height),m=a.append("text").attr("x",h.padding).attr("y",c+2*h.dividerMargin+g.height+h.textHeight).attr("fill","white").attr("class","classText");p=!0,e.methods.forEach(function(t){r(m,t,p),p=!1});var A=a.node().getBBox();return a.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",A.width+2*h.padding).attr("height",A.height+h.padding+.5*h.dividerMargin),y.attr("x2",A.width+2*h.padding),f.attr("x2",A.width+2*h.padding),i.width=A.width+2*h.padding,i.height=A.height+h.padding+.5*h.dividerMargin,s[n]=i,l++,i};t.exports.setConf=function(t){Object.keys(t).forEach(function(e){h[e]=t[e]})},t.exports.draw=function(t,e){n.yy.clear(),n.parse(t),o.info("Rendering diagram "+t);var r=a.select("#"+e);d(r);var s=new c.graphlib.Graph({multigraph:!0});s.setGraph({isMultiGraph:!0}),s.setDefaultEdgeLabel(function(){return{}});var u,l=i.getClasses(),h=Object.keys(l);for(u=0;u<h.length;u++){var p=l[h[u]],m=f(r,p);s.setNode(m.id,m),o.info("Org height: "+m.height)}i.getRelations().forEach(function(t){o.info("tjoho"+y(t.id1)+y(t.id2)+JSON.stringify(t)),s.setEdge(y(t.id1),y(t.id2),{relation:t})}),c.layout(s),s.nodes().forEach(function(t){void 0!==t&&(o.debug("Node "+t+": "+JSON.stringify(s.node(t))),a.select("#"+t).attr("transform","translate("+(s.node(t).x-s.node(t).width/2)+","+(s.node(t).y-s.node(t).height/2)+" )"))}),s.edges().forEach(function(t){o.debug("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(s.edge(t))),g(r,s.edge(t),s.edge(t).relation)}),r.attr("height","100%"),r.attr("width","100%"),r.attr("viewBox","0 0 "+(s.graph().width+20)+" "+(s.graph().height+20))}},function(t,e){t.exports=require("dagre")},function(t,e,r){"use strict";function n(t){t.append("defs").append("g").attr("id","def-commit").append("circle").attr("r",A.nodeRadius).attr("cx",0).attr("cy",0),t.select("#def-commit").append("foreignObject").attr("width",A.nodeLabel.width).attr("height",A.nodeLabel.height).attr("x",A.nodeLabel.x).attr("y",A.nodeLabel.y).attr("class","node-label").attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").append("xhtml:p").html("")}function i(t,e,r,n){n=n||"basis";var i=A.branchColors[r%A.branchColors.length],s=p.svg.line().x(function(t){return Math.round(t.x)}).y(function(t){return Math.round(t.y)}).interpolate(n);t.append("svg:path").attr("d",s(e)).style("stroke",i).style("stroke-width",A.lineStrokeWidth).style("fill","none")}function s(t,e){e=e||t.node().getBBox();var r=t.node().getCTM();return{left:r.e+e.x*r.a,top:r.f+e.y*r.d,width:e.width,height:e.height}}function a(t,e,r,n,a){f.debug("svgDrawLineForCommits: ",e,r);var u=s(t.select("#node-"+e+" circle")),o=s(t.select("#node-"+r+" circle"));switch(n){case"LR":if(u.left-o.left>A.nodeSpacing){var c={x:u.left-A.nodeSpacing,y:o.top+o.height/2},l={x:o.left+o.width,y:o.top+o.height/2};i(t,[c,l],a,"linear"),i(t,[{x:u.left,y:u.top+u.height/2},{x:u.left-A.nodeSpacing/2,y:u.top+u.height/2},{x:u.left-A.nodeSpacing/2,y:c.y},c],a)}else i(t,[{x:u.left,y:u.top+u.height/2},{x:u.left-A.nodeSpacing/2,y:u.top+u.height/2},{x:u.left-A.nodeSpacing/2,y:o.top+o.height/2},{x:o.left+o.width,y:o.top+o.height/2}],a);break;case"BT":o.top-u.top>A.nodeSpacing?(c={x:o.left+o.width/2,y:u.top+u.height+A.nodeSpacing},l={x:o.left+o.width/2,y:o.top},i(t,[c,l],a,"linear"),i(t,[{x:u.left+u.width/2,y:u.top+u.height},{x:u.left+u.width/2,y:u.top+u.height+A.nodeSpacing/2},{x:o.left+o.width/2,y:c.y-A.nodeSpacing/2},c],a)):i(t,[{x:u.left+u.width/2,y:u.top+u.height},{x:u.left+u.width/2,y:u.top+A.nodeSpacing/2},{x:o.left+o.width/2,y:o.top-A.nodeSpacing/2},{x:o.left+o.width/2,y:o.top}],a)}}function u(t,e){return t.select(e).node().cloneNode(!0)}function o(t,e,r,n){var i,s=Object.keys(m).length;if(y.isString(e))do{if(i=m[e],f.debug("in renderCommitHistory",i.id,i.seq),t.select("#node-"+e).size()>0)return;t.append(function(){return u(t,"#def-commit")}).attr("class","commit").attr("id",function(){return"node-"+i.id}).attr("transform",function(){switch(n){case"LR":return"translate("+(i.seq*A.nodeSpacing+A.leftMargin)+", "+l*A.branchOffset+")";case"BT":return"translate("+(l*A.branchOffset+A.leftMargin)+", "+(s-i.seq)*A.nodeSpacing+")"}}).attr("fill",A.nodeFillColor).attr("stroke",A.nodeStrokeColor).attr("stroke-width",A.nodeStrokeWidth);var a=y.find(r,["commit",i]);a&&(f.debug("found branch ",a.name),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","branch-label").text(a.name+", ")),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-id").text(i.id),""!==i.message&&"BT"===n&&t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-msg").text(", "+i.message),e=i.parent}while(e&&m[e]);y.isArray(e)&&(f.debug("found merge commmit",e),o(t,e[0],r,n),l++,o(t,e[1],r,n),l--)}function c(t,e,r,n){for(n=n||0;e.seq>0&&!e.lineDrawn;)y.isString(e.parent)?(a(t,e.id,e.parent,r,n),e.lineDrawn=!0,e=m[e.parent]):y.isArray(e.parent)&&(a(t,e.id,e.parent[0],r,n),a(t,e.id,e.parent[1],r,n+1),c(t,m[e.parent[1]],r,n+1),e.lineDrawn=!0,e=m[e.parent[0]])}var l,h=r(19),y=r(20),d=r(18),p=r(1),g=r(0),f=g.Log,m={},A={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}},b={};e.setConf=function(t){b=t},e.draw=function(t,e,r){try{var i;i=d.parser,i.yy=h,f.debug("in gitgraph renderer",t,e,r),i.parse(t+"\n"),A=y.extend(A,b,h.getOptions()),f.debug("effective options",A);var s=h.getDirection();m=h.getCommits();var a=h.getBranchesAsObjArray();"BT"===s&&(A.nodeLabel.x=a.length*A.branchOffset,A.nodeLabel.width="100%",A.nodeLabel.y=-2*A.nodeRadius);var u=p.select("#"+e);n(u),l=1,y.each(a,function(t){o(u,t.commit.id,a,s),c(u,t.commit,s),l++}),u.attr("height",function(){return"BT"===s?Object.keys(m).length*A.nodeSpacing:(a.length+1)*A.branchOffset})}catch(t){f.error("Error while rendering gitgraph"),f.error(t.message)}}},function(t,e){t.exports={name:"mermaid",version:"7.0.5",description:"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.",main:"src/mermaid.js",keywords:["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],bin:{mermaid:"./bin/mermaid.js"},scripts:{build:"node -r babel-register ./node_modules/.bin/webpack --progress --colors",watch:"yarn build -- --watch",release:"yarn build -- -p --config webpack.config.prod.js",upgrade:"yarn-upgrade-all && yarn remove d3 && yarn add d3@3.5.17",lint:"node_modules/.bin/standard",karma:"node node_modules/karma/bin/karma start karma.conf.js --single-run",tape:"node node_modules/tape/bin/tape test/cli_test-*.js",test:"yarn lint && yarn tape && yarn karma",live:"live-server ./test/examples",jison:"gulp jison_legacy",live_server:"gulp live-server",prepublishOnly:"yarn build && yarn release && yarn test"},repository:{type:"git",url:"https://github.com/knsv/mermaid"},author:"Knut Sveidqvist",license:"MIT",standard:{ignore:["**/parser/*.js","dist/**/*.js"]},dependencies:{chalk:"^2.1.0",d3:"3.5.17",dagre:"^0.7.4","dagre-d3-renderer":"^0.1.6",he:"^1.1.1",lodash:"^4.17.4",minimist:"^1.2.0",mkdirp:"^0.5.1",moment:"^2.18.1",semver:"^5.4.1",which:"^1.3.0"},devDependencies:{async:"^2.5.0","babel-core":"^6.26.0","babel-loader":"^7.1.2","babel-plugin-transform-remove-strict-mode":"^0.0.2","babel-preset-env":"^1.6.0","babel-preset-es2015":"^6.24.1",clone:"^2.1.1","codeclimate-test-reporter":"^0.5.0","css-loader":"^0.28.7",dox:"^0.9.0","event-stream":"^3.3.4","extract-text-webpack-plugin":"^3.0.0","front-matter":"^2.2.0",gulp:"^3.9.1","gulp-bower":"^0.0.13","gulp-bump":"^2.7.0","gulp-concat":"^2.6.1","gulp-data":"^1.2.1","gulp-dox":"^0.1.6","gulp-ext-replace":"^0.3.0","gulp-filelog":"^0.4.1","gulp-front-matter":"^1.3.0","gulp-hogan":"^2.0.0","gulp-if":"^2.0.2","gulp-insert":"^0.5.0","gulp-istanbul":"^1.1.2","gulp-jasmine":"^2.4.2","gulp-jasmine-browser":"^1.9.0","gulp-jison":"^1.2.0","gulp-less":"^3.3.2","gulp-livereload":"^3.8.1","gulp-marked":"^1.0.0","gulp-mdvars":"^2.0.0","gulp-qunit":"^1.5.0","gulp-rename":"^1.2.2","gulp-shell":"^0.6.3","gulp-tag-version":"^1.3.0","gulp-util":"^3.0.8","gulp-vartree":"^2.0.1","hogan.js":"^3.0.2","inject-loader":"^3.0.1",jasmine:"^2.8.0","jasmine-es6":"^0.4.1",jison:"^0.4.17",jsdom:"^11.2.0",karma:"^1.7.1","karma-chrome-launcher":"^2.2.0","karma-jasmine":"^1.1.0","karma-webpack":"^2.0.4",less:"^2.7.2","less-loader":"^4.0.5","live-server":"^1.2.0","map-stream":"^0.0.7",marked:"^0.3.6","mock-browser":"^0.92.14","phantomjs-prebuilt":"^2.1.15","require-dir":"^0.3.2",rimraf:"^2.6.1",standard:"^10.0.3","style-loader":"^0.18.2",tape:"^4.8.0",webpack:"^3.5.5","webpack-node-externals":"^1.6.0","yarn-upgrade-all":"^0.1.8"},files:["bin","dist","lib","src"]}}]);
diff --git a/www/wiki/extensions/Mermaid/src/HookRegistry.php b/www/wiki/extensions/Mermaid/src/HookRegistry.php
new file mode 100644
index 00000000..f6fac542
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/src/HookRegistry.php
@@ -0,0 +1,116 @@
+<?php
+
+namespace Mermaid;
+
+use Hooks;
+
+/**
+ * @license GNU GPL v2+
+ * @since 1.0
+ *
+ * @author mwjames
+ */
+class HookRegistry {
+
+ /**
+ * @var array
+ */
+ private $handlers = array();
+
+ /**
+ * @since 1.0
+ *
+ * @param array $configuration
+ */
+ public function __construct( $configuration = array () ) {
+ $this->registerCallbackHandlers( $configuration );
+ }
+
+ /**
+ * @since 1.0
+ */
+ public function register() {
+ foreach ( $this->handlers as $name => $callback ) {
+ Hooks::register( $name, $callback );
+ }
+ }
+
+ /**
+ * @since 1.0
+ */
+ public function deregister() {
+ foreach ( array_keys( $this->handlers ) as $name ) {
+ Hooks::clear( $name );
+ }
+ }
+
+ /**
+ * @since 1.0
+ *
+ * @param string $name
+ *
+ * @return Callable|false
+ */
+ public function getHandlerFor( $name ) {
+ return isset( $this->handlers[$name] ) ? $this->handlers[$name] : false;
+ }
+
+ /**
+ * @since 1.0
+ *
+ * @param string $name
+ *
+ * @return boolean
+ */
+ public function isRegistered( $name ) {
+ return Hooks::isRegistered( $name );
+ }
+
+ private function registerCallbackHandlers( $configuration ) {
+
+ /**
+ * @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserFirstCallInit
+ */
+ $this->handlers['ParserFirstCallInit'] = function ( &$parser ) {
+ $defaultTheme = $GLOBALS['mermaidgDefaultTheme'];
+
+ $parser->setFunctionHook(
+ 'mermaid',
+ MermaidParserFunction::newCallback( $defaultTheme ),
+ 0
+ );
+
+ return true;
+ };
+
+ /**
+ * @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderGetConfigVars
+ */
+ $this->handlers['ResourceLoaderGetConfigVars'] = function ( &$vars ) {
+
+ $vars['mermaid'] = [
+ 'theme' => $GLOBALS['mermaidgDefaultTheme']
+ ];
+
+ return true;
+ };
+
+ /**
+ * @see https://www.mediawiki.org/wiki/Manual:Hooks/OutputPageParserOutput
+ */
+ $this->handlers['OutputPageParserOutput'] = function ( $out, $parserOutput ) {
+
+ $out->addModuleStyles( 'ext.mermaid.styles' );
+
+ if ( $parserOutput->getExtensionData( 'ext-mermaid' ) === null ||
+ $parserOutput->getExtensionData( 'ext-mermaid' ) === false ) {
+ return true;
+ }
+
+ $out->addModules( 'ext.mermaid' );
+
+ return true;
+ };
+ }
+
+}
diff --git a/www/wiki/extensions/Mermaid/src/MermaidParserFunction.php b/www/wiki/extensions/Mermaid/src/MermaidParserFunction.php
new file mode 100644
index 00000000..0697f0e7
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/src/MermaidParserFunction.php
@@ -0,0 +1,139 @@
+<?php
+
+namespace Mermaid;
+
+use Parser;
+use Html;
+
+/**
+ * @license GNU GPL v2+
+ * @since 1.0
+ *
+ * @author mwjames
+ */
+class MermaidParserFunction {
+
+ /**
+ * @var Parser
+ */
+ private $parser;
+
+ /**
+ * @var string
+ */
+ private $defaultTheme = '';
+
+ /**
+ * @since 1.1
+ *
+ * @param string $defaultTheme
+ *
+ * @return callable
+ */
+ public static function newCallback( $defaultTheme ) {
+
+ return function( $parser ) use ( $defaultTheme ) {
+ $mermaidParserFunction = new self(
+ $parser
+ );
+
+ $mermaidParserFunction->setDefaultTheme(
+ $defaultTheme
+ );
+
+ return $mermaidParserFunction->parse( func_get_args() );
+ };
+ }
+
+ /**
+ * @since 1.0
+ *
+ * @return Parser $parser
+ */
+ public function __construct( Parser $parser ) {
+ $this->parser = $parser;
+ }
+
+ /**
+ * @since 1.0
+ *
+ * @param string $defaultTheme
+ */
+ public function setDefaultTheme( $defaultTheme ) {
+ $this->defaultTheme = $defaultTheme;
+ }
+
+ /**
+ * @since 1.0
+ *
+ * @param array $params
+ *
+ * @return string
+ */
+ public function parse( array $params ) {
+
+ $class = 'ext-mermaid';
+ $parserOutput = $this->parser->getOutput();
+
+ if( isset( $params[0] ) && $params[0] instanceof \Parser ) {
+ array_shift( $params );
+ }
+
+ // Signal the OutputPageParserOutput hook
+ $parserOutput->setExtensionData(
+ 'ext-mermaid',
+ true
+ );
+
+ $parserOutput->addModuleStyles(
+ 'ext.mermaid.styles'
+ );
+
+ $parserOutput->addModules(
+ 'ext.mermaid'
+ );
+
+ $config = [
+ 'theme' => $this->defaultTheme
+ ];
+
+ foreach ( $params as $key => $param ) {
+
+ if ( strpos( $param, '=' ) !== false ) {
+ list( $k, $v ) = explode( '=', $param, 2 );
+
+ if ( $k === 'config.theme' ) {
+ $config['theme'] = $v;
+ unset( $params[$key] );
+ }
+
+ if ( $k === 'config.flowchart.curve' ) {
+ $config['flowchart'] = [ 'curve' => $v ];
+ unset( $params[$key] );
+ }
+ }
+ }
+
+ $content = implode( "|", $params );
+
+ return Html::rawElement(
+ 'div',
+ [
+ 'class' => $class,
+ 'data-mermaid' => json_encode(
+ [
+ 'content' => $content,
+ 'config' => $config
+ ]
+ )
+ ],
+ Html::rawElement(
+ 'div',
+ [
+ 'class' => 'mermaid-dots',
+ ]
+ )
+ );
+ }
+
+}
diff --git a/www/wiki/extensions/Mermaid/tests/bootstrap.php b/www/wiki/extensions/Mermaid/tests/bootstrap.php
new file mode 100644
index 00000000..7bbb37e3
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/tests/bootstrap.php
@@ -0,0 +1,31 @@
+<?php
+
+if ( PHP_SAPI !== 'cli' && PHP_SAPI !== 'phpdbg' ) {
+ die( 'Not an entry point' );
+}
+
+error_reporting( E_ALL | E_STRICT );
+date_default_timezone_set( 'UTC' );
+ini_set( 'display_errors', 1 );
+
+if ( !class_exists( 'Mermaid' ) || ( $version = Mermaid::getVersion() ) === null ) {
+ die( "\nMermaid is not available, please check your Composer or LocalSettings (wfLoadExtension).\n" );
+}
+
+print sprintf( "\n%-20s%s\n", "Mermaid: ", $version );
+
+if ( is_readable( $path = __DIR__ . '/../vendor/autoload.php' ) ) {
+ print sprintf( "%-20s%s\n", "MediaWiki:", $GLOBALS['wgVersion'] . " (Extension vendor autoloader)" );
+} elseif ( is_readable( $path = __DIR__ . '/../../../vendor/autoload.php' ) ) {
+ print sprintf( "%-20s%s\n", "MediaWiki:", $GLOBALS['wgVersion'] . " (MediaWiki vendor autoloader)" );
+} else {
+ die( 'To run tests it is required that packages are installed using Composer.' );
+}
+
+$dateTimeUtc = new \DateTime( 'now', new \DateTimeZone( 'UTC' ) );
+print sprintf( "\n%-20s%s\n\n", "Execution time:", $dateTimeUtc->format( 'Y-m-d h:i' ) );
+
+$autoloader = require $path;
+$autoloader->addPsr4( 'Mermaid\\Tests\\', __DIR__ . '/phpunit/Unit' );
+$autoloader->addPsr4( 'Mermaid\\Tests\\Integration\\', __DIR__ . '/phpunit/Integration' );
+unset( $autoloader );
diff --git a/www/wiki/extensions/Mermaid/tests/phpunit/Integration/I18nJsonFileIntegrityTest.php b/www/wiki/extensions/Mermaid/tests/phpunit/Integration/I18nJsonFileIntegrityTest.php
new file mode 100644
index 00000000..c5a1c4ae
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/tests/phpunit/Integration/I18nJsonFileIntegrityTest.php
@@ -0,0 +1,77 @@
+<?php
+
+namespace Mermaid\Tests\Integration;
+
+/**
+ * @group mermaid
+ * @group medium
+ *
+ * @license GNU GPL v2+
+ * @since 1.0
+ *
+ * @author mwjames
+ */
+class I18nJsonFileIntegrityTest extends \PHPUnit_Framework_TestCase {
+
+ /**
+ * @dataProvider i18nFileProvider
+ */
+ public function testI18NJsonDecodeEncode( $file ) {
+
+ $contents = file_get_contents( $file );
+
+ $this->assertInternalType(
+ 'array',
+ json_decode( $contents, true ),
+ 'Failed with ' . $this->getDescriptiveJsonError( json_last_error() ) . ' in ' . $file
+ );
+ }
+
+ public function i18nFileProvider() {
+
+ $provider = array();
+
+ $files = $this->findFilesForExtension(
+ $GLOBALS['wgMessagesDirs']['Mermaid'],
+ 'json'
+ );
+
+ foreach ( $files as $file ) {
+ $provider[] = array( $file );
+ }
+
+ return $provider;
+ }
+
+ private function findFilesForExtension( $path, $extension ) {
+
+ $files = array();
+
+ $directoryIterator = new \RecursiveDirectoryIterator(
+ str_replace( array( '\\', '/' ), DIRECTORY_SEPARATOR, $path )
+ );
+
+ foreach ( new \RecursiveIteratorIterator( $directoryIterator ) as $fileInfo ) {
+ if ( strtolower( substr( $fileInfo->getFilename(), -( strlen( $extension ) + 1 ) ) ) === ( '.' . $extension ) ) {
+ $files[$fileInfo->getFilename()] = $fileInfo->getPathname();
+ }
+ }
+
+ return $files;
+ }
+
+ private function getDescriptiveJsonError( $errorCode ) {
+
+ $errorMessages = array(
+ JSON_ERROR_NONE => '',
+ JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch, malformed JSON',
+ JSON_ERROR_CTRL_CHAR => 'Unexpected control character found, possibly incorrectly encoded',
+ JSON_ERROR_SYNTAX => 'Syntax error, malformed JSON',
+ JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded',
+ JSON_ERROR_DEPTH => 'The maximum stack depth has been exceeded'
+ );
+
+ return $errorMessages[$errorCode];
+ }
+
+}
diff --git a/www/wiki/extensions/Mermaid/tests/phpunit/Unit/HookRegistryTest.php b/www/wiki/extensions/Mermaid/tests/phpunit/Unit/HookRegistryTest.php
new file mode 100644
index 00000000..2c98737a
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/tests/phpunit/Unit/HookRegistryTest.php
@@ -0,0 +1,119 @@
+<?php
+
+namespace Mermaid\Tests;
+
+use Mermaid\HookRegistry;
+use Title;
+
+/**
+ * @covers \Mermaid\HookRegistry
+ * @group mermaid
+ *
+ * @license GNU GPL v2+
+ * @since 1.0
+ *
+ * @author mwjames
+ */
+class HookRegistryTest extends \PHPUnit_Framework_TestCase {
+
+ public function testCanConstruct() {
+
+ $this->assertInstanceOf(
+ HookRegistry::class,
+ new HookRegistry()
+ );
+ }
+
+ public function testRegister() {
+
+ $title = Title::newFromText( __METHOD__ );
+
+ $parserOutput = $this->getMockBuilder( '\ParserOutput' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $parser = $this->getMockBuilder( '\Parser' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $parser->expects( $this->any() )
+ ->method( 'getTitle' )
+ ->will( $this->returnValue( $title ) );
+
+ $parser->expects( $this->any() )
+ ->method( 'getOutput' )
+ ->will( $this->returnValue( $parserOutput ) );
+
+ $instance = new HookRegistry();
+ $instance->deregister();
+ $instance->register();
+
+ $this->doTestParserFirstCallInit( $instance, $parser );
+ $this->doTestResourceLoaderGetConfigVars( $instance );
+ $this->doTestOutputPageParserOutput( $instance );
+ }
+
+ public function doTestParserFirstCallInit( $instance, $parser ) {
+
+ $handler = 'ParserFirstCallInit';
+
+ $this->assertTrue(
+ $instance->isRegistered( $handler )
+ );
+
+ $this->assertThatHookIsExcutable(
+ $instance->getHandlerFor( $handler ),
+ array( &$parser )
+ );
+ }
+
+ public function doTestResourceLoaderGetConfigVars( $instance ) {
+
+ $handler = 'ResourceLoaderGetConfigVars';
+
+ $this->assertTrue(
+ $instance->isRegistered( $handler )
+ );
+
+ $vars = array();
+
+ $this->assertThatHookIsExcutable(
+ $instance->getHandlerFor( $handler ),
+ array( &$vars )
+ );
+ }
+
+ public function doTestOutputPageParserOutput( $instance ) {
+
+ $parserOutput = $this->getMockBuilder( '\ParserOutput' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $parserOutput->expects( $this->any() )
+ ->method( 'getExtensionData' )
+ ->will( $this->returnValue( true ) );
+
+ $outputPage = $this->getMockBuilder( '\OutputPage' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $handler = 'OutputPageParserOutput';
+
+ $this->assertTrue(
+ $instance->isRegistered( $handler )
+ );
+
+ $this->assertThatHookIsExcutable(
+ $instance->getHandlerFor( $handler ),
+ array( $outputPage, $parserOutput )
+ );
+ }
+
+ private function assertThatHookIsExcutable( \Closure $handler, $arguments ) {
+ $this->assertInternalType(
+ 'boolean',
+ call_user_func_array( $handler, $arguments )
+ );
+ }
+
+}
diff --git a/www/wiki/extensions/Mermaid/tests/phpunit/Unit/MermaidParserFunctionTest.php b/www/wiki/extensions/Mermaid/tests/phpunit/Unit/MermaidParserFunctionTest.php
new file mode 100644
index 00000000..2a819c17
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/tests/phpunit/Unit/MermaidParserFunctionTest.php
@@ -0,0 +1,109 @@
+<?php
+
+namespace Mermaid\Tests;
+
+use Mermaid\MermaidParserFunction;
+
+/**
+ * @covers \Mermaid\MermaidParserFunction
+ * @group mermaid
+ *
+ * @license GNU GPL v2+
+ * @since 1.0
+ *
+ * @author mwjames
+ */
+class MermaidParserFunctionTest extends \PHPUnit_Framework_TestCase {
+
+ public function testCanConstruct() {
+
+ $parser = $this->getMockBuilder( '\Parser' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $this->assertInstanceOf(
+ MermaidParserFunction::class,
+ new MermaidParserFunction( $parser )
+ );
+ }
+
+ public function testInitCallback() {
+
+ $callback = MermaidParserFunction::newCallback( 'foo' );
+
+ $this->assertInstanceOf(
+ '\Closure',
+ $callback
+ );
+
+ $parserOutput = $this->getMockBuilder( '\ParserOutput' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $parser = $this->getMockBuilder( '\Parser' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $parser->expects( $this->any() )
+ ->method( 'getOutput' )
+ ->will( $this->returnValue( $parserOutput ) );
+
+ $this->assertNotEmpty(
+ call_user_func_array( $callback, [ $parser ] )
+ );
+ }
+
+ /**
+ * @dataProvider textProvider
+ */
+ public function testParse( $text, $expected ) {
+
+ $parserOutput = $this->getMockBuilder( '\ParserOutput' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $parserOutput->expects( $this->once() )
+ ->method( 'setExtensionData' )
+ ->with(
+ $this->equalTo( 'ext-mermaid' ),
+ $this->equalTo( true ) );
+
+ $parser = $this->getMockBuilder( '\Parser' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $parser->expects( $this->any() )
+ ->method( 'getOutput' )
+ ->will( $this->returnValue( $parserOutput ) );
+
+ $instance = new MermaidParserFunction(
+ $parser
+ );
+
+ $this->assertContains(
+ $expected,
+ $instance->parse( $text )
+ );
+ }
+
+ public function textProvider() {
+
+ yield [
+ [ 'sequenceDiagram...', 'config.theme=foo' ],
+ 'class="ext-mermaid" data-mermaid="{&quot;content&quot;:&quot;sequenceDiagram...&quot;,&quot;config&quot;:{&quot;theme&quot;:&quot;foo&quot;}}"><div class="mermaid-dots"></div></div>'
+ ];
+
+ // [ ... ]
+ yield [
+ [ 'sequenceDiagram id1["This is the (text) in the box"]', 'config.theme=foo' ],
+ 'data-mermaid="{&quot;content&quot;:&quot;sequenceDiagram id1[\&quot;This is the (text) in the box\&quot;]'
+ ];
+
+ // |
+ yield [
+ [ 'A[Hard edge] -->|Link text| B(Round edge)' ],
+ 'data-mermaid="{&quot;content&quot;:&quot;A[Hard edge] --&gt;|Link text| B(Round edge)&quot;'
+ ];
+ }
+
+}
diff --git a/www/wiki/extensions/Mermaid/tests/travis/install-mediawiki.sh b/www/wiki/extensions/Mermaid/tests/travis/install-mediawiki.sh
new file mode 100644
index 00000000..0fe25fb1
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/tests/travis/install-mediawiki.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+set -ex
+
+cd ..
+
+## Use sha (master@5cc1f1d) to download a particular commit to avoid breakages
+## introduced by MediaWiki core
+if [[ "$MW" == *@* ]]
+then
+ arrMw=(${MW//@/ })
+ MW=${arrMw[0]}
+ SOURCE=${arrMw[1]}
+else
+ MW=$MW
+ SOURCE=$MW
+fi
+
+wget https://github.com/wikimedia/mediawiki/archive/$SOURCE.tar.gz -O $MW.tar.gz
+
+tar -zxf $MW.tar.gz
+mv mediawiki-* mw
+
+cd mw
+
+## MW 1.25+ requires Psr\Logger
+if [ -f composer.json ]
+then
+ composer self-update
+ composer install --prefer-source
+fi
+
+if [ "$DB" == "postgres" ]
+then
+ # See #458
+ sudo /etc/init.d/postgresql stop
+ sudo /etc/init.d/postgresql start
+
+ psql -c 'create database its_a_mw;' -U postgres
+ php maintenance/install.php --dbtype $DB --dbuser postgres --dbname its_a_mw --pass nyan TravisWiki admin --scriptpath /TravisWiki
+else
+ mysql -e 'create database its_a_mw;'
+ php maintenance/install.php --dbtype $DB --dbuser root --dbname its_a_mw --dbpath $(pwd) --pass nyan TravisWiki admin --scriptpath /TravisWiki
+fi
diff --git a/www/wiki/extensions/Mermaid/tests/travis/install-mermaid.sh b/www/wiki/extensions/Mermaid/tests/travis/install-mermaid.sh
new file mode 100644
index 00000000..d87aa25a
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/tests/travis/install-mermaid.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+set -ex
+
+BASE_PATH=$(pwd)
+MW_INSTALL_PATH=$BASE_PATH/../mw
+
+# Run Composer installation from the MW root directory
+function installToMediaWikiRoot {
+ echo -e "Running MW root composer install build on $TRAVIS_BRANCH \n"
+
+ cd $MW_INSTALL_PATH
+
+ if [ "$PHPUNIT" != "" ]
+ then
+ composer require 'phpunit/phpunit='$PHPUNIT --update-with-dependencies
+ else
+ composer require 'phpunit/phpunit=4.8.*' --update-with-dependencies
+ fi
+
+ if [ "$MERMAID" != "" ]
+ then
+ composer require 'mediawiki/mermaid='$MERMAID --update-with-dependencies
+ else
+ composer init --stability dev
+ composer require "mediawiki/mermaid:dev-master" --dev --update-with-dependencies
+
+ cd extensions
+ cd Mermaid
+
+ # Pull request number, "false" if it's not a pull request
+ # After the install via composer an additional get fetch is carried out to
+ # update th repository to make sure that the latests code changes are
+ # deployed for testing
+ if [ "$TRAVIS_PULL_REQUEST" != "false" ]
+ then
+ git fetch origin +refs/pull/"$TRAVIS_PULL_REQUEST"/merge:
+ git checkout -qf FETCH_HEAD
+ else
+ git fetch origin "$TRAVIS_BRANCH"
+ git checkout -qf FETCH_HEAD
+ fi
+
+ cd ../..
+ fi
+
+ # Rebuild the class map for added classes during git fetch
+ composer dump-autoload
+}
+
+function updateConfiguration {
+
+ cd $MW_INSTALL_PATH
+
+ # Site language
+ if [ "$SITELANG" != "" ]
+ then
+ echo '$wgLanguageCode = "'$SITELANG'";' >> LocalSettings.php
+ fi
+
+ echo 'error_reporting(E_ALL| E_STRICT);' >> LocalSettings.php
+ echo 'ini_set("display_errors", 1);' >> LocalSettings.php
+ echo '$wgShowExceptionDetails = true;' >> LocalSettings.php
+ echo '$wgDevelopmentWarnings = true;' >> LocalSettings.php
+ echo "putenv( 'MW_INSTALL_PATH=$(pwd)' );" >> LocalSettings.php
+
+ echo "wfLoadExtension( 'Mermaid' );" >> LocalSettings.php
+
+ php maintenance/update.php --quick
+}
+
+installToMediaWikiRoot
+updateConfiguration
diff --git a/www/wiki/extensions/Mermaid/tests/travis/run-tests.sh b/www/wiki/extensions/Mermaid/tests/travis/run-tests.sh
new file mode 100644
index 00000000..7f37b652
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/tests/travis/run-tests.sh
@@ -0,0 +1,14 @@
+#! /bin/bash
+set -ex
+
+BASE_PATH=$(pwd)
+MW_INSTALL_PATH=$BASE_PATH/../mw
+
+cd $MW_INSTALL_PATH/extensions/Mermaid
+
+if [ "$TYPE" == "coverage" ]
+then
+ composer phpunit -- --coverage-clover $BASE_PATH/build/coverage.clover
+else
+ composer phpunit
+fi
diff --git a/www/wiki/extensions/Mermaid/tests/travis/upload-coverage-report.sh b/www/wiki/extensions/Mermaid/tests/travis/upload-coverage-report.sh
new file mode 100644
index 00000000..aff95cf7
--- /dev/null
+++ b/www/wiki/extensions/Mermaid/tests/travis/upload-coverage-report.sh
@@ -0,0 +1,10 @@
+#! /bin/bash
+set -ex
+
+BASE_PATH=$(pwd)
+
+if [ "$TYPE" == "coverage" ]
+then
+ wget https://scrutinizer-ci.com/ocular.phar
+ php ocular.phar code-coverage:upload --format=php-clover $BASE_PATH/build/coverage.clover
+fi \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/.scrutinizer.yml b/www/wiki/extensions/ModernTimeline/.scrutinizer.yml
new file mode 100644
index 00000000..cad7baac
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/.scrutinizer.yml
@@ -0,0 +1,16 @@
+inherit: true
+
+tools:
+ external_code_coverage: true
+ php_code_sniffer: true
+ php_cpd: true
+ php_cs_fixer: true
+ php_loc: true
+ php_mess_detector: true
+ php_pdepend: true
+ php_analyzer: true
+ sensiolabs_security_checker: true
+
+filter:
+ excluded_paths:
+ - 'vendor/*' \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/.travis.install.sh b/www/wiki/extensions/ModernTimeline/.travis.install.sh
new file mode 100644
index 00000000..60f86a1e
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/.travis.install.sh
@@ -0,0 +1,46 @@
+#! /bin/bash
+
+set -x
+
+originalDirectory=$(pwd)
+
+cd ..
+
+wget https://github.com/wikimedia/mediawiki-core/archive/$MW.tar.gz
+tar -zxf $MW.tar.gz
+mv mediawiki-$MW phase3
+
+cd phase3
+
+composer install --prefer-source
+
+mysql -e 'create database its_a_mw;'
+php maintenance/install.php --dbtype $DBTYPE --dbuser root --dbname its_a_mw --dbpath $(pwd) --pass nyan TravisWiki admin --scriptpath /TravisWiki
+
+cd extensions
+cp -r $originalDirectory ModernTimeline
+cd ModernTimeline
+composer install --prefer-source
+cd ..
+cd ..
+
+if [ ! -z $SMW ]
+then
+ composer require "mediawiki/semantic-media-wiki=$SMW" --prefer-source
+fi
+
+echo 'wfLoadExtension( "ModernTimeline" );' >> LocalSettings.php
+
+if [ ! -z $SMW ]
+then
+ echo 'wfLoadExtension( "SemanticMediaWiki" );' >> LocalSettings.php
+fi
+
+echo 'error_reporting(E_ALL| E_STRICT);' >> LocalSettings.php
+echo 'ini_set("display_errors", 1);' >> LocalSettings.php
+echo '$wgShowExceptionDetails = true;' >> LocalSettings.php
+echo '$wgShowDBErrorBacktrace = true;' >> LocalSettings.php
+echo '$wgDevelopmentWarnings = true;' >> LocalSettings.php
+echo "putenv( 'MW_INSTALL_PATH=$(pwd)' );" >> LocalSettings.php
+
+php maintenance/update.php --quick
diff --git a/www/wiki/extensions/ModernTimeline/.travis.yml b/www/wiki/extensions/ModernTimeline/.travis.yml
new file mode 100644
index 00000000..fdea0428
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/.travis.yml
@@ -0,0 +1,32 @@
+language: php
+
+sudo: false
+
+matrix:
+ fast_finish: true
+ include:
+ - env: DBTYPE=sqlite; MW=1.31.3; SMW=dev-master
+ php: 7.1
+ - env: DBTYPE=sqlite; MW=1.31.3; SMW=3.0.0
+ php: 7.1
+ - env: DBTYPE=sqlite; MW=1.31.3; SMW=3.0.0; TYPE=coverage
+ php: 7.3
+ allow_failures:
+ - env: DBTYPE=sqlite; MW=1.31.3; SMW=dev-master
+ - env: DBTYPE=sqlite; MW=1.31.3; SMW=3.0.0; TYPE=coverage
+
+install:
+ - travis_retry composer self-update
+ - bash .travis.install.sh
+
+script: if [[ "$TYPE" != "coverage" ]]; then ../phase3/tests/phpunit/phpunit.php -c ../phase3/extensions/ModernTimeline/phpunit.xml.dist; fi
+
+after_success:
+ - if [[ "$TYPE" != "coverage" ]]; then exit 0; fi
+ - ../phase3/tests/phpunit/phpunit.php -c ../phase3/extensions/ModernTimeline/phpunit.xml.dist --coverage-clover coverage.clover
+ - wget https://scrutinizer-ci.com/ocular.phar
+ - php ocular.phar code-coverage:upload --format=php-clover coverage.clover
+
+cache:
+ directories:
+ - $HOME/.composer/cache
diff --git a/www/wiki/extensions/ModernTimeline/COPYING b/www/wiki/extensions/ModernTimeline/COPYING
new file mode 100644
index 00000000..ebba08a4
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/COPYING
@@ -0,0 +1,347 @@
+The license text below "----" applies to all files within this distribution, other
+than those that are in a directory which contains files named "LICENSE" or
+"COPYING", or a subdirectory thereof. For those files, the license text contained in
+said file overrides any license information contained in directories of smaller depth.
+Alternative licenses are typically used for software that is provided by external
+parties, and merely packaged with this software for convenience.
+----
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/www/wiki/extensions/ModernTimeline/README.md b/www/wiki/extensions/ModernTimeline/README.md
new file mode 100644
index 00000000..30f99332
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/README.md
@@ -0,0 +1,150 @@
+# Modern Timeline
+
+[![Build Status](https://travis-ci.org/ProfessionalWiki/ModernTimeline.svg?branch=master)](https://travis-ci.org/ProfessionalWiki/ModernTimeline)
+[![Code Coverage](https://scrutinizer-ci.com/g/ProfessionalWiki/ModernTimeline/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/ProfessionalWiki/ModernTimeline/?branch=master)
+[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/ProfessionalWiki/ModernTimeline/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/ProfessionalWiki/ModernTimeline/?branch=master)
+[![Latest Stable Version](https://poser.pugx.org/professional-wiki/modern-timeline/version.png)](https://packagist.org/packages/professional-wiki/modern-timeline)
+[![Download count](https://poser.pugx.org/professional-wiki/modern-timeline/d/total.png)](https://packagist.org/packages/professional-wiki/modern-timeline)
+
+The **Modern Timeline** extension provides a modern timeline visualization for
+[Semantic MediaWiki](https://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki) as a
+[result format](https://www.semantic-mediawiki.org/wiki/Help:Result_formats).
+
+Modern Timeline was created by [Professional Wiki](https://professional.wiki/)
+and funded by [KDZ - Centre for Public Administration Research](https://www.kdz.eu/).
+
+## Platform requirements
+
+* PHP 7.1 or later
+* MediaWiki 1.31.x up to 1.34.x
+* Semantic MediaWiki 3.0.x or later
+
+## Versions
+
+See the [RELEASE-NOTES](/RELEASE-NOTES.md) for more information on the different versions of Modern Timeline.
+
+## Installation
+
+The recommended way to install Modern Timeline is using [Composer](https://getcomposer.org) with
+[MediaWiki's built-in support for Composer](https://www.mediawiki.org/wiki/Composer).
+
+Note that the required extension Semantic MediaWiki must be installed first according to the installation
+instructions provided.
+
+### Step 1
+
+Change to the base directory of your MediaWiki installation. This is where the "LocalSettings.php"
+file is located. If you have not yet installed Composer do it now by running the following command
+in your shell:
+
+ wget https://getcomposer.org/composer.phar
+
+### Step 2
+
+If you do not have a "composer.local.json" file yet, create one and add the following content to it:
+
+```
+{
+ "require": {
+ "professional-wiki/modern-timeline": "~1.0"
+ }
+}
+```
+
+If you already have a "composer.local.json" file add the following line to the end of the "require"
+section in your file:
+
+ "professional-wiki/modern-timeline": "~1.0"
+
+Remember to add a comma to the end of the preceding line in this section.
+
+### Step 3
+
+Run the following command in your shell:
+
+ php composer.phar update --no-dev
+
+Note if you have Git installed on your system add the `--prefer-source` flag to the above command. Also
+note that it may be necessary to run this command twice. If unsure do it twice right away.
+
+### Step 4
+
+Add the following line to the end of your "LocalSettings.php" file:
+
+ wfLoadExtension( 'ModernTimeline' );
+
+### Verify installation success
+
+As final step, you can verify Modern Timeline got installed by looking at the "Special:Version" page on your
+wiki and check that it is listed in the semantic extensions section.
+
+
+## Usage
+
+See also live demos at the following location:
+[https://starter.professional.wiki/page/Category:Modern_Timeline_examples](https://starter.professional.wiki/page/Category:Modern_Timeline_examples)
+
+The first date printout is used as date for the timeline events:
+
+```
+{{#ask:
+ [[Modification date::+]]
+ |format=moderntimeline
+ |?Modification date
+}}
+```
+
+If a second date printout is present it is used as end date and the event is displayed as a range:
+
+ ```
+ {{#ask:
+ [[Start date::+]]
+ |format=moderntimeline
+ |?Start date
+ |?End date
+ }}
+ ```
+
+Display and behaviour of the timeline can be changed via several output parameters:
+
+```
+{{#ask:
+ [[Modification date::+]]
+ |format=moderntimeline
+ |?Modification date
+ |width=75%
+ |height=500px
+ |start at end=on
+}}
+```
+
+A full list of supported output parameters can be obtained in wiki via the `smwdoc` parser function:
+
+```
+{{#smwdoc: moderntimeline }}
+```
+
+## Limitations
+
+* The template parameter is not supported on "Special:Ask"
+* The timeline style does not automatically match that of the wiki
+* The timeline language does not automatically match that of the wiki
+
+[Professional MediaWiki development](https://professional.wiki/en/services#development) is available via
+[Professional Wiki](https://professional.wiki/).
+
+## Contribution and support
+
+If you want to contribute work to the project please subscribe to the developers mailing list and
+have a look at the contribution guideline.
+
+* [File an issue](https://github.com/ProfessionalWiki/ModernTimeline/issues)
+* [Submit a pull request](https://github.com/ProfessionalWiki/ModernTimeline/pulls)
+* Ask a question on [the mailing list](https://www.semantic-mediawiki.org/wiki/Mailing_list)
+
+[Professional MediaWiki support](https://professional.wiki/en/support) is available via
+[Professional Wiki](https://professional.wiki/).
+
+## License
+
+[GNU General Public License v2.0 or later (GPL-2.0-or-later)](/COPYING).
diff --git a/www/wiki/extensions/ModernTimeline/RELEASE-NOTES.md b/www/wiki/extensions/ModernTimeline/RELEASE-NOTES.md
new file mode 100644
index 00000000..1e63fc55
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/RELEASE-NOTES.md
@@ -0,0 +1,11 @@
+These are the RELEASE NOTES for the **Modern Timeline** extension. See the
+[README](/README.md) for further information on platform requirements, installation
+and usage.
+
+## Version 1.0.0
+
+Released on August 16th, 2019.
+
+Initial release with a [TimelineJS3](https://github.com/NUKnightLab/TimelineJS3)
+based result format featuring 12 customization parameters, template support and
+date range support. \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/composer.json b/www/wiki/extensions/ModernTimeline/composer.json
new file mode 100644
index 00000000..e54fcb31
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/composer.json
@@ -0,0 +1,44 @@
+{
+ "name": "professional-wiki/modern-timeline",
+ "type": "mediawiki-extension",
+ "description": "Adds a modern timeline visualization as Semantic MediaWiki result format",
+ "keywords": [
+ "MediaWiki",
+ "Semantic MediaWiki",
+ "Timeline",
+ "Result format",
+ "wiki",
+ "visualization",
+ "TimelineJS3"
+ ],
+ "homepage": "https://github.com/ProfessionalWiki/ModernTimeline",
+ "license": "GPL-2.0-or-later",
+ "authors": [
+ {
+ "name": "Professional.Wiki",
+ "email": "info@professional.wiki",
+ "homepage": "https://professional.wiki",
+ "role": "Creator"
+ },
+ {
+ "name": "Jeroen De Dauw",
+ "email": "jeroendedauw@gmail.com",
+ "homepage": "https://www.entropywins.wtf",
+ "role": "Creator and lead developer"
+ }
+ ],
+ "support": {
+ "source": "https://github.com/ProfessionalWiki/ModernTimeline"
+ },
+ "require": {
+ "php": ">=7.1",
+ "composer/installers": "^1.0.1",
+ "param-processor/param-processor": "~1.10"
+ },
+ "autoload": {
+ "psr-4": {
+ "ModernTimeline\\": "src/",
+ "ModernTimeline\\Tests\\": "tests/"
+ }
+ }
+}
diff --git a/www/wiki/extensions/ModernTimeline/docs/ISSUE_TEMPLATE.md b/www/wiki/extensions/ModernTimeline/docs/ISSUE_TEMPLATE.md
new file mode 100644
index 00000000..b4f6f2e4
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/docs/ISSUE_TEMPLATE.md
@@ -0,0 +1,30 @@
+### Setup
+
+- MW version:
+- PHP version:
+- DB (MySQL etc.):
+- SMW version:
+- MT version:
+- Browsers and versions (if applicable):
+
+### Issue
+
+...context and general description...
+
+**Steps to reproduce**
+
+(recommendation is to use the [sandbox](https://sandbox.semantic-mediawiki.org))
+
+1. ...
+2. ...
+3. ...
+
+**Expected result:** ...
+
+**Observed result:** ...
+
+**Stacktrace**
+
+```
+...
+```
diff --git a/www/wiki/extensions/ModernTimeline/extension.json b/www/wiki/extensions/ModernTimeline/extension.json
new file mode 100644
index 00000000..27da0622
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/extension.json
@@ -0,0 +1,106 @@
+{
+ "name": "ModernTimeline",
+
+ "version": "1.0.0",
+
+ "author": [
+ "[https://professional.wiki/ <span style=\"color: #df2e2c \">Professional</span>.Wiki]",
+ "[https://www.entropywins.wtf/mediawiki Jeroen De Dauw]"
+ ],
+
+ "url": "https://github.com/ProfessionalWiki/ModernTimeline#modern-timeline",
+
+ "namemsg": "modern-timeline-name",
+
+ "descriptionmsg": "modern-timeline-desc",
+
+ "license-name": "GPL-2.0-or-later",
+
+ "type": "semantic",
+
+ "requires": {
+ "MediaWiki": ">= 1.31.0",
+ "extensions": {
+ "SemanticMediaWiki": ">= 3.0.0"
+ }
+ },
+
+ "config": {
+ "ModernTimelineWidth": {
+ "value": "100%"
+ },
+ "ModernTimelineHeight": {
+ "value": "400px"
+ },
+ "ModernTimelineBookmark": {
+ "value": false
+ },
+ "ModernTimelineBackground": {
+ "value": "white"
+ },
+ "ModernTimelineScaleFactor": {
+ "value": 2
+ },
+ "ModernTimelinePosition": {
+ "value": "bottom"
+ },
+ "ModernTimelineTickWidth": {
+ "value": 100
+ },
+ "ModernTimelineStartSlide": {
+ "value": 1
+ },
+ "ModernTimelineStartAtEnd": {
+ "value": false
+ },
+ "ModernTimelineTransitionDuration": {
+ "value": 1000
+ },
+ "ModernTimelineNavHeight": {
+ "value": "200px"
+ },
+ "ModernTimelineTemplate": {
+ "value": ""
+ }
+ },
+
+ "MessagesDirs": {
+ "ModernTimeline": [
+ "i18n"
+ ]
+ },
+
+ "ResourceModules": {
+ "ext.modern.timeline": {
+ "scripts": [
+ "resources/vendor/timeline.js",
+ "resources/modernTimeline.js"
+ ],
+ "styles": [
+ "resources/vendor/timeline.css",
+ "resources/vendor/font.default.css",
+ "resources/modernTimeline.css"
+ ],
+ "targets": [ "desktop", "mobile" ],
+ "position": "bottom"
+ }
+ },
+
+ "ResourceFileModulePaths": {
+ "localBasePath": "",
+ "remoteExtPath": "ModernTimeline"
+ },
+
+ "AutoloadClasses": {
+ "ModernTimeline\\ModernTimelineSetup": "src/ModernTimelineSetup.php",
+ "ModernTimeline\\ModernTimelinePrinter": "src/ModernTimelinePrinter.php"
+ },
+
+ "ExtensionFunctions": [
+ "ModernTimeline\\ModernTimelineSetup::onExtensionFunction"
+ ],
+
+ "load_composer_autoloader": true,
+
+ "manifest_version": 2
+}
diff --git a/www/wiki/extensions/ModernTimeline/i18n/ar.json b/www/wiki/extensions/ModernTimeline/i18n/ar.json
new file mode 100644
index 00000000..a793d196
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/i18n/ar.json
@@ -0,0 +1,21 @@
+{
+ "@metadata": {
+ "authors": [
+ "ديفيد"
+ ]
+ },
+ "modern-timeline-desc": "يوفر تصورا زمنيا حديثا لميدياويكي الدلالي",
+ "modern-timeline-param-width": "عرض الجدول الزمني ب%، يمكن أيضا تحديده بpx وem وex",
+ "modern-timeline-param-height": "ارتفاع الخط الزمني بالبكسل. يمكن أيضا تحديده بem وex",
+ "modern-timeline-param-bookmark": "اجعل الخط الزمني مرجعيًا عبر مصار الصفحة",
+ "modern-timeline-param-background": "لون الخلفية لشرائح الخط الزمني",
+ "modern-timeline-param-scale-factor": "عرض الجدول الزمني بعرض الشاشة في العرض التقديمي الأول",
+ "modern-timeline-param-position": "عرض الجدول الزمني في الأعلى أو في الأسفل",
+ "modern-timeline-param-tick-width": "المسافة المثلى (بالبكسل) بين علامات التجزئة على المحور",
+ "modern-timeline-param-start-slide": "الشريحة الأولى لعرضها عند تحميل الجدول الزمني",
+ "modern-timeline-param-start-at-end": "أبدا بشريحة الجدول الزمني الأخيرة",
+ "modern-timeline-param-transition-duration": "انتقال الشريحة بوحدات الميلي ثانية",
+ "modern-timeline-param-navigation-height": "ارتفاع قسم التنقل في المخطط الزمني ب٪ أو البكسل",
+ "modern-timeline-param-template": "اسم قالب لإظهار مساحة الشريحة به",
+ "modern-timeline-format-name": "الجدول الزمني الحديث"
+}
diff --git a/www/wiki/extensions/ModernTimeline/i18n/de.json b/www/wiki/extensions/ModernTimeline/i18n/de.json
new file mode 100644
index 00000000..48a87078
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/i18n/de.json
@@ -0,0 +1,22 @@
+{
+ "@metadata": {
+ "authors": [
+ "Karsten Hoffmeyer",
+ "Kghbln"
+ ]
+ },
+ "modern-timeline-desc": "Stellt eine moderne Zeitleistenvisualisierung als Ergebnisformat bereit",
+ "modern-timeline-param-width": "Legt fest, wie breit die Zeitleiste sein soll (in %). Mögliche Maßeinheiten: %, px, em und ex",
+ "modern-timeline-param-height": "Legt fest, wie hoch die Zeitleiste sein soll (in px). Mögliche Maßeinheiten: px, em und ex",
+ "modern-timeline-param-bookmark": "Legt fest, ob für die Zeitleiste ein Lesezeichen als URL der Seite hinzugefügt werden kann",
+ "modern-timeline-param-background": "Legt fest, welche Hintergrundfarbe die Zeitleiste haben soll (Farbname)",
+ "modern-timeline-param-scale-factor": "Legt fest, welchen Skalierungsfaktor in Bildschirmweiten die Zeitleiste als Erstes haben soll",
+ "modern-timeline-param-position": "Legt fest, ob die Navigations oberhalb oder unterhalb der Zeitleiste angezeigt werden soll. Mögliche Werte: 'bottom' und 'top'",
+ "modern-timeline-param-tick-width": "Legt fest, welches die optimale Entfernung zwischen den Zeitpunkten auf der Achse der Zeitleiste sein soll (in px)",
+ "modern-timeline-param-start-slide": "Legt fest, welches Element der Zeitleiste als Erstes angezeigt werden soll",
+ "modern-timeline-param-start-at-end": "Legt fest, dass das letzte Element der Zeitleiste bei der erstmaligen Anzeige verwendet werden soll",
+ "modern-timeline-param-transition-duration": "Legt fest, wie viele Millisekunden zwischen dem Wechseln der Anzeige einzelner Elemente der Zeitleiste vergehen sollen",
+ "modern-timeline-param-navigation-height": "Legt fest, wie hoch der Navigationsbereich der Zeitleiste sein soll (in %). Mögliche Maßeinheiten: % und px",
+ "modern-timeline-param-template": "Legt fest, welche Vorlage zum Anzeigen der Zeitleiste verwendet werden soll",
+ "modern-timeline-format-name": "Zeit (moderne Zeitleiste)"
+}
diff --git a/www/wiki/extensions/ModernTimeline/i18n/en.json b/www/wiki/extensions/ModernTimeline/i18n/en.json
new file mode 100644
index 00000000..5d36d8d2
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/i18n/en.json
@@ -0,0 +1,25 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jeroen De Dauw",
+ "Karsten Hoffmeyer"
+ ]
+ },
+ "modern-timeline-name": "Modern Timeline",
+ "modern-timeline-desc": "Provides a modern timeline visualization for Semantic MediaWiki",
+
+ "modern-timeline-param-width": "Timeline width in %. Can also be specified in px, em and ex",
+ "modern-timeline-param-height": "Timeline height in pixels. Can also be specified in em and ex",
+ "modern-timeline-param-bookmark": "Make the timeline bookmarkable via the page URL",
+ "modern-timeline-param-background": "Background color for the timeline slides",
+ "modern-timeline-param-scale-factor": "Timeline width in screen widths at first presentation",
+ "modern-timeline-param-position": "Display the timeline navigation at the top or at the bottom",
+ "modern-timeline-param-tick-width": "Optimal distance (in pixels) between ticks on the axis",
+ "modern-timeline-param-start-slide": "The first slide to display when the timeline is loaded",
+ "modern-timeline-param-start-at-end": "Start with the last timeline slide",
+ "modern-timeline-param-transition-duration": "Slide transition in milliseconds",
+ "modern-timeline-param-navigation-height": "Height of the timeline navigation section in % or px",
+ "modern-timeline-param-template": "Name of a template to show the slide area with",
+
+ "modern-timeline-format-name": "Modern timeline"
+}
diff --git a/www/wiki/extensions/ModernTimeline/i18n/qqq.json b/www/wiki/extensions/ModernTimeline/i18n/qqq.json
new file mode 100644
index 00000000..0dcd4a68
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/i18n/qqq.json
@@ -0,0 +1,23 @@
+{
+ "@metadata": {
+ "authors": [
+ "Jeroen De Dauw",
+ "Karsten Hoffmeyer"
+ ]
+ },
+ "modern-timeline-name": "{{Name}}",
+ "modern-timeline-desc": "{{Desc|name=Modern Timeline|url=https://github.com/ProfessionalWiki/ModernTimeline}}",
+ "modern-timeline-param-width": "{{Doc-paramdesc|width}}",
+ "modern-timeline-param-height": "{{Doc-paramdesc|height}}",
+ "modern-timeline-param-bookmark": "{{Doc-paramdesc|bookmark}}",
+ "modern-timeline-param-background": "{{Doc-paramdesc|background}}",
+ "modern-timeline-param-scale-factor": "{{Doc-paramdesc|scale-factor}}",
+ "modern-timeline-param-position": "{{Doc-paramdesc|position}}",
+ "modern-timeline-param-tick-width": "{{Doc-paramdesc|tick-width}}",
+ "modern-timeline-param-start-slide": "{{Doc-paramdesc|start-slide}}",
+ "modern-timeline-param-start-at-end": "{{Doc-paramdesc|start-at-end}}",
+ "modern-timeline-param-transition-duration": "{{Doc-paramdesc|transition-duration}}",
+ "modern-timeline-param-navigation-height": "{{Doc-paramdesc|navigation-height}}",
+ "modern-timeline-param-template": "{{Doc-paramdesc|template}}",
+ "modern-timeline-format-name": "{{Doc-smwformat}}"
+}
diff --git a/www/wiki/extensions/ModernTimeline/phpunit.xml.dist b/www/wiki/extensions/ModernTimeline/phpunit.xml.dist
new file mode 100644
index 00000000..9b8e8efd
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/phpunit.xml.dist
@@ -0,0 +1,29 @@
+<phpunit backupGlobals="false"
+ backupStaticAttributes="false"
+ bootstrap="tests/bootstrap.php"
+ cacheTokens="false"
+ colors="true"
+ convertErrorsToExceptions="true"
+ convertNoticesToExceptions="true"
+ convertWarningsToExceptions="true"
+ stopOnError="false"
+ stopOnFailure="false"
+ stopOnIncomplete="false"
+ stopOnSkipped="false">
+ <testsuites>
+ <testsuite name="ModernTimelineUnit">
+ <directory>tests/Unit</directory>
+ </testsuite>
+ <testsuite name="ModernTimelineIntegration">
+ <directory>tests/Integration</directory>
+ </testsuite>
+ <testsuite name="ModernTimelineSystem">
+ <directory>tests/System</directory>
+ </testsuite>
+ </testsuites>
+ <filter>
+ <whitelist addUncoveredFilesFromWhitelist="true">
+ <directory suffix=".php">src</directory>
+ </whitelist>
+ </filter>
+</phpunit>
diff --git a/www/wiki/extensions/ModernTimeline/resources/modernTimeline.css b/www/wiki/extensions/ModernTimeline/resources/modernTimeline.css
new file mode 100644
index 00000000..1c28c64b
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/resources/modernTimeline.css
@@ -0,0 +1,4 @@
+.tl-headline,
+.tl-headline-date,
+.tl-slidenav-title,
+.tl-slidenav-description { display: none; }
diff --git a/www/wiki/extensions/ModernTimeline/resources/modernTimeline.js b/www/wiki/extensions/ModernTimeline/resources/modernTimeline.js
new file mode 100644
index 00000000..45356f89
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/resources/modernTimeline.js
@@ -0,0 +1,26 @@
+( function ( mw ) {
+
+ modernTimelineLog( 'Timeline script' );
+
+ function modernTimelineLog( message ) {
+ if( mw.config.get( 'debug' ) ) {
+ console.log( message );
+ }
+ }
+
+ mw.loader.using( [ 'ext.modern.timeline' ] ).done( function () {
+ modernTimelineLog( 'Loaded timeline JS' );
+
+ for( var timelineId in window.modernTimeline ) {
+ if( window.modernTimeline.hasOwnProperty( timelineId ) ) {
+ modernTimelineLog( 'Initializing timeline "' + timelineId + '"' );
+
+ var timelineJson = window.modernTimeline[timelineId];
+ new TL.Timeline( timelineId, timelineJson, timelineJson.options );
+
+ modernTimelineLog( 'Done initializing timeline "' + timelineId + '"' );
+ }
+ }
+ } );
+
+}( mediaWiki ) ); \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/resources/vendor/font.default.css b/www/wiki/extensions/ModernTimeline/resources/vendor/font.default.css
new file mode 100644
index 00000000..0378d186
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/resources/vendor/font.default.css
@@ -0,0 +1,9 @@
+/*
+ TimelineJS - ver. 3.6.5 - 2019-05-02
+ Copyright (c) 2012-2016 Northwestern University
+ a project of the Northwestern University Knight Lab, originally created by Zach Wise
+ https://github.com/NUKnightLab/TimelineJS3
+ This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
+ If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+*/
+@import url(//fonts.googleapis.com/css?family=PT+Sans|PT+Sans+Narrow:700|PT+Serif:400,400italic);.tl-timeline{font-family:'PT Serif',serif;font-weight:400;font-size:16px;line-height:1.3em}.tl-timeline h1,.tl-timeline h2,.tl-timeline h3,.tl-timeline h4,.tl-timeline h5,.tl-timeline h6{font-family:'PT Sans Narrow',sans-serif;text-transform:uppercase;font-weight:700;font-size:46px;line-height:46px}.tl-timeline h2.tl-headline-title{font-size:58px;line-height:58px}.tl-timeline p{font-family:'PT Serif',serif;font-size:16px;line-height:1.3em}.tl-timeline ul{font-family:'PT Serif',serif}.tl-timeline .tl-media .tl-media-wikipedia h4 a,.tl-timeline .tl-media h4,.tl-timeline .tl-media h4 a{font-family:'PT Serif',serif;font-weight:700;font-size:24px;line-height:24px}.tl-timeline .tl-caption,.tl-timeline .tl-credit{font-family:'PT Serif',serif}.tl-timeline .vcard{font-family:'PT Sans Narrow',sans-serif !important;font-weight:normal !important}.tl-timeline .tl-slidenav-next,.tl-timeline .tl-slidenav-previous,.tl-timeline .tl-message,.tl-timeline .tl-timegroup-message{font-family:'PT Sans Narrow',sans-serif;font-weight:700;text-transform:uppercase}.tl-timeline .tl-slidenav-next .tl-slidenav-title,.tl-timeline .tl-slidenav-previous .tl-slidenav-title,.tl-timeline .tl-message .tl-slidenav-title,.tl-timeline .tl-timegroup-message .tl-slidenav-title{line-height:1.3em !important}.tl-timeline .tl-headline-date,.tl-timeline h3.tl-headline-date{font-family:'PT Sans Narrow',sans-serif !important;font-weight:normal !important;text-transform:uppercase !important}.tl-timeline .tl-headline-date small,.tl-timeline h3.tl-headline-date small{font-weight:normal !important}.tl-timeline .tl-timenav-slider{font-family:'PT Sans Narrow',sans-serif;font-weight:700}.tl-timeline .tl-timenav-slider h2.tl-headline{font-family:'PT Sans',sans-serif;font-weight:700;text-transform:none}.tl-timeline .tl-timenav-slider .tl-timeaxis{font-family:'PT Sans Narrow',sans-serif;font-weight:700;text-transform:uppercase}.tl-timeline .tl-menubar{font-family:'PT Sans Narrow',sans-serif}.tl-timeline blockquote,.tl-timeline blockquote p{font-family:'PT Serif',serif;font-style:italic;font-weight:400;line-height:1.3}input[type="text"].editor-headline{font-family:'PT Sans Narrow',sans-serif;text-transform:uppercase;font-weight:700;font-size:46px;line-height:46px}.tl-timeline .tl-timenav-slider .tl-timeaxis{font-weight:normal} \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/resources/vendor/timeline.css b/www/wiki/extensions/ModernTimeline/resources/vendor/timeline.css
new file mode 100644
index 00000000..5401bccd
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/resources/vendor/timeline.css
@@ -0,0 +1,27 @@
+/*
+ TimelineJS - ver. 3.6.5 - 2019-05-02
+ Copyright (c) 2012-2016 Northwestern University
+ a project of the Northwestern University Knight Lab, originally created by Zach Wise
+ https://github.com/NUKnightLab/TimelineJS3
+ This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
+ If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+*/
+/*!
+ Timeline JS 3
+
+ Designed and built by Zach Wise for the Northwestern University Knight Lab
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+*//*!
+ Timeline JS 3
+
+ Designed and built by Zach Wise for the Northwestern University Knight Lab
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+*/.tl-storyjs div *{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.tl-storyjs h1,.tl-storyjs h2,.tl-storyjs h3,.tl-storyjs h4,.tl-storyjs h5,.tl-storyjs h6,.tl-storyjs p,.tl-storyjs blockquote,.tl-storyjs pre,.tl-storyjs a,.tl-storyjs abbr,.tl-storyjs acronym,.tl-storyjs address,.tl-storyjs cite,.tl-storyjs code,.tl-storyjs del,.tl-storyjs dfn,.tl-storyjs em,.tl-storyjs img,.tl-storyjs q,.tl-storyjs s,.tl-storyjs samp,.tl-storyjs small,.tl-storyjs strike,.tl-storyjs strong,.tl-storyjs sub,.tl-storyjs sup,.tl-storyjs tt,.tl-storyjs var,.tl-storyjs dd,.tl-storyjs dl,.tl-storyjs dt,.tl-storyjs li,.tl-storyjs ol,.tl-storyjs ul,.tl-storyjs fieldset,.tl-storyjs form,.tl-storyjs label,.tl-storyjs legend,.tl-storyjs button,.tl-storyjs table,.tl-storyjs caption,.tl-storyjs tbody,.tl-storyjs tfoot,.tl-storyjs thead,.tl-storyjs tr,.tl-storyjs th,.tl-storyjs td,.tl-storyjs .tl-container,.tl-storyjs .content-container,.tl-storyjs .media,.tl-storyjs .text,.tl-storyjs .tl-slider,.tl-storyjs .slider,.tl-storyjs .date,.tl-storyjs .title,.tl-storyjs .message,.tl-storyjs .map,.tl-storyjs .credit,.tl-storyjs .caption,.tl-storyjs .tl-feedback,.tl-storyjs .tl-feature,.tl-storyjs .toolbar,.tl-storyjs .marker,.tl-storyjs .dot,.tl-storyjs .line,.tl-storyjs .flag,.tl-storyjs .time,.tl-storyjs .era,.tl-storyjs .major,.tl-storyjs .minor,.tl-storyjs .tl-navigation,.tl-storyjs .start,.tl-storyjs .active{margin:0;padding:0;border:0;font-weight:400;font-style:normal;font-size:100%;line-height:1;font-family:inherit;width:auto;float:none}.tl-storyjs h1,.tl-storyjs h2,.tl-storyjs h3,.tl-storyjs h4,.tl-storyjs h5,.tl-storyjs h6{clear:none}.tl-storyjs table{border-collapse:collapse;border-spacing:0}.tl-storyjs ol,.tl-storyjs ul{list-style:none}.tl-storyjs q:before,.tl-storyjs q:after,.tl-storyjs blockquote:before,.tl-storyjs blockquote:after{content:""}.tl-storyjs a:focus{outline:thin dotted}.tl-storyjs a:hover,.tl-storyjs a:active{outline:0}.tl-storyjs article,.tl-storyjs aside,.tl-storyjs details,.tl-storyjs figcaption,.tl-storyjs figure,.tl-storyjs footer,.tl-storyjs header,.tl-storyjs hgroup,.tl-storyjs nav,.tl-storyjs section{display:block}.tl-storyjs audio,.tl-storyjs canvas,.tl-storyjs video{display:inline-block;*display:inline;*zoom:1}.tl-storyjs audio:not([controls]){display:none}.tl-storyjs div{max-width:none}.tl-storyjs sub,.tl-storyjs sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.tl-storyjs sup{top:-.5em}.tl-storyjs sub{bottom:-.25em}.tl-storyjs img{border:0;-ms-interpolation-mode:bicubic}.tl-storyjs button,.tl-storyjs input,.tl-storyjs select,.tl-storyjs textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.tl-storyjs button,.tl-storyjs input{line-height:normal;*overflow:visible}.tl-storyjs button::-moz-focus-inner,.tl-storyjs input::-moz-focus-inner{border:0;padding:0}.tl-storyjs button,.tl-storyjs input[type=button],.tl-storyjs input[type=reset],.tl-storyjs input[type=submit]{cursor:pointer;-webkit-appearance:button}.tl-storyjs input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.tl-storyjs input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.tl-storyjs textarea{overflow:auto;vertical-align:top}.tl-timeline{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.tl-timeline h1,.tl-timeline h2,.tl-timeline h3,.tl-timeline h4,.tl-timeline h5,.tl-timeline h6{color:#000}.tl-timeline h1,.tl-timeline h2,.tl-timeline h3{font-size:28px;line-height:28px}.tl-timeline h1 small,.tl-timeline h2 small,.tl-timeline h3 small{font-size:24px;line-height:24px}.tl-timeline h4,.tl-timeline h5,.tl-timeline h6{font-size:24px;line-height:24px;margin-bottom:0}.tl-timeline h4 small,.tl-timeline h5 small,.tl-timeline h6 small{font-size:15px;line-height:15px}.tl-timeline h2.tl-headline-title{font-size:38px;line-height:38px}.tl-timeline h2.tl-headline-title small{display:block;margin-top:5px;font-size:24px;line-height:24px}.tl-timeline h2{margin-top:20px;margin-bottom:5px}.tl-timeline p{margin-top:5px;margin-bottom:10px;font-size:15px;line-height:1.42857143;color:#666}.tl-timeline .tl-caption,.tl-timeline .tl-credit,.tl-timeline .tl-slidenav-next,.tl-timeline .tl-slidenav-previous{font-size:11px;line-height:11px}.tl-timeline .tl-caption a,.tl-timeline .tl-credit a,.tl-timeline .tl-slidenav-next a,.tl-timeline .tl-slidenav-previous a{color:#000}.tl-timeline .tl-makelink{word-break:break-all;word-break:break-word;-webkit-hyphens:auto;-moz-hyphens:auto;hyphens:auto}.tl-timeline blockquote,.tl-timeline blockquote p{font-family:Georgia,Times New Roman,Times,serif;color:#999;font-size:24px;line-height:24px;text-align:left;background:0 0;border:0;padding:0}.tl-timeline blockquote cite,.tl-timeline blockquote p cite{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:11px;color:#666;display:block;text-align:right;font-style:normal}.tl-timeline blockquote cite:before,.tl-timeline blockquote p cite:before{content:"\2014"}.tl-timeline blockquote p:before{content:open-quote;display:inline-block;font-size:28px;position:relative;top:8px;margin-right:5px}.tl-timeline blockquote p:after{content:close-quote;display:inline-block;font-size:28px;position:relative;top:8px;margin-left:3px}.tl-timeline blockquote{margin:10px}.tl-timeline blockquote p{margin:0}.tl-timeline .vcard{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px;line-height:15px;*zoom:1;margin-bottom:15px;margin-top:10px}.tl-timeline .vcard:before,.tl-timeline .vcard:after{display:table;content:""}.tl-timeline .vcard:after{clear:both}.tl-timeline .vcard .twitter-date{text-align:left;font-size:11px}.tl-timeline .vcard .author{float:right}.tl-timeline .vcard a{color:#333;text-decoration:none}.tl-timeline .vcard a:hover{text-decoration:none}.tl-timeline .vcard a:hover .fn,.tl-timeline .vcard a:hover .nickname{color:#c34528}.tl-timeline .vcard .fn,.tl-timeline .vcard .nickname{padding-left:42px}.tl-timeline .vcard .fn{display:block;font-weight:700}.tl-timeline .vcard .nickname{margin-top:1px;display:block;color:#666}.tl-timeline .vcard .avatar{float:left;display:block;width:32px;height:32px}.tl-timeline .vcard .avatar img{-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.tl-timeline .tl-text ul{padding:0;padding-left:30px;margin:0}.tl-timeline .tl-text ul li{margin-bottom:5px}.tl-timeline .tl-button-calltoaction{cursor:pointer;font-weight:700;padding-top:10px;margin-bottom:10px;padding-bottom:10px}.tl-timeline .tl-button-calltoaction .tl-button-calltoaction-text{display:inline-block;background-color:#c34528;color:#fff;padding:10px 15px;border-radius:7px}.tl-timeline .tl-note{display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:italic;background-color:#e6e6e6;font-size:15px;line-height:17px;padding:10px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px;color:#8a6d3b;background-color:#fcf8e3;border:1px solid #faebcc;text-shadow:none}@media only screen and (max-width:800px),only screen and (max-device-width:800px){.tl-timeline h1,.tl-timeline h2,.tl-timeline h3{font-size:28px;line-height:28px}}@media only screen and (max-width:500px),only screen and (max-device-width:500px){.tl-timeline h1,.tl-timeline h2,.tl-timeline h3{font-size:24px;line-height:24px}}.tl-skinny h2{margin-top:0}@font-face{font-family:tl-icons;src:url(tl-icons.eot);src:url(tl-icons.eot?#iefix) format('embedded-opentype'),url(tl-icons.ttf) format('truetype'),url(tl-icons.woff2) format('woff2'),url(tl-icons.woff) format('woff'),url(tl-icons.svg#tl-icons) format('svg');font-weight:400;font-style:normal}[class^=tl-icon-],[class*=" tl-icon-"]{font-family:tl-icons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.tl-icon-vine:after{content:"\e64d"}.tl-icon-wikipedia:after{content:"\e64e"}.tl-icon-chevron-right:after{content:"\e64f"}.tl-icon-chevron-left:after{content:"\e650"}.tl-icon-youtube-logo:after{content:"\e651"}.tl-icon-foursquare:after{content:"\e652"}.tl-icon-camera-retro:after{content:"\e653"}.tl-icon-doc:after{content:"\e654"}.tl-icon-weibo:after{content:"\e655"}.tl-icon-resize-horizontal:after{content:"\e656"}.tl-icon-resize-vertical:after{content:"\e657"}.tl-icon-resize-full:after{content:"\e658"}.tl-icon-resize-small:after{content:"\e659"}.tl-icon-twitter:after{content:"\e62b"}.tl-icon-google-plus:after{content:"\e62c"}.tl-icon-video:after{content:"\e62d"}.tl-icon-youtube:after{content:"\e62d"}.tl-icon-plaintext:after{content:"\e62e"}.tl-icon-storify:after{content:"\e62e"}.tl-icon-image-v2:after{content:"\e62f"}.tl-icon-quote-v2:after{content:"\e630"}.tl-icon-zoom-in:after{content:"\e631"}.tl-icon-zoom-out:after{content:"\e632"}.tl-icon-list:after{content:"\e633"}.tl-icon-music:after{content:"\e634"}.tl-icon-spotify:after{content:"\e634"}.tl-icon-location:after{content:"\e635"}.tl-icon-googlemaps:after{content:"\e635"}.tl-icon-web:after{content:"\e636"}.tl-icon-share-v2:after{content:"\e637"}.tl-icon-soundcloud:after{content:"\e639"}.tl-icon-video-v2:after{content:"\e63a"}.tl-icon-dailymotion:after{content:"\e63a"}.tl-icon-tumblr:after{content:"\e63b"}.tl-icon-lastfm:after{content:"\e63c"}.tl-icon-github:after{content:"\e63d"}.tl-icon-goback:after{content:"\e63e"}.tl-icon-doc-v2:after{content:"\e63f"}.tl-icon-googledrive:after{content:"\e640"}.tl-icon-facebook:after{content:"\e641"}.tl-icon-flickr:after{content:"\e642"}.tl-icon-dribbble:after{content:"\e643"}.tl-icon-image:after{content:"\e605"}.tl-icon-vimeo:after{content:"\e606"}.tl-icon-instagram:after{content:"\e644"}.tl-icon-pinterest:after{content:"\e645"}.tl-icon-arrow-left:after{content:"\e646"}.tl-icon-arrow-down:after{content:"\e647"}.tl-icon-arrow-up:after{content:"\e648"}.tl-icon-arrow-right:after{content:"\e649"}.tl-icon-share:after{content:"\e64a"}.tl-icon-blockquote:after{content:"\e64b"}.tl-icon-evernote:after{content:"\e64c"}.tl-icon-mappin:after{content:"\e600"}.tl-icon-swipe-right:after{content:"\e601"}.tl-icon-swipe-left:after{content:"\e602"}.tl-icon-touch-spread:after{content:"\e603"}.tl-icon-touch-pinch:after{content:"\e604"}.tl-dragging{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none}.tl-menubar{position:absolute;z-index:11;text-align:center;color:#333;overflow:hidden;border-bottom-right-radius:10px;border-top-right-radius:10px;top:100%;left:50%;left:0}@keyframes invertToBlack{from{background-color:#fff}to{background-color:#000}}@-webkit-keyframes invertToBlack{from{background:#fff}to{background:#000}}@keyframes invertToWhite{from{background-color:#000}to{background-color:#fff}}@-webkit-keyframes invertToWhite{from{background:#000}to{background:#fff}}.tl-menubar-button{font-size:18px;line-height:18px;background-color:rgba(242,242,242,.9);cursor:pointer;padding:6px 12px;display:inline-block;display:block;color:#bfbfbf}.tl-menubar-button.tl-menubar-button-inactive{opacity:.33}.tl-menubar-button:hover{background:#333;color:#fff}.tl-menubar-button:hover.tl-menubar-button-inactive{color:#bfbfbf;background-color:rgba(242,242,242,.9)}.tl-mobile .tl-menubar-button{display:block}.tl-mobile .tl-menubar-button:hover{background-color:rgba(242,242,242,.67);color:#737373}.tl-mobile .tl-menubar-button:active{background:#c34528;color:#fff}@keyframes invertToBlack{from{background-color:#fff}to{background-color:#000}}@-webkit-keyframes invertToBlack{from{background:#fff}to{background:#000}}@keyframes invertToWhite{from{background-color:#000}to{background-color:#fff}}@-webkit-keyframes invertToWhite{from{background:#000}to{background:#fff}}.tl-message,.tl-message-full{width:100%;height:100%;position:absolute;display:table;overflow:hidden;top:0;left:0;z-index:99;margin:auto;text-align:center}.tl-message .tl-message-container,.tl-message-full .tl-message-container{padding:20px;margin:20px;text-align:center;vertical-align:middle;display:table-cell}.tl-message .tl-message-container .tl-message-content,.tl-message-full .tl-message-container .tl-message-content{color:#666;text-align:center;font-size:11px;line-height:13px;text-transform:uppercase;margin-top:7.5px;margin-bottom:7.5px;text-shadow:1px 1px 1px #fff}.tl-message .tl-message-container .tl-message-content strong,.tl-message-full .tl-message-container .tl-message-content strong{text-transform:uppercase}.tl-message .tl-message-container .tl-loading-icon,.tl-message-full .tl-message-container .tl-loading-icon{width:30px;height:30px;background-color:#666;vertical-align:middle;-webkit-box-shadow:inset 0 1px 2px rgba(255,255,255,.1);-moz-box-shadow:inset 0 1px 2px rgba(255,255,255,.1);box-shadow:inset 0 1px 2px rgba(255,255,255,.1);margin-left:auto;margin-right:auto;text-align:center;-webkit-animation:rotateplane 1.2s infinite ease-in-out;animation:rotateplane 1.2s infinite ease-in-out}@-webkit-keyframes rotateplane{0%{-webkit-transform:perspective(120px)}50%{-webkit-transform:perspective(120px) rotateY(180deg)}100%{-webkit-transform:perspective(120px) rotateY(180deg) rotateX(180deg)}}@keyframes rotateplane{0%{transform:perspective(120px) rotateX(0deg) rotateY(0deg)}50%{transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg)}100%{transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.tl-message-full{background-color:rgba(255,255,255,.8)}.tl-message-full [class^=tl-icon-],.tl-message-full [class*=" tl-icon-"]{color:#666;font-size:72px}.tl-message-full .tl-message-container .tl-message-content{font-size:22px;line-height:22px;text-shadow:none;color:#666;text-transform:none;font-weight:400}.tl-message-full .tl-message-container .tl-message-content .tl-button{display:inline-block;cursor:pointer;background-color:#fff;color:#333;padding:10px;margin-top:10px;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.tl-timenav{width:100%;background-color:#f2f2f2;position:relative;overflow:hidden;border-top:1px solid #e5e5e5}.tl-timenav .tl-attribution{cursor:pointer;z-index:9;position:absolute;bottom:2px;left:0;font-size:10px;line-height:10px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif!important;background-color:rgba(255,255,255,.85);padding:3px}.tl-timenav .tl-attribution a{color:#ccc}.tl-timenav .tl-attribution a:hover{color:#000;text-decoration:none}.tl-timenav .tl-attribution a:hover .tl-knightlab-logo{background-color:#c34528}.tl-timenav .tl-attribution .tl-knightlab-logo{display:inline-block;vertical-align:middle;height:8px;width:8px;margin-right:3px;background-color:#c34528;background-color:#ccc;transform:rotate(45deg);-ms-transform:rotate(45deg);-webkit-transform:rotate(45deg)}.tl-timenav .tl-timenav-line{position:absolute;top:0;left:50%;width:1px;height:100%;background-color:#d9d9d9;z-index:2;display:none}.tl-timenav .tl-timenav-line:before,.tl-timenav .tl-timenav-line:after{font-family:tl-icons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:#c34528;font-size:32px;line-height:32px;position:absolute;left:-14px}.tl-timenav .tl-timenav-line:before{top:-10px}.tl-timenav .tl-timenav-line:after{content:"\e648";bottom:24px}.tl-timenav .tl-timenav-slider{position:absolute;height:100%;width:100%;top:0}.tl-timenav .tl-timenav-slider.tl-timenav-slider-animate{-webkit-transition:all 1000ms cubic-bezier(.77,0,.175,1);-moz-transition:all 1000ms cubic-bezier(.77,0,.175,1);-o-transition:all 1000ms cubic-bezier(.77,0,.175,1);transition:all 1000ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1)}.tl-timenav .tl-timenav-slider .tl-timenav-slider-background{position:absolute;height:100%;width:100%;cursor:move;z-index:6}.tl-timenav .tl-timenav-slider .tl-timenav-container-mask{position:absolute;height:100%;top:0}.tl-timenav .tl-timenav-slider .tl-timenav-container-mask .tl-timenav-container{position:absolute;height:100%}.tl-timenav .tl-timenav-slider .tl-timenav-container-mask .tl-timenav-container .tl-timenav-item-container{position:absolute;height:100%}.tl-timemarker{height:100%;position:absolute;top:0;left:0;cursor:pointer;-webkit-transition:left 1000ms cubic-bezier(.77,0,.175,1),top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-moz-transition:left 1000ms cubic-bezier(.77,0,.175,1),top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-o-transition:left 1000ms cubic-bezier(.77,0,.175,1),top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);transition:left 1000ms cubic-bezier(.77,0,.175,1),top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1)}.tl-timemarker.tl-timemarker-fast{-webkit-transition:top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 500ms cubic-bezier(.77,0,.175,1);-moz-transition:top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 500ms cubic-bezier(.77,0,.175,1);-o-transition:top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 500ms cubic-bezier(.77,0,.175,1);transition:top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 500ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1)}.tl-timemarker.tl-timemarker-fast .tl-timemarker-content-container{-webkit-transition:width 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1);-moz-transition:width 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1);-o-transition:width 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1);transition:width 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1)}.tl-timemarker.tl-timemarker-fast .tl-timemarker-timespan{-webkit-transition:height 500ms cubic-bezier(.77,0,.175,1),width 500ms cubic-bezier(.77,0,.175,1);-moz-transition:height 500ms cubic-bezier(.77,0,.175,1),width 500ms cubic-bezier(.77,0,.175,1);-o-transition:height 500ms cubic-bezier(.77,0,.175,1),width 500ms cubic-bezier(.77,0,.175,1);transition:height 500ms cubic-bezier(.77,0,.175,1),width 500ms cubic-bezier(.77,0,.175,1)}.tl-timemarker .tl-timemarker-timespan{pointer-events:none;position:absolute;margin:0;width:100%;height:100%;background-color:rgba(229,229,229,.15);border-top-right-radius:4px;border-top-left-radius:4px;-webkit-transition:height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-moz-transition:height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-o-transition:height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);transition:height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1)}.tl-timemarker .tl-timemarker-timespan .tl-timemarker-timespan-content{display:none;position:absolute;width:100%;background-color:#e5e5e5;border-top-left-radius:4px;border-top-right-radius:4px;height:100px;box-sizing:border-box}.tl-timemarker .tl-timemarker-line-right{display:none;right:0}.tl-timemarker .tl-timemarker-line-left{width:1px;left:0}.tl-timemarker .tl-timemarker-line-left,.tl-timemarker .tl-timemarker-line-right{margin-top:7px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;border-left:1px solid #d9d9d9;z-index:5;content:" ";position:absolute;height:100%;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;box-shadow:1px 1px 1px #fff}.tl-timemarker .tl-timemarker-line-left:after,.tl-timemarker .tl-timemarker-line-right:after{display:block;content:" ";position:absolute;left:-4px;bottom:0;height:6px;width:6px;background-color:#919191;z-index:8;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.tl-timemarker .tl-timemarker-content-container{position:absolute;background-color:#e5e5e5;border:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px;height:100%;width:100px;overflow:hidden;z-index:6;-webkit-transition:height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-moz-transition:height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-o-transition:height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);transition:height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1);box-sizing:border-box;border:1px solid #d9d9d9;box-shadow:1px 1px 1px #fff}.tl-timemarker .tl-timemarker-content-container:hover{z-index:9}.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content{position:relative;overflow:hidden;height:100%;z-index:8;padding:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-text{overflow:hidden;position:relative}.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-text h2.tl-headline,.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-text h2.tl-headline p{display:-webkit-box;line-clamp:2;-webkit-line-clamp:2;box-orient:vertical;-webkit-box-orient:vertical;text-overflow:ellipsis;font-size:12px;line-height:12px;height:100%;overflow:hidden;font-weight:400;margin:0;color:#bfbfbf;position:relative}.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-text h2.tl-headline.tl-headline-fadeout:after,.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-text h2.tl-headline p.tl-headline-fadeout:after{content:"";text-align:right;position:absolute;bottom:0;right:0;width:100%;height:50%;background:-moz-linear-gradient(top,rgba(229,229,229,0)0,#e5e5e5 50%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(229,229,229,0)),color-stop(50%,#e5e5e5));background:-webkit-linear-gradient(top,rgba(229,229,229,0)0,#e5e5e5 50%);background:-o-linear-gradient(top,rgba(229,229,229,0)0,#e5e5e5 50%);background:-ms-linear-gradient(top,rgba(229,229,229,0)0,#e5e5e5 50%);background:linear-gradient(to bottom,rgba(229,229,229,0)0,#e5e5e5 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='@thecolor', endColorstr='@thecolor', GradientType=0)}.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-media-container{float:left;max-width:24px;max-height:24px;overflow:hidden;margin-right:5px;height:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-media-container .tl-timemarker-media{max-width:24px;max-height:100%;opacity:.25}.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-media-container [class^=tl-icon-],.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-media-container [class*=" tl-icon-"]{display:block;font-size:24px;color:#bfbfbf;margin-top:0}.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-media-container .tl-icon-wikipedia{font-size:16px}.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content.tl-timemarker-content-small .tl-timemarker-text h2.tl-headline{display:block;white-space:nowrap;text-overflow:ellipsis}.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content.tl-timemarker-content-small .tl-timemarker-media-container [class^=tl-icon-],.tl-timemarker .tl-timemarker-content-container .tl-timemarker-content.tl-timemarker-content-small .tl-timemarker-media-container [class*=" tl-icon-"]{font-size:12px}.tl-timemarker:hover .tl-timemarker-timespan{background-color:rgba(191,191,191,.15)}.tl-timemarker:hover .tl-timemarker-timespan .tl-timemarker-timespan-content{background-color:#bfbfbf}.tl-timemarker:hover .tl-timemarker-timespan .tl-timemarker-line-left,.tl-timemarker:hover .tl-timemarker-timespan .tl-timemarker-line-right{border-color:#a6a6a6}.tl-timemarker:hover .tl-timemarker-timespan .tl-timemarker-line-left:after,.tl-timemarker:hover .tl-timemarker-timespan .tl-timemarker-line-right:after{background-color:#3d3d3d}.tl-timemarker:hover .tl-timemarker-content-container{background-color:#bfbfbf;border-color:#a6a6a6;-webkit-transition:height 250ms cubic-bezier(.77,0,.175,1),width 250ms cubic-bezier(.77,0,.175,1);-moz-transition:height 250ms cubic-bezier(.77,0,.175,1),width 250ms cubic-bezier(.77,0,.175,1);-o-transition:height 250ms cubic-bezier(.77,0,.175,1),width 250ms cubic-bezier(.77,0,.175,1);transition:height 250ms cubic-bezier(.77,0,.175,1),width 250ms cubic-bezier(.77,0,.175,1)}.tl-timemarker:hover .tl-timemarker-content-container.tl-timemarker-content-container-small{width:200px}.tl-timemarker:hover .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-text h2.tl-headline{color:#fff}.tl-timemarker:hover .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-text h2.tl-headline.tl-headline-fadeout:after{background:-moz-linear-gradient(top,rgba(191,191,191,0)0,#bfbfbf 80%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(191,191,191,0)),color-stop(80%,#bfbfbf));background:-webkit-linear-gradient(top,rgba(191,191,191,0)0,#bfbfbf 80%);background:-o-linear-gradient(top,rgba(191,191,191,0)0,#bfbfbf 80%);background:-ms-linear-gradient(top,rgba(191,191,191,0)0,#bfbfbf 80%);background:linear-gradient(to bottom,rgba(191,191,191,0)0,#bfbfbf 80%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='@thecolor', endColorstr='@thecolor', GradientType=0)}.tl-timemarker:hover .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-media-container .tl-timemarker-media{opacity:1}.tl-timemarker:hover .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-media-container [class^=tl-icon-],.tl-timemarker:hover .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-media-container [class*=" tl-icon-"]{color:#fff}.tl-timemarker:hover.tl-timemarker-active .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-text h2.tl-headline.tl-headline-fadeout:after{background:-moz-linear-gradient(top,rgba(255,255,255,0)0,#fff 80%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(255,255,255,0)),color-stop(80%,#fff));background:-webkit-linear-gradient(top,rgba(255,255,255,0)0,#fff 80%);background:-o-linear-gradient(top,rgba(255,255,255,0)0,#fff 80%);background:-ms-linear-gradient(top,rgba(255,255,255,0)0,#fff 80%);background:linear-gradient(to bottom,rgba(255,255,255,0)0,#fff 80%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='@thecolor', endColorstr='@thecolor', GradientType=0)}.tl-timemarker:hover.tl-timemarker-active .tl-timemarker-line-left,.tl-timemarker:hover.tl-timemarker-active .tl-timemarker-line-right{border-color:#000}.tl-timemarker:hover.tl-timemarker-active .tl-timemarker-line-left:after,.tl-timemarker:hover.tl-timemarker-active .tl-timemarker-line-right:after{background-color:#000}.tl-timemarker.tl-timemarker-active .tl-timemarker-timespan{background-color:rgba(255,255,255,.5);z-index:8}.tl-timemarker.tl-timemarker-active .tl-timemarker-timespan .tl-timemarker-timespan-content{background-color:#333}.tl-timemarker.tl-timemarker-active .tl-timemarker-line-left,.tl-timemarker.tl-timemarker-active .tl-timemarker-line-right{border-color:rgba(51,51,51,.5);border-width:1px;z-index:8;box-shadow:0 1px 3px rgba(145,145,145,.5)}.tl-timemarker.tl-timemarker-active .tl-timemarker-line-left:after,.tl-timemarker.tl-timemarker-active .tl-timemarker-line-right:after{background-color:#333}.tl-timemarker.tl-timemarker-active .tl-timemarker-content-container{background-color:#fff;color:#333;z-index:9;border-color:rgba(51,51,51,.5);box-shadow:1px 1px 3px rgba(145,145,145,.5)}.tl-timemarker.tl-timemarker-active .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-text h2.tl-headline{color:#333}.tl-timemarker.tl-timemarker-active .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-text h2.tl-headline.tl-headline-fadeout:after{background:-moz-linear-gradient(top,rgba(255,255,255,0)0,#fff 80%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(255,255,255,0)),color-stop(80%,#fff));background:-webkit-linear-gradient(top,rgba(255,255,255,0)0,#fff 80%);background:-o-linear-gradient(top,rgba(255,255,255,0)0,#fff 80%);background:-ms-linear-gradient(top,rgba(255,255,255,0)0,#fff 80%);background:linear-gradient(to bottom,rgba(255,255,255,0)0,#fff 80%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='@thecolor', endColorstr='@thecolor', GradientType=0)}.tl-timemarker.tl-timemarker-active .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-media-container .tl-timemarker-media{opacity:1}.tl-timemarker.tl-timemarker-active .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-media-container [class^=tl-icon-],.tl-timemarker.tl-timemarker-active .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-media-container [class*=" tl-icon-"]{color:#333}.tl-timemarker.tl-timemarker-with-end .tl-timemarker-timespan .tl-timemarker-timespan-content{display:block}.tl-timemarker.tl-timemarker-with-end .tl-timemarker-timespan .tl-timemarker-line-left,.tl-timemarker.tl-timemarker-with-end .tl-timemarker-timespan .tl-timemarker-line-right{z-index:5}.tl-timemarker.tl-timemarker-with-end .tl-timemarker-timespan:after{display:block;content:" ";position:absolute;left:0;bottom:-7px;height:6px;width:100%;background-color:rgba(115,115,115,.15);z-index:6;-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.tl-timemarker.tl-timemarker-with-end .tl-timemarker-content-container.tl-timemarker-content-container-long{box-shadow:none}.tl-timemarker.tl-timemarker-with-end .tl-timemarker-line-right{display:block}.tl-timemarker.tl-timemarker-with-end .tl-timemarker-line-left{box-shadow:none}.tl-timemarker.tl-timemarker-with-end:hover .tl-timemarker-timespan:after{background-color:rgba(0,0,0,.25)}.tl-timemarker.tl-timemarker-with-end.tl-timemarker-active .tl-timemarker-timespan:after{background-color:rgba(51,51,51,.5)}.tl-timemarker.tl-timemarker-with-end.tl-timemarker-active .tl-timemarker-line-left,.tl-timemarker.tl-timemarker-with-end.tl-timemarker-active .tl-timemarker-line-right{border-width:1px}.tl-timemarker.tl-timemarker-with-end.tl-timemarker-active .tl-timemarker-line-left:after,.tl-timemarker.tl-timemarker-with-end.tl-timemarker-active .tl-timemarker-line-right:after{background-color:#333!important}.tl-timemarker.tl-timemarker-with-end.tl-timemarker-active .tl-timemarker-line-left{box-shadow:none}.tl-timemarker.tl-timemarker-with-end.tl-timemarker-active:hover .tl-timemarker-timespan:after{background-color:rgba(51,51,51,.5)}.tl-timeera{height:100%;height:40px;position:absolute;bottom:0;left:0;pointer-events:none;z-index:3;-webkit-transition:left 1000ms cubic-bezier(.77,0,.175,1),top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-moz-transition:left 1000ms cubic-bezier(.77,0,.175,1),top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-o-transition:left 1000ms cubic-bezier(.77,0,.175,1),top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);transition:left 1000ms cubic-bezier(.77,0,.175,1),top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1)}.tl-timeera.tl-timeera-fast{-webkit-transition:top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 500ms cubic-bezier(.77,0,.175,1);-moz-transition:top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 500ms cubic-bezier(.77,0,.175,1);-o-transition:top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 500ms cubic-bezier(.77,0,.175,1);transition:top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 500ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1)}.tl-timeera .tl-timeera-background{position:absolute;background-color:#28a6c3;width:100%;height:100%;opacity:1}.tl-timeera.tl-timeera-color0 .tl-timeera-background{background-color:#c34528}.tl-timeera.tl-timeera-color1 .tl-timeera-background{background-color:#28a6c3}.tl-timeera.tl-timeera-color2 .tl-timeera-background{background-color:#2832c3}.tl-timeera.tl-timeera-color3 .tl-timeera-background{background-color:#28c36c}.tl-timeera.tl-timeera-color4 .tl-timeera-background{background-color:#286dc3}.tl-timeera.tl-timeera-color5 .tl-timeera-background{background-color:#28c3a7}.tl-timeera .tl-timeera-content-container{position:absolute;border:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:4px;height:100%;width:100px;overflow:hidden;-webkit-transition:height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-moz-transition:height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-o-transition:height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);transition:height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1);box-sizing:border-box;border:1px solid #d9d9d9}.tl-timeera .tl-timeera-content-container .tl-timeera-content{position:relative;overflow:hidden;height:100%;padding:5px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.tl-timeera .tl-timeera-content-container .tl-timeera-content .tl-timeera-text{overflow:hidden;position:relative;height:100%}.tl-timeera .tl-timeera-content-container .tl-timeera-content .tl-timeera-text h2.tl-headline{bottom:0;position:absolute;display:-webkit-box;line-clamp:4;-webkit-line-clamp:4;box-orient:vertical;-webkit-box-orient:vertical;text-overflow:ellipsis;font-size:10px;line-height:10px;overflow:hidden;font-weight:400;margin:0;color:#fff;margin-left:10px}.tl-timeera .tl-timeera-content-container .tl-timeera-content .tl-timeera-text h2.tl-headline.tl-headline-fadeout:after{content:"";text-align:right;position:absolute;bottom:0;right:0;width:100%;height:50%;background:-moz-linear-gradient(top,rgba(229,229,229,0)0,#e5e5e5 50%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,rgba(229,229,229,0)),color-stop(50%,#e5e5e5));background:-webkit-linear-gradient(top,rgba(229,229,229,0)0,#e5e5e5 50%);background:-o-linear-gradient(top,rgba(229,229,229,0)0,#e5e5e5 50%);background:-ms-linear-gradient(top,rgba(229,229,229,0)0,#e5e5e5 50%);background:linear-gradient(to bottom,rgba(229,229,229,0)0,#e5e5e5 50%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='@thecolor', endColorstr='@thecolor', GradientType=0)}.tl-timegroup{width:100%;position:absolute;top:0;left:0;background-color:#f2f2f2;display:-ms-flexbox;display:-webkit-flex;display:flex;align-items:center;-ms-flex-align:center;-webkit-align-items:center;-webkit-box-align:center;-webkit-transition:left 1000ms cubic-bezier(.77,0,.175,1),top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-moz-transition:left 1000ms cubic-bezier(.77,0,.175,1),top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-o-transition:left 1000ms cubic-bezier(.77,0,.175,1),top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);transition:left 1000ms cubic-bezier(.77,0,.175,1),top 500ms cubic-bezier(.77,0,.175,1),height 500ms cubic-bezier(.77,0,.175,1),width 1000ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1)}.tl-timegroup .tl-timegroup-message{color:#e0e0e0;text-shadow:#fff 0 2px 2px;margin-left:80px}.tl-timegroup.tl-timegroup-alternate{background-color:#fafafa}.tl-timegroup.tl-timegroup-hidden{display:none}.tl-timeaxis-background{height:39px;width:100%;position:absolute;bottom:0;left:0;background-color:#fff;border-top:1px solid #e5e5e5;z-index:2}.tl-timeaxis{height:39px;width:100%;position:absolute;bottom:0;left:0;z-index:3}.tl-timeaxis .tl-timeaxis-content-container{position:relative;bottom:0;height:39px}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-major,.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-minor{opacity:0;position:absolute}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-major .tl-timeaxis-tick,.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-minor .tl-timeaxis-tick{position:absolute;display:block;top:0;left:0;text-align:center;font-weight:400}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-major .tl-timeaxis-tick .tl-timeaxis-tick-text,.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-minor .tl-timeaxis-tick .tl-timeaxis-tick-text{display:inline-block;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-major .tl-timeaxis-tick:before,.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-minor .tl-timeaxis-tick:before{content:"|";display:block;color:#fff;width:1px;overflow:hidden;border-left:1px solid #bfbfbf;text-align:center}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-major.tl-timeaxis-animate .tl-timeaxis-tick,.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-minor.tl-timeaxis-animate .tl-timeaxis-tick{-webkit-transition:all 1000ms cubic-bezier(.77,0,.175,1);-moz-transition:all 1000ms cubic-bezier(.77,0,.175,1);-o-transition:all 1000ms cubic-bezier(.77,0,.175,1);transition:all 1000ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1)}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-major.tl-timeaxis-animate-opacity .tl-timeaxis-tick,.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-minor.tl-timeaxis-animate-opacity .tl-timeaxis-tick{-webkit-transition:opacity 1000ms cubic-bezier(.77,0,.175,1);-moz-transition:opacity 1000ms cubic-bezier(.77,0,.175,1);-o-transition:opacity 1000ms cubic-bezier(.77,0,.175,1);transition:opacity 1000ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1)}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-major{z-index:1;background-color:#fff}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-major .tl-timeaxis-tick{font-size:12px;line-height:14px;color:#737373;width:100px;margin-left:-50px}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-major .tl-timeaxis-tick:before{border-color:#a6a6a6;font-size:18px;line-height:18px;margin-bottom:2px;margin-left:50px}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-minor .tl-timeaxis-tick{font-size:11px;line-height:13px;color:#bfbfbf;width:50px;margin-left:-25px}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-minor .tl-timeaxis-tick .tl-timeaxis-tick-text{opacity:0;white-space:normal;padding-left:2px;padding-right:2px}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-minor .tl-timeaxis-tick .tl-timeaxis-tick-text span{display:block;font-size:9px;line-height:9px;margin-top:-2px;color:#e6e6e6}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-minor .tl-timeaxis-tick:before{font-size:9px;line-height:9px;margin-left:25px}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-minor .tl-timeaxis-tick.tl-timeaxis-tick-hidden .tl-timeaxis-tick-text{opacity:0!important}.tl-timeaxis .tl-timeaxis-content-container .tl-timeaxis-minor .tl-timeaxis-tick.tl-timeaxis-tick-hidden:before{opacity:.33}.tlanimate{-webkit-transform:translateZ(0);-webkit-perspective:1000;-webkit-backface-visibility:hidden}.tl-animate{-webkit-transition:all 1000ms cubic-bezier(.77,0,.175,1);-moz-transition:all 1000ms cubic-bezier(.77,0,.175,1);-o-transition:all 1000ms cubic-bezier(.77,0,.175,1);transition:all 1000ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1)}.tl-animate-opacity{-webkit-transition:opacity 1000ms cubic-bezier(.77,0,.175,1);-moz-transition:opacity 1000ms cubic-bezier(.77,0,.175,1);-o-transition:opacity 1000ms cubic-bezier(.77,0,.175,1);transition:opacity 1000ms cubic-bezier(.77,0,.175,1);-webkit-transition-timing-function:cubic-bezier(.77,0,.175,1);-moz-transition-timing-function:cubic-bezier(.77,0,.175,1);-o-transition-timing-function:cubic-bezier(.77,0,.175,1);transition-timing-function:cubic-bezier(.77,0,.175,1)}.tl-slide{position:absolute;width:100%;height:100%;padding:0;margin:0;overflow-x:hidden;overflow-y:auto}.tl-slide .tl-slide-background{position:absolute;left:0;top:0;width:100%;height:100%;z-index:-1;overflow:hidden;display:none;filter:alpha(opacity=50);-khtml-opacity:.5;-moz-opacity:.5;opacity:.5;background:no-repeat center center;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover}.tl-slide .tl-slide-scrollable-container{display:table;table-layout:fixed;height:100%;z-index:1}.tl-slide .tl-slide-content-container{display:table-cell;vertical-align:middle;position:relative;width:100%;height:100%;z-index:3}.tl-slide .tl-slide-content-container .tl-slide-content{display:table;vertical-align:middle;padding-left:100px;padding-right:100px;position:relative;max-width:100%;user-select:text}.tl-slide .tl-slide-content-container .tl-slide-content .tl-media{position:relative;width:100%;min-width:50%;float:left;margin-top:auto;margin-bottom:auto}.tl-slide .tl-slide-content-container .tl-slide-content .tl-text{width:50%;max-width:50%;min-width:120px;padding:0 20px;display:table-cell;vertical-align:middle;text-align:left}.tl-slide-media-only .tl-slide-content-container .tl-slide-content{text-align:center}.tl-slide-media-only .tl-slide-content-container .tl-slide-content .tl-media{text-align:center;position:relative;width:100%;min-width:50%;max-width:100%;float:none;margin-top:auto;margin-bottom:auto}.tl-slide-media-only .tl-slide-content-container .tl-slide-content .tl-text{width:100%;max-width:100%;display:block;margin-left:auto;margin-right:auto;text-align:center}.tl-slide-text-only .tl-slide-content-container .tl-slide-content{text-align:center}.tl-slide-text-only .tl-slide-content-container .tl-slide-content .tl-text{max-width:80%;width:80%;display:block;margin-left:auto;margin-right:auto}.tl-slide.tl-full-image-background,.tl-slide.tl-full-color-background{color:#fff!important;text-shadow:1px 1px 1px #000!important}.tl-slide.tl-full-image-background p,.tl-slide.tl-full-color-background p,.tl-slide.tl-full-image-background h1,.tl-slide.tl-full-color-background h1,.tl-slide.tl-full-image-background h2,.tl-slide.tl-full-color-background h2,.tl-slide.tl-full-image-background h3,.tl-slide.tl-full-color-background h3,.tl-slide.tl-full-image-background h4,.tl-slide.tl-full-color-background h4,.tl-slide.tl-full-image-background h5,.tl-slide.tl-full-color-background h5,.tl-slide.tl-full-image-background h6,.tl-slide.tl-full-color-background h6{color:#fff!important;text-shadow:1px 1px 1px #000!important}.tl-slide.tl-full-image-background a,.tl-slide.tl-full-color-background a,.tl-slide.tl-full-image-background b,.tl-slide.tl-full-color-background b,.tl-slide.tl-full-image-background i,.tl-slide.tl-full-color-background i,.tl-slide.tl-full-image-background blockquote,.tl-slide.tl-full-color-background blockquote,.tl-slide.tl-full-image-background blockquote p,.tl-slide.tl-full-color-background blockquote p{text-shadow:1px 1px 1px #000;color:#fff}.tl-slide.tl-full-image-background a:hover,.tl-slide.tl-full-color-background a:hover{text-decoration:underline;color:#c34528}.tl-slide.tl-full-image-background .tl-caption,.tl-slide.tl-full-color-background .tl-caption,.tl-slide.tl-full-image-background .tl-credit,.tl-slide.tl-full-color-background .tl-credit{color:#fff!important;text-shadow:1px 1px 1px #000!important}.tl-slide.tl-full-image-background .tl-media-twitter blockquote,.tl-slide.tl-full-color-background .tl-media-twitter blockquote,.tl-slide.tl-full-image-background .tl-media-blockquote blockquote,.tl-slide.tl-full-color-background .tl-media-blockquote blockquote{color:#fff!important;text-shadow:1px 1px 1px #000!important}.tl-slide.tl-full-image-background .tl-media-twitter blockquote p,.tl-slide.tl-full-color-background .tl-media-twitter blockquote p,.tl-slide.tl-full-image-background .tl-media-blockquote blockquote p,.tl-slide.tl-full-color-background .tl-media-blockquote blockquote p{color:#fff!important;text-shadow:1px 1px 1px #000!important}.tl-slide.tl-full-image-background .vcard a,.tl-slide.tl-full-color-background .vcard a,.tl-slide.tl-full-image-background .vcard .nickname,.tl-slide.tl-full-color-background .vcard .nickname{color:#fff!important;text-shadow:1px 1px 1px #000!important}.tl-slide.tl-full-image-background{background:no-repeat center center;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;background-position:center 25%;text-shadow:1px 1px 2px #000}.tl-slide.tl-full-image-background p,.tl-slide.tl-full-image-background h1,.tl-slide.tl-full-image-background h2,.tl-slide.tl-full-image-background h3,.tl-slide.tl-full-image-background h4,.tl-slide.tl-full-image-background h5,.tl-slide.tl-full-image-background h6{text-shadow:1px 1px 2px #000}.tl-slide.tl-full-image-background .tl-caption,.tl-slide.tl-full-image-background .tl-credit{text-shadow:1px 1px 2px #000}.tl-slide.tl-full-image-background .tl-media-twitter blockquote,.tl-slide.tl-full-image-background .tl-media-blockquote blockquote{text-shadow:1px 1px 2px #000!important}.tl-slide.tl-full-image-background .tl-media-twitter blockquote p,.tl-slide.tl-full-image-background .tl-media-blockquote blockquote p{text-shadow:1px 1px 2px #000!important}.tl-slide.tl-text-background .tl-text .tl-text-content-container{padding:20px;background:#000 transparent;background:rgba(0,0,0,.6);-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.tl-slide.tl-text-background .tl-text .tl-text-content-container h2{margin-top:5px}.tl-skinny .tl-slide{display:block;padding-top:10px}.tl-skinny .tl-slide .tl-slide-content-container{display:block;position:static;height:auto;height:100%;display:-webkit-flex;display:flex;align-items:center;-webkit-align-items:center}.tl-skinny .tl-slide .tl-slide-content-container .tl-slide-content{display:block;display:-webkit-flex;display:flex;flex-direction:column-reverse;-webkit-flex-direction:column-reverse;position:static;height:auto;padding-left:50px;padding-right:50px}.tl-skinny .tl-slide .tl-slide-content-container .tl-slide-content .tl-media{position:static;width:100%;height:auto;float:none;display:block;padding-top:20px;border-top:1px solid #e6e6e6}.tl-skinny .tl-slide .tl-slide-content-container .tl-slide-content .tl-text{display:block;height:auto;vertical-align:initial;position:static;width:100%;max-width:100%;min-width:0;float:none;padding:0}.tl-skinny .tl-slide .tl-slide-content-container .tl-slide-content .tl-text .tl-text-content-container{padding-left:10px;padding-right:10px;padding-bottom:10px}.tl-skinny .tl-slide.tl-slide.tl-full-color-background .tl-slide-content-container .tl-slide-content .tl-media,.tl-skinny .tl-slide.tl-full-image-background .tl-slide-content-container .tl-slide-content .tl-media{border-color:rgba(230,230,230,.25)}.tl-skinny .tl-slide.tl-slide-media-only .tl-slide-content-container .tl-slide-content{flex-direction:column;-webkit-flex-direction:column}.tl-skinny .tl-slide.tl-slide-media-only .tl-slide-content-container .tl-slide-content .tl-media{border-top:none;padding-top:0}.tl-mobile.tl-skinny .tl-slide .tl-slide-content-container .tl-slide-content .tl-media img,.tl-mobile.tl-skinny .tl-slide .tl-slide-content-container .tl-slide-content .tl-media embed,.tl-mobile.tl-skinny .tl-slide .tl-slide-content-container .tl-slide-content .tl-media object,.tl-mobile.tl-skinny .tl-slide .tl-slide-content-container .tl-slide-content .tl-media video,.tl-mobile.tl-skinny .tl-slide .tl-slide-content-container .tl-slide-content .tl-media iframe{max-height:175px}.tl-slidenav-previous,.tl-slidenav-next{position:absolute;top:45%;z-index:10;cursor:pointer}.tl-slidenav-previous .tl-slidenav-content-container,.tl-slidenav-next .tl-slidenav-content-container{height:200px;width:100px;position:absolute}.tl-slidenav-previous .tl-slidenav-title,.tl-slidenav-next .tl-slidenav-title,.tl-slidenav-previous .tl-slidenav-description,.tl-slidenav-next .tl-slidenav-description{width:80px;-webkit-line-clamp:2;line-clamp:2;text-overflow:ellipsis;filter:alpha(opacity=15);-khtml-opacity:.15;-moz-opacity:.15;opacity:.15}.tl-slidenav-previous .tl-slidenav-title small,.tl-slidenav-next .tl-slidenav-title small,.tl-slidenav-previous .tl-slidenav-description small,.tl-slidenav-next .tl-slidenav-description small{display:block}.tl-slidenav-previous .tl-slidenav-title,.tl-slidenav-next .tl-slidenav-title{margin-top:10px;font-size:11px;line-height:11px}.tl-slidenav-previous .tl-slidenav-description,.tl-slidenav-next .tl-slidenav-description{font-size:11px;margin-top:5px;filter:alpha(opacity=0);-khtml-opacity:0;-moz-opacity:0;opacity:0}.tl-slidenav-previous .tl-slidenav-description small,.tl-slidenav-next .tl-slidenav-description small{display:none}.tl-slidenav-previous .tl-slidenav-content-container .tl-slidenav-icon,.tl-slidenav-next .tl-slidenav-content-container .tl-slidenav-icon,.tl-slidenav-previous .tl-slidenav-content-container .tl-slidenav-title,.tl-slidenav-next .tl-slidenav-content-container .tl-slidenav-title,.tl-slidenav-previous .tl-slidenav-content-container .tl-slidenav-description,.tl-slidenav-next .tl-slidenav-content-container .tl-slidenav-description{text-shadow:1px 1px 1px #fff;color:#333}.tl-slidenav-previous .tl-slidenav-content-container.tl-slidenav-inverted .tl-slidenav-icon,.tl-slidenav-next .tl-slidenav-content-container.tl-slidenav-inverted .tl-slidenav-icon,.tl-slidenav-previous .tl-slidenav-content-container.tl-slidenav-inverted .tl-slidenav-title,.tl-slidenav-next .tl-slidenav-content-container.tl-slidenav-inverted .tl-slidenav-title,.tl-slidenav-previous .tl-slidenav-content-container.tl-slidenav-inverted .tl-slidenav-description,.tl-slidenav-next .tl-slidenav-content-container.tl-slidenav-inverted .tl-slidenav-description{color:#f2f2f2;text-shadow:1px 1px 1px #333}.tl-slidenav-next .tl-slidenav-icon,.tl-slidenav-previous .tl-slidenav-icon{font-family:tl-icons;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:32px;margin-bottom:5px}.tl-slidenav-next{text-align:right;margin-right:10px;right:100px}.tl-slidenav-next .tl-slidenav-title,.tl-slidenav-next .tl-slidenav-description{margin-left:20px}.tl-slidenav-next .tl-slidenav-icon{margin-left:76px}.tl-slidenav-next .tl-slidenav-icon:before{content:"\e64f"}.tl-slidenav-previous{text-align:left;margin-left:10px}.tl-slidenav-previous .tl-slidenav-icon{margin-left:0}.tl-slidenav-previous .tl-slidenav-icon:before{content:"\e650"}.tl-slidenav-previous:hover .tl-slidenav-title,.tl-slidenav-next:hover .tl-slidenav-title{filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1}.tl-slidenav-previous:hover .tl-slidenav-description,.tl-slidenav-next:hover .tl-slidenav-description{filter:alpha(opacity=50);-khtml-opacity:.5;-moz-opacity:.5;opacity:.5}.tl-slidenav-next:hover .tl-slidenav-icon{margin-left:80px}.tl-slidenav-previous:hover .tl-slidenav-icon{margin-left:-4px}.tl-skinny .tl-slidenav-next{right:32px}.tl-skinny .tl-slidenav-next .tl-slidenav-icon{margin-left:8px}.tl-skinny .tl-slidenav-previous .tl-slidenav-content-container,.tl-skinny .tl-slidenav-next .tl-slidenav-content-container{width:32px;height:32px}.tl-skinny .tl-slidenav-previous .tl-slidenav-title,.tl-skinny .tl-slidenav-next .tl-slidenav-title,.tl-skinny .tl-slidenav-previous .tl-slidenav-description,.tl-skinny .tl-slidenav-next .tl-slidenav-description{display:none}.tl-skinny .tl-slidenav-previous .tl-slidenav-icon,.tl-skinny .tl-slidenav-next .tl-slidenav-icon{filter:alpha(opacity=33);-khtml-opacity:.33;-moz-opacity:.33;opacity:.33}.tl-skinny .tl-slidenav-next:hover .tl-slidenav-icon{margin-left:12px;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1}.tl-skinny .tl-slidenav-previous:hover .tl-slidenav-icon{margin-left:-4px;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1}.tl-layout-landscape.tl-mobile .tl-slidenav-next:hover{right:70px}.tl-layout-landscape.tl-mobile .tl-slidenav-next:hover .tl-slidenav-icon{margin-left:8px;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1}.tl-layout-landscape.tl-mobile .tl-slidenav-next:active .tl-slidenav-icon{margin-left:0;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1}.tl-layout-landscape.tl-mobile .tl-slidenav-previous:hover .tl-slidenav-icon{margin-left:80px;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1}.tl-layout-landscape.tl-mobile .tl-slidenav-previous:active .tl-slidenav-icon{filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;margin-left:-4px}.tl-layout-portrait.tl-mobile .tl-slidenav-next:hover .tl-slidenav-icon{filter:alpha(opacity=33);-khtml-opacity:.33;-moz-opacity:.33;opacity:.33}.tl-layout-portrait.tl-mobile .tl-slidenav-next:active .tl-slidenav-icon{filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1}.tl-layout-portrait.tl-mobile .tl-slidenav-previous:hover .tl-slidenav-icon{filter:alpha(opacity=33);-khtml-opacity:.33;-moz-opacity:.33;opacity:.33}.tl-layout-portrait.tl-mobile .tl-slidenav-previous:active .tl-slidenav-icon{filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1}.tl-mobile .tl-slidenav-previous,.tl-skinny.tl-mobile .tl-slidenav-previous,.tl-skinny.tl-layout-landscape.tl-mobile .tl-slidenav-previous,.tl-skinny.tl-layout-portrait.tl-mobile .tl-slidenav-previous,.tl-mobile .tl-slidenav-next,.tl-skinny.tl-mobile .tl-slidenav-next,.tl-skinny.tl-layout-landscape.tl-mobile .tl-slidenav-next,.tl-skinny.tl-layout-portrait.tl-mobile .tl-slidenav-next{display:none}.tl-storyslider{width:100%;height:100%;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;position:relative;box-sizing:content-box;z-index:8}.tl-storyslider img,.tl-storyslider embed,.tl-storyslider object,.tl-storyslider video,.tl-storyslider iframe{max-width:100%;position:relative}.tl-storyslider .tl-slider-background{position:absolute;top:0;left:0;width:100%;height:100%;z-index:1}.tl-storyslider .tl-slider-touch-mask{width:100%;height:100%;z-index:25;top:0;left:0;position:absolute}.tl-storyslider .tl-slider-container-mask{text-align:center;width:100%;height:100%;position:relative;z-index:5}.tl-storyslider .tl-slider-container-mask .tl-slider-container{position:absolute;top:0;left:0;width:100%;height:100%;text-align:center}.tl-storyslider .tl-slider-container-mask .tl-slider-container .tl-slider-item-container{width:100%;height:100%;display:table-cell;vertical-align:middle}.tl-media{width:100%;min-width:50%;height:100%;float:left;margin-top:auto;margin-bottom:auto;position:relative}.tl-media .tl-media-content-container.tl-media-content-container-text{border-right:1px solid #e6e6e6;padding-right:20px}.tl-media .tl-media-content-container .tl-media-content{position:relative;*zoom:1}.tl-media .tl-media-content-container .tl-media-content:before,.tl-media .tl-media-content-container .tl-media-content:after{display:table;content:""}.tl-media .tl-media-content-container .tl-media-content:after{clear:both}.tl-media .tl-media-content-container .tl-media-content .tl-media-loaderror p{color:#f2f2f2;text-align:center}.tl-media .tl-media-content-container .tl-media-content .tl-media-loaderror p span{color:#f2f2f2}.tl-media .tl-media-content-container .tl-media-content .tl-media-loaderror [class^=tl-icon-],.tl-media .tl-media-content-container .tl-media-content .tl-media-loaderror [class*=" tl-icon-"]{font-size:28px;color:#f2f2f2;text-align:center}.tl-media .tl-media-content-container .tl-media-content img,.tl-media .tl-media-content-container .tl-media-content embed,.tl-media .tl-media-content-container .tl-media-content object,.tl-media .tl-media-content-container .tl-media-content video{max-width:100%;max-height:100%}.tl-slide-media-only .tl-media .tl-media-content-container.tl-media-content-container-text{border-right:none;padding-right:0}.tl-media-shadow{position:relative;z-index:1;-webkit-box-shadow:0 12px 10px -10px rgba(0,0,0,.6);-moz-box-shadow:0 12px 10px -10px rgba(0,0,0,.6);box-shadow:0 12px 10px -10px rgba(0,0,0,.6)}.tl-slide.tl-full-image-background a,.tl-slide.tl-full-color-background a,.tl-slide.tl-full-image-background .vcard a,.tl-slide.tl-full-color-background .vcard a{text-shadow:1px 1px 1px #000;color:#fff}.tl-slide.tl-full-image-background a:hover,.tl-slide.tl-full-color-background a:hover{text-decoration:underline;color:#c34528}.tl-credit{color:#999;text-align:right;display:block;margin:0 auto;margin-top:6px;font-size:10px;line-height:13px}.tl-caption{text-align:left;margin-right:auto;margin-left:auto;margin-top:10px;color:#666;font-size:11px;line-height:14px;text-rendering:optimizeLegibility;word-wrap:break-word}.tl-full-image-background .tl-media-shadow:before,.tl-full-color-background .tl-media-shadow:before,.tl-full-image-background .tl-media-shadow:after,.tl-full-color-background .tl-media-shadow:after{background:0 0;-webkit-box-shadow:0 0 0 #000;-moz-box-shadow:0 0 0 #000;box-shadow:0 0 0 #000}.tl-skinny .tl-media{width:100%;height:auto;float:none;display:block}.tl-skinny .tl-media .tl-media-content-container.tl-media-content-container-text{border-right:0;padding-right:0}.tl-skinny .tl-media .tl-media-content-container .tl-credit,.tl-skinny .tl-media .tl-media-content-container .tl-caption{margin-top:2px;padding-left:10px;padding-right:10px;font-size:8px}.tl-skinny .tl-media .tl-media-content-container .tl-credit{margin-top:0}.tl-mobile.tl-skinny .tl-media{width:100%;height:auto;float:none;display:block}.tl-mobile.tl-skinny .tl-media .tl-media-content-container.tl-media-content-container-text{border-right:0;padding-right:0}.tl-text{width:50%;max-width:50%;min-width:120px;padding:0 20px;display:table-cell;vertical-align:middle;text-align:left;text-shadow:none;color:#737373}.tl-text p{color:#737373}.tl-text h2.tl-headline-title,.tl-text h2.tl-headline{margin-top:0}.tl-text .tl-headline-date,.tl-text h3.tl-headline-date{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:15px;line-height:15px;font-weight:400;margin:0 0 3px;color:#b3b3b3}.tl-text .tl-headline-date small,.tl-text h3.tl-headline-date small{font-size:15px;line-height:15px;font-weight:400;color:#b3b3b3}.tl-text .tl-text-date{display:inline-block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:400;margin-top:10px;font-size:12px;color:#b3b3b3}.tl-full-image-background .tl-text,.tl-full-color-background .tl-text,.tl-full-image-background .tl-text p,.tl-full-color-background .tl-text p{color:#f2f2f2!important;text-shadow:1px 1px 2px #000}.tl-full-image-background .tl-text .tl-headline-date,.tl-full-color-background .tl-text .tl-headline-date,.tl-full-image-background .tl-text p .tl-headline-date,.tl-full-color-background .tl-text p .tl-headline-date,.tl-full-image-background .tl-text h3.tl-headline-date,.tl-full-color-background .tl-text h3.tl-headline-date,.tl-full-image-background .tl-text p h3.tl-headline-date,.tl-full-color-background .tl-text p h3.tl-headline-date{color:#f2f2f2!important}.tl-full-image-background .tl-text .tl-headline-date small,.tl-full-color-background .tl-text .tl-headline-date small,.tl-full-image-background .tl-text p .tl-headline-date small,.tl-full-color-background .tl-text p .tl-headline-date small,.tl-full-image-background .tl-text h3.tl-headline-date small,.tl-full-color-background .tl-text h3.tl-headline-date small,.tl-full-image-background .tl-text p h3.tl-headline-date small,.tl-full-color-background .tl-text p h3.tl-headline-date small{color:#f2f2f2!important}.tl-full-image-background .tl-text a:hover,.tl-full-color-background .tl-text a:hover,.tl-full-image-background .tl-text p a:hover,.tl-full-color-background .tl-text p a:hover{text-decoration:underline;color:#c34528}.tl-skinny .tl-text{width:100%;max-width:100%;min-width:auto;float:none;margin-top:20px}.tl-skinny .tl-text h2.tl-headline-title,.tl-skinny .tl-text h2.tl-headline{font-size:32px;line-height:36px}.tl-medium .tl-text h2.tl-headline-title,.tl-medium .tl-text h2.tl-headline{font-size:32px;line-height:36px}.tl-mobile.tl-skinny .tl-media .tl-media-image{max-height:250px!important}.tl-media .tl-media-twitter{text-align:left;clear:both}.tl-media .tl-media-twitter blockquote{margin:0;margin-right:15px;font-size:15px;line-height:21px;color:#333}.tl-media .tl-media-twitter blockquote p{font-size:28px;line-height:30px;color:#000}.tl-media .tl-media-twitter blockquote p:before{display:none}.tl-media .tl-media-twitter blockquote p:after{display:none}.tl-media .tl-media-twitter .tl-icon-twitter{color:#55acee}.tl-media .tl-media-twitter .vcard a:hover,.tl-media .tl-media-twitter .vcard a.tl-date:hover{text-decoration:none;color:#55acee}.tl-media .tl-media-twitter .vcard a:hover .fn,.tl-media .tl-media-twitter .vcard a.tl-date:hover .fn,.tl-media .tl-media-twitter .vcard a:hover .nickname,.tl-media .tl-media-twitter .vcard a.tl-date:hover .nickname{color:#55acee}.tl-slide-media-only .tl-media .tl-media-twitter{width:80%;margin-left:auto;margin-right:auto}.tl-mobile.tl-skinny .tl-media .tl-media-twitter blockquote p{font-size:15px;line-height:21px}.tl-skinny .tl-media .tl-media-twitter{margin-left:10px;margin-right:10px}.tl-skinny .tl-media .tl-media-twitter blockquote p{font-size:24px;line-height:26px}.tl-media .tl-media-blockquote{text-align:left;clear:both}.tl-media .tl-media-blockquote blockquote{margin:0;margin-right:15px;text-align:left;font-size:28px;line-height:30px;color:#333}.tl-media .tl-media-blockquote blockquote p{font-size:28px;line-height:30px;color:#333}.tl-media .tl-media-blockquote blockquote p:before,.tl-media .tl-media-blockquote blockquote p:after{display:inline-block;font-size:36px}.tl-media .tl-media-blockquote blockquote p:before{content:open-quote;margin-right:5px}.tl-media .tl-media-blockquote blockquote p:after{content:close-quote;margin-left:3px}.tl-media .tl-media-blockquote blockquote cite{font-size:15px;line-height:21px;color:#999;text-align:right;margin-top:15px}.tl-slide-media-only .tl-media .tl-media-blockquote{border-right:0;width:80%;margin-left:auto;margin-right:auto}@media only screen and (max-width:800px),only screen and (max-device-width:800px){.tl-media .tl-media-blockquote blockquote p{font-size:24px;line-height:26px}}@media only screen and (max-width:500px),only screen and (max-device-width:500px){.tl-media .tl-media-blockquote blockquote p{font-size:15px;line-height:21px}}.tl-mobile.tl-skinny .tl-media .tl-media-instagram{max-height:250px!important}.tl-media .tl-media-profile{border-radius:50%}.tl-media .tl-media-iframe{width:100%;height:100%}.tl-media .tl-media-iframe iframe{width:100%;height:100%}.tl-media .tl-media-wikipedia{text-align:left;margin-left:auto;margin-right:auto;clear:both}.tl-media .tl-media-wikipedia .tl-icon-wikipedia{font-size:32px;margin-right:10px;float:left;padding-top:3px}.tl-media .tl-media-wikipedia .tl-wikipedia-pageimage{float:left;margin-right:10px;margin-bottom:5px;margin-top:5px}.tl-media .tl-media-wikipedia .tl-wikipedia-title{margin-left:60px;padding-left:10px;border-left:1px solid #e6e6e6;margin-bottom:10px}.tl-media .tl-media-wikipedia .tl-wikipedia-source{font-size:13px;line-height:15px;font-style:italic;margin-top:3px;display:block;color:rgba(0,0,0,.5)}.tl-media .tl-media-wikipedia h4{margin-top:0;margin-bottom:0}.tl-media .tl-media-wikipedia h4 a{color:#000;text-decoration:none}.tl-media .tl-media-wikipedia p{font-size:13px;line-height:19px}.tl-slide-media-only .tl-media .tl-media-wikipedia{border-right:0;border-top:1px solid #e6e6e6;width:80%;margin-left:auto;margin-right:auto;margin-top:25px;padding-top:25px}.tl-slide.tl-full-image-background .tl-media .tl-media-wikipedia,.tl-slide.tl-full-color-background .tl-media .tl-media-wikipedia{padding:20px;background:#000 transparent;background:rgba(0,0,0,.6);-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.tl-slide.tl-full-image-background .tl-media .tl-media-wikipedia h4 a,.tl-slide.tl-full-color-background .tl-media .tl-media-wikipedia h4 a{color:#fff!important;text-shadow:1px 1px 1px #000!important}.tl-slide.tl-full-image-background .tl-media .tl-media-wikipedia a:hover,.tl-slide.tl-full-color-background .tl-media .tl-media-wikipedia a:hover{text-decoration:underline;color:#c34528}.tl-slide.tl-full-image-background .tl-media .tl-media-wikipedia .tl-wikipedia-title,.tl-slide.tl-full-color-background .tl-media .tl-media-wikipedia .tl-wikipedia-title{border-color:rgba(230,230,230,.25)}.tl-slide.tl-full-image-background .tl-media .tl-media-wikipedia .tl-wikipedia-source,.tl-slide.tl-full-color-background .tl-media .tl-media-wikipedia .tl-wikipedia-source{color:rgba(230,230,230,.85)}.tl-mobile.tl-skinny .tl-media .tl-media-wikipedia,.tl-skinny .tl-media .tl-media-wikipedia{margin-left:10px;margin-right:10px}.tl-media .tl-media-website{text-align:left;margin-left:auto;margin-right:auto;clear:both}.tl-media .tl-media-website .tl-media-website-description{font-size:16px;line-height:19px;font-style:italic;margin-bottom:10px;text-transform:uppercase}.tl-media .tl-media-website h4{margin-top:0;margin-bottom:0;line-height:1}.tl-media .tl-media-website h4 a{color:#000;text-decoration:none}.tl-media .tl-media-website p{font-size:13px;line-height:19px}.tl-media .tl-media-content-container .tl-media-content .tl-media-website img{float:right;max-width:120px;max-height:120px;margin:4px 0 0 15px}.tl-media .tl-media-content-container .tl-media-content .tl-media-website img.tl-media-website-icon{max-width:16px;max-height:16px;float:none;margin:0;margin-right:3px}.tl-slide.tl-full-image-background .tl-media .tl-media-website,.tl-slide.tl-full-color-background .tl-media .tl-media-website{padding:20px;background:#000 transparent;background:rgba(0,0,0,.6);-webkit-border-radius:7px;-moz-border-radius:7px;border-radius:7px}.tl-slide.tl-full-image-background .tl-media .tl-media-website h4 a,.tl-slide.tl-full-color-background .tl-media .tl-media-website h4 a{color:#fff!important;text-shadow:1px 1px 1px #000!important}.tl-slide.tl-full-image-background .tl-media .tl-media-website a:hover,.tl-slide.tl-full-color-background .tl-media .tl-media-website a:hover{text-decoration:underline;color:#c34528}.tl-mobile.tl-skinny .tl-media .tl-media-website{margin-left:10px;margin-right:10px}.tl-timeline{width:100%;height:100%;font-size:16px;line-height:normal;overflow:hidden;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;background-color:#fff;color:#737373;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.tl-timeline.tl-timeline-embed{box-sizing:border-box;border-top:1px solid #ccc;border-bottom:1px solid #ccc;border-radius:0}.tl-timeline.tl-timeline-full-embed{box-sizing:border-box;border:1px solid #ccc;border-radius:8px}.tl-layout-portrait .tl-storyslider{-webkit-box-shadow:0 -3px 6px rgba(0,0,0,.2);-moz-box-shadow:0 -3px 6px rgba(0,0,0,.2);box-shadow:0 -3px 6px rgba(0,0,0,.2)}.tl-rtl .tl-text-content,.tl-rtl .tl-headline,.tl-rtl .tl-media-blockquote,.tl-rtl .tl-headline-date,.tl-rtl .tl-timeline blockquote p,.tl-rtl .tl-media-website,.tl-rtl .tl-media-wikipedia,.tl-rtl .tl-media .tl-media-blockquote blockquote,.tl-rtl .blockquote,.tl-rtl blockquote p,.tl-rtl .tl-text-content p{text-align:right;direction:rtl}.tl-rtl .tl-slide-media-only .tl-headline,.tl-rtl .tl-slide-media-only .tl-headline-date{text-align:center}.tl-rtl .tl-timemarker-text{margin-right:35px}.tl-rtl .tl-timemarker-content-container .tl-timemarker-content .tl-timemarker-media-container{float:right}.tl-rtl .tl-caption{text-align:right}.tl-rtl .tl-credit{text-align:left} \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/resources/vendor/timeline.js b/www/wiki/extensions/ModernTimeline/resources/vendor/timeline.js
new file mode 100644
index 00000000..5b06ea5c
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/resources/vendor/timeline.js
@@ -0,0 +1,14042 @@
+/*
+ TimelineJS - ver. 3.6.5 - 2019-05-02
+ Copyright (c) 2012-2016 Northwestern University
+ a project of the Northwestern University Knight Lab, originally created by Zach Wise
+ https://github.com/NUKnightLab/TimelineJS3
+ This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
+ If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+*/
+
+/* **********************************************
+ Begin TL.js
+********************************************** */
+
+/*!
+ TL
+*/
+
+(function (root) {
+ root.TL = {
+ VERSION: '0.1',
+ _originalL: root.TL
+ };
+}(this));
+
+/* TL.Debug
+ Debug mode
+================================================== */
+TL.debug = false;
+
+
+
+/* TL.Bind
+================================================== */
+TL.Bind = function (/*Function*/ fn, /*Object*/ obj) /*-> Object*/ {
+ return function () {
+ return fn.apply(obj, arguments);
+ };
+};
+
+
+
+/* Trace (console.log)
+================================================== */
+trace = function( msg ) {
+ if (TL.debug) {
+ if (window.console) {
+ console.log(msg);
+ } else if ( typeof( jsTrace ) != 'undefined' ) {
+ jsTrace.send( msg );
+ } else {
+ //alert(msg);
+ }
+ }
+}
+
+
+/* **********************************************
+ Begin TL.Error.js
+********************************************** */
+
+/* Timeline Error class */
+
+function TL_Error(message_key, detail) {
+ this.name = 'TL.Error';
+ this.message = message_key || 'error';
+ this.message_key = this.message;
+ this.detail = detail || '';
+
+ // Grab stack?
+ var e = new Error();
+ if(e.hasOwnProperty('stack')) {
+ this.stack = e.stack;
+ }
+}
+
+TL_Error.prototype = Object.create(Error.prototype);
+TL_Error.prototype.constructor = TL_Error;
+
+TL.Error = TL_Error;
+
+
+/* **********************************************
+ Begin TL.Util.js
+********************************************** */
+
+/* TL.Util
+ Class of utilities
+================================================== */
+
+TL.Util = {
+ mergeData: function(data_main, data_to_merge) {
+ var x;
+ for (x in data_to_merge) {
+ if (Object.prototype.hasOwnProperty.call(data_to_merge, x)) {
+ data_main[x] = data_to_merge[x];
+ }
+ }
+ return data_main;
+ },
+
+ // like TL.Util.mergeData but takes an arbitrarily long list of sources to merge.
+ extend: function (/*Object*/ dest) /*-> Object*/ { // merge src properties into dest
+ var sources = Array.prototype.slice.call(arguments, 1);
+ for (var j = 0, len = sources.length, src; j < len; j++) {
+ src = sources[j] || {};
+ TL.Util.mergeData(dest, src);
+ }
+ return dest;
+ },
+
+ isEven: function(n) {
+ return n == parseFloat(n)? !(n%2) : void 0;
+ },
+
+ isTrue: function(s) {
+ if (s == null) return false;
+ return s == true || String(s).toLowerCase() == 'true' || Number(s) == 1;
+ },
+
+ findArrayNumberByUniqueID: function(id, array, prop, defaultVal) {
+ var _n = defaultVal || 0;
+
+ for (var i = 0; i < array.length; i++) {
+ if (array[i].data[prop] == id) {
+ _n = i;
+ }
+ };
+
+ return _n;
+ },
+
+ convertUnixTime: function(str) {
+ var _date, _months, _year, _month, _day, _time, _date_array = [],
+ _date_str = {
+ ymd:"",
+ time:"",
+ time_array:[],
+ date_array:[],
+ full_array:[]
+ };
+
+ _date_str.ymd = str.split(" ")[0];
+ _date_str.time = str.split(" ")[1];
+ _date_str.date_array = _date_str.ymd.split("-");
+ _date_str.time_array = _date_str.time.split(":");
+ _date_str.full_array = _date_str.date_array.concat(_date_str.time_array)
+
+ for(var i = 0; i < _date_str.full_array.length; i++) {
+ _date_array.push( parseInt(_date_str.full_array[i]) )
+ }
+
+ _date = new Date(_date_array[0], _date_array[1], _date_array[2], _date_array[3], _date_array[4], _date_array[5]);
+ _months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+ _year = _date.getFullYear();
+ _month = _months[_date.getMonth()];
+ _day = _date.getDate();
+ _time = _month + ', ' + _day + ' ' + _year;
+
+ return _time;
+ },
+
+ setData: function (obj, data) {
+ obj.data = TL.Util.extend({}, obj.data, data);
+ if (obj.data.unique_id === "") {
+ obj.data.unique_id = TL.Util.unique_ID(6);
+ }
+ },
+
+ stamp: (function () {
+ var lastId = 0, key = '_tl_id';
+
+
+ return function (/*Object*/ obj) {
+ obj[key] = obj[key] || ++lastId;
+ return obj[key];
+ };
+ }()),
+
+ isArray: (function () {
+ // Use compiler's own isArray when available
+ if (Array.isArray) {
+ return Array.isArray;
+ }
+
+ // Retain references to variables for performance
+ // optimization
+ var objectToStringFn = Object.prototype.toString,
+ arrayToStringResult = objectToStringFn.call([]);
+
+ return function (subject) {
+ return objectToStringFn.call(subject) === arrayToStringResult;
+ };
+ }()),
+
+ getRandomNumber: function(range) {
+ return Math.floor(Math.random() * range);
+ },
+
+ unique_ID: function(size, prefix) {
+
+ var getRandomNumber = function(range) {
+ return Math.floor(Math.random() * range);
+ };
+
+ var getRandomChar = function() {
+ var chars = "abcdefghijklmnopqurstuvwxyz";
+ return chars.substr( getRandomNumber(32), 1 );
+ };
+
+ var randomID = function(size) {
+ var str = "";
+ for(var i = 0; i < size; i++) {
+ str += getRandomChar();
+ }
+ return str;
+ };
+
+ if (prefix) {
+ return prefix + "-" + randomID(size);
+ } else {
+ return "tl-" + randomID(size);
+ }
+ },
+
+ ensureUniqueKey: function(obj, candidate) {
+ if (!candidate) { candidate = TL.Util.unique_ID(6); }
+
+ if (!(candidate in obj)) { return candidate; }
+
+ var root = candidate.match(/^(.+)(-\d+)?$/)[1];
+ var similar_ids = [];
+ // get an alternative
+ for (key in obj) {
+ if (key.match(/^(.+?)(-\d+)?$/)[1] == root) {
+ similar_ids.push(key);
+ }
+ }
+ candidate = root + "-" + (similar_ids.length + 1);
+
+ for (var counter = similar_ids.length; similar_ids.indexOf(candidate) != -1; counter++) {
+ candidate = root + '-' + counter;
+ }
+
+ return candidate;
+ },
+
+
+ htmlify: function(str) {
+ //if (str.match(/<\s*p[^>]*>([^<]*)<\s*\/\s*p\s*>/)) {
+ if (str.match(/<p>[\s\S]*?<\/p>/)) {
+
+ return str;
+ } else {
+ return "<p>" + str + "</p>";
+ }
+ },
+
+ unhtmlify: function(str) {
+ str = str.replace(/(<[^>]*>)+/g, '');
+ return str.replace('"', "'");
+ },
+
+ /* * Turns plain text links into real links
+ ================================================== */
+ linkify: function(text,targets,is_touch) {
+
+ var make_link = function(url, link_text, prefix) {
+ if (!prefix) {
+ prefix = "";
+ }
+ var MAX_LINK_TEXT_LENGTH = 30;
+ if (link_text && link_text.length > MAX_LINK_TEXT_LENGTH) {
+ link_text = link_text.substring(0,MAX_LINK_TEXT_LENGTH) + "\u2026"; // unicode ellipsis
+ }
+ return prefix + "<a class='tl-makelink' href='" + url + "' onclick='void(0)'>" + link_text + "</a>";
+ }
+ // http://, https://, ftp://
+ var urlPattern = /\b(?:https?|ftp):\/\/([a-z0-9-+&@#\/%?=~_|!:,.;]*[a-z0-9-+&@#\/%=~_|])/gim;
+
+ // www. sans http:// or https://
+ var pseudoUrlPattern = /(^|[^\/>])(www\.[\S]+(\b|$))/gim;
+
+ // Email addresses
+ var emailAddressPattern = /([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)/gim;
+
+
+ return text
+ .replace(urlPattern, function(match, url_sans_protocol, offset, string) {
+ // Javascript doesn't support negative lookbehind assertions, so
+ // we need to handle risk of matching URLs in legit hrefs
+ if (offset > 0) {
+ var prechar = string[offset-1];
+ if (prechar == '"' || prechar == "'" || prechar == "=") {
+ return match;
+ }
+ }
+ return make_link(match, url_sans_protocol);
+ })
+ .replace(pseudoUrlPattern, function(match, beforePseudo, pseudoUrl, offset, string) {
+ return make_link('http://' + pseudoUrl, pseudoUrl, beforePseudo);
+ })
+ .replace(emailAddressPattern, function(match, email, offset, string) {
+ return make_link('mailto:' + email, email);
+ });
+ },
+
+ unlinkify: function(text) {
+ if(!text) return text;
+ text = text.replace(/<a\b[^>]*>/i,"");
+ text = text.replace(/<\/a>/i, "");
+ return text;
+ },
+
+ getParamString: function (obj) {
+ var params = [];
+ for (var i in obj) {
+ if (obj.hasOwnProperty(i)) {
+ params.push(i + '=' + obj[i]);
+ }
+ }
+ return '?' + params.join('&');
+ },
+
+ formatNum: function (num, digits) {
+ var pow = Math.pow(10, digits || 5);
+ return Math.round(num * pow) / pow;
+ },
+
+ falseFn: function () {
+ return false;
+ },
+
+ requestAnimFrame: (function () {
+ function timeoutDefer(callback) {
+ window.setTimeout(callback, 1000 / 60);
+ }
+
+ var requestFn = window.requestAnimationFrame ||
+ window.webkitRequestAnimationFrame ||
+ window.mozRequestAnimationFrame ||
+ window.oRequestAnimationFrame ||
+ window.msRequestAnimationFrame ||
+ timeoutDefer;
+
+ return function (callback, context, immediate, contextEl) {
+ callback = context ? TL.Util.bind(callback, context) : callback;
+ if (immediate && requestFn === timeoutDefer) {
+ callback();
+ } else {
+ requestFn(callback, contextEl);
+ }
+ };
+ }()),
+
+ bind: function (/*Function*/ fn, /*Object*/ obj) /*-> Object*/ {
+ return function () {
+ return fn.apply(obj, arguments);
+ };
+ },
+
+ template: function (str, data) {
+ return str.replace(/\{ *([\w_]+) *\}/g, function (str, key) {
+ var value = data[key];
+ if (!data.hasOwnProperty(key)) {
+ throw new TL.Error("template_value_err", str);
+ }
+ return value;
+ });
+ },
+
+ hexToRgb: function(hex) {
+ // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
+ if (TL.Util.css_named_colors[hex.toLowerCase()]) {
+ hex = TL.Util.css_named_colors[hex.toLowerCase()];
+ }
+ var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
+ hex = hex.replace(shorthandRegex, function(m, r, g, b) {
+ return r + r + g + g + b + b;
+ });
+
+ var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
+ return result ? {
+ r: parseInt(result[1], 16),
+ g: parseInt(result[2], 16),
+ b: parseInt(result[3], 16)
+ } : null;
+ },
+ // given an object with r, g, and b keys, or a string of the form 'rgb(mm,nn,ll)', return a CSS hex string including the leading '#' character
+ rgbToHex: function(rgb) {
+ var r,g,b;
+ if (typeof(rgb) == 'object') {
+ r = rgb.r;
+ g = rgb.g;
+ b = rgb.b;
+ } else if (typeof(rgb.match) == 'function'){
+ var parts = rgb.match(/^rgb\((\d+),(\d+),(\d+)\)$/);
+ if (parts) {
+ r = parts[1];
+ g = parts[2];
+ b = parts[3];
+ }
+ }
+ if (isNaN(r) || isNaN(b) || isNaN(g)) {
+ throw new TL.Error("invalid_rgb_err");
+ }
+ return "#" + TL.Util.intToHexString(r) + TL.Util.intToHexString(g) + TL.Util.intToHexString(b);
+ },
+ colorObjToHex: function(o) {
+ var parts = [o.r, o.g, o.b];
+ return TL.Util.rgbToHex("rgb(" + parts.join(',') + ")")
+ },
+ css_named_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",
+ "cyan": "#00ffff",
+ "darkblue": "#00008b",
+ "darkcyan": "#008b8b",
+ "darkgoldenrod": "#b8860b",
+ "darkgray": "#a9a9a9",
+ "darkgreen": "#006400",
+ "darkkhaki": "#bdb76b",
+ "darkmagenta": "#8b008b",
+ "darkolivegreen": "#556b2f",
+ "darkorange": "#ff8c00",
+ "darkorchid": "#9932cc",
+ "darkred": "#8b0000",
+ "darksalmon": "#e9967a",
+ "darkseagreen": "#8fbc8f",
+ "darkslateblue": "#483d8b",
+ "darkslategray": "#2f4f4f",
+ "darkturquoise": "#00ced1",
+ "darkviolet": "#9400d3",
+ "deeppink": "#ff1493",
+ "deepskyblue": "#00bfff",
+ "dimgray": "#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",
+ "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",
+ "lightpink": "#ffb6c1",
+ "lightsalmon": "#ffa07a",
+ "lightseagreen": "#20b2aa",
+ "lightskyblue": "#87cefa",
+ "lightslategray": "#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",
+ "snow": "#fffafa",
+ "springgreen": "#00ff7f",
+ "steelblue": "#4682b4",
+ "tan": "#d2b48c",
+ "teal": "#008080",
+ "thistle": "#d8bfd8",
+ "tomato": "#ff6347",
+ "turquoise": "#40e0d0",
+ "violet": "#ee82ee",
+ "wheat": "#f5deb3",
+ "white": "#ffffff",
+ "whitesmoke": "#f5f5f5",
+ "yellow": "#ffff00",
+ "yellowgreen": "#9acd32"
+ },
+ ratio: {
+ square: function(size) {
+ var s = {
+ w: 0,
+ h: 0
+ }
+ if (size.w > size.h && size.h > 0) {
+ s.h = size.h;
+ s.w = size.h;
+ } else {
+ s.w = size.w;
+ s.h = size.w;
+ }
+ return s;
+ },
+
+ r16_9: function(size) {
+ if (size.w !== null && size.w !== "") {
+ return Math.round((size.w / 16) * 9);
+ } else if (size.h !== null && size.h !== "") {
+ return Math.round((size.h / 9) * 16);
+ } else {
+ return 0;
+ }
+ },
+ r4_3: function(size) {
+ if (size.w !== null && size.w !== "") {
+ return Math.round((size.w / 4) * 3);
+ } else if (size.h !== null && size.h !== "") {
+ return Math.round((size.h / 3) * 4);
+ }
+ }
+ },
+ getObjectAttributeByIndex: function(obj, index) {
+ if(typeof obj != 'undefined') {
+ var i = 0;
+ for (var attr in obj){
+ if (index === i){
+ return obj[attr];
+ }
+ i++;
+ }
+ return "";
+ } else {
+ return "";
+ }
+
+ },
+ getUrlVars: function(string) {
+ var str,
+ vars = [],
+ hash,
+ hashes;
+
+ str = string.toString();
+
+ if (str.match('&#038;')) {
+ str = str.replace("&#038;", "&");
+ } else if (str.match('&#38;')) {
+ str = str.replace("&#38;", "&");
+ } else if (str.match('&amp;')) {
+ str = str.replace("&amp;", "&");
+ }
+
+ hashes = str.slice(str.indexOf('?') + 1).split('&');
+
+ for(var i = 0; i < hashes.length; i++) {
+ hash = hashes[i].split('=');
+ vars.push(hash[0]);
+ vars[hash[0]] = hash[1];
+ }
+
+
+ return vars;
+ },
+ /**
+ * Remove any leading or trailing whitespace from the given string.
+ * If `str` is undefined or does not have a `replace` function, return
+ * an empty string.
+ */
+ trim: function(str) {
+ if (str && typeof(str.replace) == 'function') {
+ return str.replace(/^\s+|\s+$/g, '');
+ }
+ return "";
+ },
+
+ slugify: function(str) {
+ // borrowed from http://stackoverflow.com/a/5782563/102476
+ str = TL.Util.trim(str);
+ str = str.toLowerCase();
+
+ // remove accents, swap ñ for n, etc
+ var from = "ãà áäâẽèéëêìíïîõòóöôùúüûñç·/_,:;";
+ var to = "aaaaaeeeeeiiiiooooouuuunc------";
+ for (var i=0, l=from.length ; i<l ; i++) {
+ str = str.replace(new RegExp(from.charAt(i), 'g'), to.charAt(i));
+ }
+
+ str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
+ .replace(/\s+/g, '-') // collapse whitespace and replace by -
+ .replace(/-+/g, '-'); // collapse dashes
+
+ str = str.replace(/^([0-9])/,'_$1');
+ return str;
+ },
+ maxDepth: function(ary) {
+ // given a sorted array of 2-tuples of numbers, count how many "deep" the items are.
+ // that is, what is the maximum number of tuples that occupy any one moment
+ // each tuple should also be sorted
+ var stack = [];
+ var max_depth = 0;
+ for (var i = 0; i < ary.length; i++) {
+
+ stack.push(ary[i]);
+ if (stack.length > 1) {
+ var top = stack[stack.length - 1]
+ var bottom_idx = -1;
+ for (var j = 0; j < stack.length - 1; j++) {
+ if (stack[j][1] < top[0]) {
+ bottom_idx = j;
+ }
+ };
+ if (bottom_idx >= 0) {
+ stack = stack.slice(bottom_idx + 1);
+ }
+
+ }
+
+ if (stack.length > max_depth) {
+ max_depth = stack.length;
+ }
+ };
+ return max_depth;
+ },
+
+ pad: function (val, len) {
+ val = String(val);
+ len = len || 2;
+ while (val.length < len) val = "0" + val;
+ return val;
+ },
+ intToHexString: function(i) {
+ return TL.Util.pad(parseInt(i,10).toString(16));
+ },
+ findNextGreater: function(list, current, default_value) {
+ // given a sorted list and a current value which *might* be in the list,
+ // return the next greatest value if the current value is >= the last item in the list, return default,
+ // or if default is undefined, return input value
+ for (var i = 0; i < list.length; i++) {
+ if (current < list[i]) {
+ return list[i];
+ }
+ }
+
+ return (default_value) ? default_value : current;
+ },
+
+ findNextLesser: function(list, current, default_value) {
+ // given a sorted list and a current value which *might* be in the list,
+ // return the next lesser value if the current value is <= the last item in the list, return default,
+ // or if default is undefined, return input value
+ for (var i = list.length - 1; i >= 0; i--) {
+ if (current > list[i]) {
+ return list[i];
+ }
+ }
+
+ return (default_value) ? default_value : current;
+ },
+
+ isEmptyObject: function(o) {
+ var properties = []
+ if (Object.keys) {
+ properties = Object.keys(o);
+ } else { // all this to support IE 8
+ for (var p in o) if (Object.prototype.hasOwnProperty.call(o,p)) properties.push(p);
+ }
+ for (var i = 0; i < properties.length; i++) {
+ var k = properties[i];
+ if (o[k] != null && typeof o[k] != "string") return false;
+ if (TL.Util.trim(o[k]).length != 0) return false;
+ }
+ return true;
+ },
+ parseYouTubeTime: function(s) {
+ // given a YouTube start time string in a reasonable format, reduce it to a number of seconds as an integer.
+ if (typeof(s) == 'string') {
+ parts = s.match(/^\s*(\d+h)?(\d+m)?(\d+s)?\s*/i);
+ if (parts) {
+ var hours = parseInt(parts[1]) || 0;
+ var minutes = parseInt(parts[2]) || 0;
+ var seconds = parseInt(parts[3]) || 0;
+ return seconds + (minutes * 60) + (hours * 60 * 60);
+ }
+ } else if (typeof(s) == 'number') {
+ return s;
+ }
+ return 0;
+ },
+ /**
+ * Try to make seamless the process of interpreting a URL to a web page which embeds an image for sharing purposes
+ * as a direct image link. Some services have predictable transformations we can use rather than explain to people
+ * this subtlety.
+ */
+ transformImageURL: function(url) {
+ return url.replace(/(.*)www.dropbox.com\/(.*)/, '$1dl.dropboxusercontent.com/$2')
+ },
+
+ base58: (function(alpha) {
+ var alphabet = alpha || '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ',
+ base = alphabet.length;
+ return {
+ encode: function(enc) {
+ if(typeof enc!=='number' || enc !== parseInt(enc))
+ throw '"encode" only accepts integers.';
+ var encoded = '';
+ while(enc) {
+ var remainder = enc % base;
+ enc = Math.floor(enc / base);
+ encoded = alphabet[remainder].toString() + encoded;
+ }
+ return encoded;
+ },
+ decode: function(dec) {
+ if(typeof dec!=='string')
+ throw '"decode" only accepts strings.';
+ var decoded = 0;
+ while(dec) {
+ var alphabetPosition = alphabet.indexOf(dec[0]);
+ if (alphabetPosition < 0)
+ throw '"decode" can\'t find "' + dec[0] + '" in the alphabet: "' + alphabet + '"';
+ var powerOf = dec.length - 1;
+ decoded += alphabetPosition * (Math.pow(base, powerOf));
+ dec = dec.substring(1);
+ }
+ return decoded;
+ }
+ };
+ })()
+
+};
+
+
+/* **********************************************
+ Begin TL.Data.js
+********************************************** */
+
+// Expects TL to be visible in scope
+
+;(function(TL){
+ /* Zepto v1.1.2-15-g59d3fe5 - zepto event ajax form ie - zeptojs.com/license */
+
+ var Zepto = (function() {
+ var undefined, key, $, classList, emptyArray = [], slice = emptyArray.slice, filter = emptyArray.filter,
+ document = window.document,
+ elementDisplay = {}, classCache = {},
+ cssNumber = { 'column-count': 1, 'columns': 1, 'font-weight': 1, 'line-height': 1,'opacity': 1, 'z-index': 1, 'zoom': 1 },
+ fragmentRE = /^\s*<(\w+|!)[^>]*>/,
+ singleTagRE = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+ tagExpanderRE = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+ rootNodeRE = /^(?:body|html)$/i,
+ capitalRE = /([A-Z])/g,
+
+ // special attributes that should be get/set via method calls
+ methodAttributes = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],
+
+ adjacencyOperators = [ 'after', 'prepend', 'before', 'append' ],
+ table = document.createElement('table'),
+ tableRow = document.createElement('tr'),
+ containers = {
+ 'tr': document.createElement('tbody'),
+ 'tbody': table, 'thead': table, 'tfoot': table,
+ 'td': tableRow, 'th': tableRow,
+ '*': document.createElement('div')
+ },
+ readyRE = /complete|loaded|interactive/,
+ classSelectorRE = /^\.([\w-]+)$/,
+ idSelectorRE = /^#([\w-]*)$/,
+ simpleSelectorRE = /^[\w-]*$/,
+ class2type = {},
+ toString = class2type.toString,
+ zepto = {},
+ camelize, uniq,
+ tempParent = document.createElement('div'),
+ propMap = {
+ 'tabindex': 'tabIndex',
+ 'readonly': 'readOnly',
+ 'for': 'htmlFor',
+ 'class': 'className',
+ 'maxlength': 'maxLength',
+ 'cellspacing': 'cellSpacing',
+ 'cellpadding': 'cellPadding',
+ 'rowspan': 'rowSpan',
+ 'colspan': 'colSpan',
+ 'usemap': 'useMap',
+ 'frameborder': 'frameBorder',
+ 'contenteditable': 'contentEditable'
+ },
+ isArray = Array.isArray ||
+ function(object){ return object instanceof Array }
+
+ zepto.matches = function(element, selector) {
+ if (!selector || !element || element.nodeType !== 1) return false
+ var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector ||
+ element.oMatchesSelector || element.matchesSelector
+ if (matchesSelector) return matchesSelector.call(element, selector)
+ // fall back to performing a selector:
+ var match, parent = element.parentNode, temp = !parent
+ if (temp) (parent = tempParent).appendChild(element)
+ match = ~zepto.qsa(parent, selector).indexOf(element)
+ temp && tempParent.removeChild(element)
+ return match
+ }
+
+ function type(obj) {
+ return obj == null ? String(obj) :
+ class2type[toString.call(obj)] || "object"
+ }
+
+ function isFunction(value) { return type(value) == "function" }
+ function isWindow(obj) { return obj != null && obj == obj.window }
+ function isDocument(obj) { return obj != null && obj.nodeType == obj.DOCUMENT_NODE }
+ function isObject(obj) { return type(obj) == "object" }
+ function isPlainObject(obj) {
+ return isObject(obj) && !isWindow(obj) && Object.getPrototypeOf(obj) == Object.prototype
+ }
+ function likeArray(obj) { return typeof obj.length == 'number' }
+
+ function compact(array) { return filter.call(array, function(item){ return item != null }) }
+ function flatten(array) { return array.length > 0 ? $.fn.concat.apply([], array) : array }
+ camelize = function(str){ return str.replace(/-+(.)?/g, function(match, chr){ return chr ? chr.toUpperCase() : '' }) }
+ function dasherize(str) {
+ return str.replace(/::/g, '/')
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
+ .replace(/([a-z\d])([A-Z])/g, '$1_$2')
+ .replace(/_/g, '-')
+ .toLowerCase()
+ }
+ uniq = function(array){ return filter.call(array, function(item, idx){ return array.indexOf(item) == idx }) }
+
+ function classRE(name) {
+ return name in classCache ?
+ classCache[name] : (classCache[name] = new RegExp('(^|\\s)' + name + '(\\s|$)'))
+ }
+
+ function maybeAddPx(name, value) {
+ return (typeof value == "number" && !cssNumber[dasherize(name)]) ? value + "px" : value
+ }
+
+ function defaultDisplay(nodeName) {
+ var element, display
+ if (!elementDisplay[nodeName]) {
+ element = document.createElement(nodeName)
+ document.body.appendChild(element)
+ display = getComputedStyle(element, '').getPropertyValue("display")
+ element.parentNode.removeChild(element)
+ display == "none" && (display = "block")
+ elementDisplay[nodeName] = display
+ }
+ return elementDisplay[nodeName]
+ }
+
+ function children(element) {
+ return 'children' in element ?
+ slice.call(element.children) :
+ $.map(element.childNodes, function(node){ if (node.nodeType == 1) return node })
+ }
+
+ // `$.zepto.fragment` takes a html string and an optional tag name
+ // to generate DOM nodes nodes from the given html string.
+ // The generated DOM nodes are returned as an array.
+ // This function can be overriden in plugins for example to make
+ // it compatible with browsers that don't support the DOM fully.
+ zepto.fragment = function(html, name, properties) {
+ var dom, nodes, container
+
+ // A special case optimization for a single tag
+ if (singleTagRE.test(html)) dom = $(document.createElement(RegExp.$1))
+
+ if (!dom) {
+ if (html.replace) html = html.replace(tagExpanderRE, "<$1></$2>")
+ if (name === undefined) name = fragmentRE.test(html) && RegExp.$1
+ if (!(name in containers)) name = '*'
+
+ container = containers[name]
+ container.innerHTML = '' + html
+ dom = $.each(slice.call(container.childNodes), function(){
+ container.removeChild(this)
+ })
+ }
+
+ if (isPlainObject(properties)) {
+ nodes = $(dom)
+ $.each(properties, function(key, value) {
+ if (methodAttributes.indexOf(key) > -1) nodes[key](value)
+ else nodes.attr(key, value)
+ })
+ }
+
+ return dom
+ }
+
+ // `$.zepto.Z` swaps out the prototype of the given `dom` array
+ // of nodes with `$.fn` and thus supplying all the Zepto functions
+ // to the array. Note that `__proto__` is not supported on Internet
+ // Explorer. This method can be overriden in plugins.
+ zepto.Z = function(dom, selector) {
+ dom = dom || []
+ dom.__proto__ = $.fn
+ dom.selector = selector || ''
+ return dom
+ }
+
+ // `$.zepto.isZ` should return `true` if the given object is a Zepto
+ // collection. This method can be overriden in plugins.
+ zepto.isZ = function(object) {
+ return object instanceof zepto.Z
+ }
+
+ // `$.zepto.init` is Zepto's counterpart to jQuery's `$.fn.init` and
+ // takes a CSS selector and an optional context (and handles various
+ // special cases).
+ // This method can be overriden in plugins.
+ zepto.init = function(selector, context) {
+ var dom
+ // If nothing given, return an empty Zepto collection
+ if (!selector) return zepto.Z()
+ // Optimize for string selectors
+ else if (typeof selector == 'string') {
+ selector = selector.trim()
+ // If it's a html fragment, create nodes from it
+ // Note: In both Chrome 21 and Firefox 15, DOM error 12
+ // is thrown if the fragment doesn't begin with <
+ if (selector[0] == '<' && fragmentRE.test(selector))
+ dom = zepto.fragment(selector, RegExp.$1, context), selector = null
+ // If there's a context, create a collection on that context first, and select
+ // nodes from there
+ else if (context !== undefined) return $(context).find(selector)
+ // If it's a CSS selector, use it to select nodes.
+ else dom = zepto.qsa(document, selector)
+ }
+ // If a function is given, call it when the DOM is ready
+ else if (isFunction(selector)) return $(document).ready(selector)
+ // If a Zepto collection is given, just return it
+ else if (zepto.isZ(selector)) return selector
+ else {
+ // normalize array if an array of nodes is given
+ if (isArray(selector)) dom = compact(selector)
+ // Wrap DOM nodes.
+ else if (isObject(selector))
+ dom = [selector], selector = null
+ // If it's a html fragment, create nodes from it
+ else if (fragmentRE.test(selector))
+ dom = zepto.fragment(selector.trim(), RegExp.$1, context), selector = null
+ // If there's a context, create a collection on that context first, and select
+ // nodes from there
+ else if (context !== undefined) return $(context).find(selector)
+ // And last but no least, if it's a CSS selector, use it to select nodes.
+ else dom = zepto.qsa(document, selector)
+ }
+ // create a new Zepto collection from the nodes found
+ return zepto.Z(dom, selector)
+ }
+
+ // `$` will be the base `Zepto` object. When calling this
+ // function just call `$.zepto.init, which makes the implementation
+ // details of selecting nodes and creating Zepto collections
+ // patchable in plugins.
+ $ = function(selector, context){
+ return zepto.init(selector, context)
+ }
+
+ function extend(target, source, deep) {
+ for (key in source)
+ if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {
+ if (isPlainObject(source[key]) && !isPlainObject(target[key]))
+ target[key] = {}
+ if (isArray(source[key]) && !isArray(target[key]))
+ target[key] = []
+ extend(target[key], source[key], deep)
+ }
+ else if (source[key] !== undefined) target[key] = source[key]
+ }
+
+ // Copy all but undefined properties from one or more
+ // objects to the `target` object.
+ $.extend = function(target){
+ var deep, args = slice.call(arguments, 1)
+ if (typeof target == 'boolean') {
+ deep = target
+ target = args.shift()
+ }
+ args.forEach(function(arg){ extend(target, arg, deep) })
+ return target
+ }
+
+ // `$.zepto.qsa` is Zepto's CSS selector implementation which
+ // uses `document.querySelectorAll` and optimizes for some special cases, like `#id`.
+ // This method can be overriden in plugins.
+ zepto.qsa = function(element, selector){
+ var found,
+ maybeID = selector[0] == '#',
+ maybeClass = !maybeID && selector[0] == '.',
+ nameOnly = maybeID || maybeClass ? selector.slice(1) : selector, // Ensure that a 1 char tag name still gets checked
+ isSimple = simpleSelectorRE.test(nameOnly)
+ return (isDocument(element) && isSimple && maybeID) ?
+ ( (found = element.getElementById(nameOnly)) ? [found] : [] ) :
+ (element.nodeType !== 1 && element.nodeType !== 9) ? [] :
+ slice.call(
+ isSimple && !maybeID ?
+ maybeClass ? element.getElementsByClassName(nameOnly) : // If it's simple, it could be a class
+ element.getElementsByTagName(selector) : // Or a tag
+ element.querySelectorAll(selector) // Or it's not simple, and we need to query all
+ )
+ }
+
+ function filtered(nodes, selector) {
+ return selector == null ? $(nodes) : $(nodes).filter(selector)
+ }
+
+ $.contains = function(parent, node) {
+ return parent !== node && parent.contains(node)
+ }
+
+ function funcArg(context, arg, idx, payload) {
+ return isFunction(arg) ? arg.call(context, idx, payload) : arg
+ }
+
+ function setAttribute(node, name, value) {
+ value == null ? node.removeAttribute(name) : node.setAttribute(name, value)
+ }
+
+ // access className property while respecting SVGAnimatedString
+ function className(node, value){
+ var klass = node.className,
+ svg = klass && klass.baseVal !== undefined
+
+ if (value === undefined) return svg ? klass.baseVal : klass
+ svg ? (klass.baseVal = value) : (node.className = value)
+ }
+
+ // "true" => true
+ // "false" => false
+ // "null" => null
+ // "42" => 42
+ // "42.5" => 42.5
+ // "08" => "08"
+ // JSON => parse if valid
+ // String => self
+ function deserializeValue(value) {
+ var num
+ try {
+ return value ?
+ value == "true" ||
+ ( value == "false" ? false :
+ value == "null" ? null :
+ !/^0/.test(value) && !isNaN(num = Number(value)) ? num :
+ /^[\[\{]/.test(value) ? $.parseJSON(value) :
+ value )
+ : value
+ } catch(e) {
+ return value
+ }
+ }
+
+ $.type = type
+ $.isFunction = isFunction
+ $.isWindow = isWindow
+ $.isArray = isArray
+ $.isPlainObject = isPlainObject
+
+ $.isEmptyObject = function(obj) {
+ var name
+ for (name in obj) return false
+ return true
+ }
+
+ $.inArray = function(elem, array, i){
+ return emptyArray.indexOf.call(array, elem, i)
+ }
+
+ $.camelCase = camelize
+ $.trim = function(str) {
+ return str == null ? "" : String.prototype.trim.call(str)
+ }
+
+ // plugin compatibility
+ $.uuid = 0
+ $.support = { }
+ $.expr = { }
+
+ $.map = function(elements, callback){
+ var value, values = [], i, key
+ if (likeArray(elements))
+ for (i = 0; i < elements.length; i++) {
+ value = callback(elements[i], i)
+ if (value != null) values.push(value)
+ }
+ else
+ for (key in elements) {
+ value = callback(elements[key], key)
+ if (value != null) values.push(value)
+ }
+ return flatten(values)
+ }
+
+ $.each = function(elements, callback){
+ var i, key
+ if (likeArray(elements)) {
+ for (i = 0; i < elements.length; i++)
+ if (callback.call(elements[i], i, elements[i]) === false) return elements
+ } else {
+ for (key in elements)
+ if (callback.call(elements[key], key, elements[key]) === false) return elements
+ }
+
+ return elements
+ }
+
+ $.grep = function(elements, callback){
+ return filter.call(elements, callback)
+ }
+
+ if (window.JSON) $.parseJSON = JSON.parse
+
+ // Populate the class2type map
+ $.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase()
+ })
+
+ // Define methods that will be available on all
+ // Zepto collections
+ $.fn = {
+ // Because a collection acts like an array
+ // copy over these useful array functions.
+ forEach: emptyArray.forEach,
+ reduce: emptyArray.reduce,
+ push: emptyArray.push,
+ sort: emptyArray.sort,
+ indexOf: emptyArray.indexOf,
+ concat: emptyArray.concat,
+
+ // `map` and `slice` in the jQuery API work differently
+ // from their array counterparts
+ map: function(fn){
+ return $($.map(this, function(el, i){ return fn.call(el, i, el) }))
+ },
+ slice: function(){
+ return $(slice.apply(this, arguments))
+ },
+
+ ready: function(callback){
+ // need to check if document.body exists for IE as that browser reports
+ // document ready when it hasn't yet created the body element
+ if (readyRE.test(document.readyState) && document.body) callback($)
+ else document.addEventListener('DOMContentLoaded', function(){ callback($) }, false)
+ return this
+ },
+ get: function(idx){
+ return idx === undefined ? slice.call(this) : this[idx >= 0 ? idx : idx + this.length]
+ },
+ toArray: function(){ return this.get() },
+ size: function(){
+ return this.length
+ },
+ remove: function(){
+ return this.each(function(){
+ if (this.parentNode != null)
+ this.parentNode.removeChild(this)
+ })
+ },
+ each: function(callback){
+ emptyArray.every.call(this, function(el, idx){
+ return callback.call(el, idx, el) !== false
+ })
+ return this
+ },
+ filter: function(selector){
+ if (isFunction(selector)) return this.not(this.not(selector))
+ return $(filter.call(this, function(element){
+ return zepto.matches(element, selector)
+ }))
+ },
+ add: function(selector,context){
+ return $(uniq(this.concat($(selector,context))))
+ },
+ is: function(selector){
+ return this.length > 0 && zepto.matches(this[0], selector)
+ },
+ not: function(selector){
+ var nodes=[]
+ if (isFunction(selector) && selector.call !== undefined)
+ this.each(function(idx){
+ if (!selector.call(this,idx)) nodes.push(this)
+ })
+ else {
+ var excludes = typeof selector == 'string' ? this.filter(selector) :
+ (likeArray(selector) && isFunction(selector.item)) ? slice.call(selector) : $(selector)
+ this.forEach(function(el){
+ if (excludes.indexOf(el) < 0) nodes.push(el)
+ })
+ }
+ return $(nodes)
+ },
+ has: function(selector){
+ return this.filter(function(){
+ return isObject(selector) ?
+ $.contains(this, selector) :
+ $(this).find(selector).size()
+ })
+ },
+ eq: function(idx){
+ return idx === -1 ? this.slice(idx) : this.slice(idx, + idx + 1)
+ },
+ first: function(){
+ var el = this[0]
+ return el && !isObject(el) ? el : $(el)
+ },
+ last: function(){
+ var el = this[this.length - 1]
+ return el && !isObject(el) ? el : $(el)
+ },
+ find: function(selector){
+ var result, $this = this
+ if (typeof selector == 'object')
+ result = $(selector).filter(function(){
+ var node = this
+ return emptyArray.some.call($this, function(parent){
+ return $.contains(parent, node)
+ })
+ })
+ else if (this.length == 1) result = $(zepto.qsa(this[0], selector))
+ else result = this.map(function(){ return zepto.qsa(this, selector) })
+ return result
+ },
+ closest: function(selector, context){
+ var node = this[0], collection = false
+ if (typeof selector == 'object') collection = $(selector)
+ while (node && !(collection ? collection.indexOf(node) >= 0 : zepto.matches(node, selector)))
+ node = node !== context && !isDocument(node) && node.parentNode
+ return $(node)
+ },
+ parents: function(selector){
+ var ancestors = [], nodes = this
+ while (nodes.length > 0)
+ nodes = $.map(nodes, function(node){
+ if ((node = node.parentNode) && !isDocument(node) && ancestors.indexOf(node) < 0) {
+ ancestors.push(node)
+ return node
+ }
+ })
+ return filtered(ancestors, selector)
+ },
+ parent: function(selector){
+ return filtered(uniq(this.pluck('parentNode')), selector)
+ },
+ children: function(selector){
+ return filtered(this.map(function(){ return children(this) }), selector)
+ },
+ contents: function() {
+ return this.map(function() { return slice.call(this.childNodes) })
+ },
+ siblings: function(selector){
+ return filtered(this.map(function(i, el){
+ return filter.call(children(el.parentNode), function(child){ return child!==el })
+ }), selector)
+ },
+ empty: function(){
+ return this.each(function(){ this.innerHTML = '' })
+ },
+ // `pluck` is borrowed from Prototype.js
+ pluck: function(property){
+ return $.map(this, function(el){ return el[property] })
+ },
+ show: function(){
+ return this.each(function(){
+ this.style.display == "none" && (this.style.display = '')
+ if (getComputedStyle(this, '').getPropertyValue("display") == "none")
+ this.style.display = defaultDisplay(this.nodeName)
+ })
+ },
+ replaceWith: function(newContent){
+ return this.before(newContent).remove()
+ },
+ wrap: function(structure){
+ var func = isFunction(structure)
+ if (this[0] && !func)
+ var dom = $(structure).get(0),
+ clone = dom.parentNode || this.length > 1
+
+ return this.each(function(index){
+ $(this).wrapAll(
+ func ? structure.call(this, index) :
+ clone ? dom.cloneNode(true) : dom
+ )
+ })
+ },
+ wrapAll: function(structure){
+ if (this[0]) {
+ $(this[0]).before(structure = $(structure))
+ var children
+ // drill down to the inmost element
+ while ((children = structure.children()).length) structure = children.first()
+ $(structure).append(this)
+ }
+ return this
+ },
+ wrapInner: function(structure){
+ var func = isFunction(structure)
+ return this.each(function(index){
+ var self = $(this), contents = self.contents(),
+ dom = func ? structure.call(this, index) : structure
+ contents.length ? contents.wrapAll(dom) : self.append(dom)
+ })
+ },
+ unwrap: function(){
+ this.parent().each(function(){
+ $(this).replaceWith($(this).children())
+ })
+ return this
+ },
+ clone: function(){
+ return this.map(function(){ return this.cloneNode(true) })
+ },
+ hide: function(){
+ return this.css("display", "none")
+ },
+ toggle: function(setting){
+ return this.each(function(){
+ var el = $(this)
+ ;(setting === undefined ? el.css("display") == "none" : setting) ? el.show() : el.hide()
+ })
+ },
+ prev: function(selector){ return $(this.pluck('previousElementSibling')).filter(selector || '*') },
+ next: function(selector){ return $(this.pluck('nextElementSibling')).filter(selector || '*') },
+ html: function(html){
+ return arguments.length === 0 ?
+ (this.length > 0 ? this[0].innerHTML : null) :
+ this.each(function(idx){
+ var originHtml = this.innerHTML
+ $(this).empty().append( funcArg(this, html, idx, originHtml) )
+ })
+ },
+ text: function(text){
+ return arguments.length === 0 ?
+ (this.length > 0 ? this[0].textContent : null) :
+ this.each(function(){ this.textContent = (text === undefined) ? '' : ''+text })
+ },
+ attr: function(name, value){
+ var result
+ return (typeof name == 'string' && value === undefined) ?
+ (this.length == 0 || this[0].nodeType !== 1 ? undefined :
+ (name == 'value' && this[0].nodeName == 'INPUT') ? this.val() :
+ (!(result = this[0].getAttribute(name)) && name in this[0]) ? this[0][name] : result
+ ) :
+ this.each(function(idx){
+ if (this.nodeType !== 1) return
+ if (isObject(name)) for (key in name) setAttribute(this, key, name[key])
+ else setAttribute(this, name, funcArg(this, value, idx, this.getAttribute(name)))
+ })
+ },
+ removeAttr: function(name){
+ return this.each(function(){ this.nodeType === 1 && setAttribute(this, name) })
+ },
+ prop: function(name, value){
+ name = propMap[name] || name
+ return (value === undefined) ?
+ (this[0] && this[0][name]) :
+ this.each(function(idx){
+ this[name] = funcArg(this, value, idx, this[name])
+ })
+ },
+ data: function(name, value){
+ var data = this.attr('data-' + name.replace(capitalRE, '-$1').toLowerCase(), value)
+ return data !== null ? deserializeValue(data) : undefined
+ },
+ val: function(value){
+ return arguments.length === 0 ?
+ (this[0] && (this[0].multiple ?
+ $(this[0]).find('option').filter(function(){ return this.selected }).pluck('value') :
+ this[0].value)
+ ) :
+ this.each(function(idx){
+ this.value = funcArg(this, value, idx, this.value)
+ })
+ },
+ offset: function(coordinates){
+ if (coordinates) return this.each(function(index){
+ var $this = $(this),
+ coords = funcArg(this, coordinates, index, $this.offset()),
+ parentOffset = $this.offsetParent().offset(),
+ props = {
+ top: coords.top - parentOffset.top,
+ left: coords.left - parentOffset.left
+ }
+
+ if ($this.css('position') == 'static') props['position'] = 'relative'
+ $this.css(props)
+ })
+ if (this.length==0) return null
+ var obj = this[0].getBoundingClientRect()
+ return {
+ left: obj.left + window.pageXOffset,
+ top: obj.top + window.pageYOffset,
+ width: Math.round(obj.width),
+ height: Math.round(obj.height)
+ }
+ },
+ css: function(property, value){
+ if (arguments.length < 2) {
+ var element = this[0], computedStyle = getComputedStyle(element, '')
+ if(!element) return
+ if (typeof property == 'string')
+ return element.style[camelize(property)] || computedStyle.getPropertyValue(property)
+ else if (isArray(property)) {
+ var props = {}
+ $.each(isArray(property) ? property: [property], function(_, prop){
+ props[prop] = (element.style[camelize(prop)] || computedStyle.getPropertyValue(prop))
+ })
+ return props
+ }
+ }
+
+ var css = ''
+ if (type(property) == 'string') {
+ if (!value && value !== 0)
+ this.each(function(){ this.style.removeProperty(dasherize(property)) })
+ else
+ css = dasherize(property) + ":" + maybeAddPx(property, value)
+ } else {
+ for (key in property)
+ if (!property[key] && property[key] !== 0)
+ this.each(function(){ this.style.removeProperty(dasherize(key)) })
+ else
+ css += dasherize(key) + ':' + maybeAddPx(key, property[key]) + ';'
+ }
+
+ return this.each(function(){ this.style.cssText += ';' + css })
+ },
+ index: function(element){
+ return element ? this.indexOf($(element)[0]) : this.parent().children().indexOf(this[0])
+ },
+ hasClass: function(name){
+ if (!name) return false
+ return emptyArray.some.call(this, function(el){
+ return this.test(className(el))
+ }, classRE(name))
+ },
+ addClass: function(name){
+ if (!name) return this
+ return this.each(function(idx){
+ classList = []
+ var cls = className(this), newName = funcArg(this, name, idx, cls)
+ newName.split(/\s+/g).forEach(function(klass){
+ if (!$(this).hasClass(klass)) classList.push(klass)
+ }, this)
+ classList.length && className(this, cls + (cls ? " " : "") + classList.join(" "))
+ })
+ },
+ removeClass: function(name){
+ return this.each(function(idx){
+ if (name === undefined) return className(this, '')
+ classList = className(this)
+ funcArg(this, name, idx, classList).split(/\s+/g).forEach(function(klass){
+ classList = classList.replace(classRE(klass), " ")
+ })
+ className(this, classList.trim())
+ })
+ },
+ toggleClass: function(name, when){
+ if (!name) return this
+ return this.each(function(idx){
+ var $this = $(this), names = funcArg(this, name, idx, className(this))
+ names.split(/\s+/g).forEach(function(klass){
+ (when === undefined ? !$this.hasClass(klass) : when) ?
+ $this.addClass(klass) : $this.removeClass(klass)
+ })
+ })
+ },
+ scrollTop: function(value){
+ if (!this.length) return
+ var hasScrollTop = 'scrollTop' in this[0]
+ if (value === undefined) return hasScrollTop ? this[0].scrollTop : this[0].pageYOffset
+ return this.each(hasScrollTop ?
+ function(){ this.scrollTop = value } :
+ function(){ this.scrollTo(this.scrollX, value) })
+ },
+ scrollLeft: function(value){
+ if (!this.length) return
+ var hasScrollLeft = 'scrollLeft' in this[0]
+ if (value === undefined) return hasScrollLeft ? this[0].scrollLeft : this[0].pageXOffset
+ return this.each(hasScrollLeft ?
+ function(){ this.scrollLeft = value } :
+ function(){ this.scrollTo(value, this.scrollY) })
+ },
+ position: function() {
+ if (!this.length) return
+
+ var elem = this[0],
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent(),
+ // Get correct offsets
+ offset = this.offset(),
+ parentOffset = rootNodeRE.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset()
+
+ // Subtract element margins
+ // note: when an element has margin: auto the offsetLeft and marginLeft
+ // are the same in Safari causing offset.left to incorrectly be 0
+ offset.top -= parseFloat( $(elem).css('margin-top') ) || 0
+ offset.left -= parseFloat( $(elem).css('margin-left') ) || 0
+
+ // Add offsetParent borders
+ parentOffset.top += parseFloat( $(offsetParent[0]).css('border-top-width') ) || 0
+ parentOffset.left += parseFloat( $(offsetParent[0]).css('border-left-width') ) || 0
+
+ // Subtract the two offsets
+ return {
+ top: offset.top - parentOffset.top,
+ left: offset.left - parentOffset.left
+ }
+ },
+ offsetParent: function() {
+ return this.map(function(){
+ var parent = this.offsetParent || document.body
+ while (parent && !rootNodeRE.test(parent.nodeName) && $(parent).css("position") == "static")
+ parent = parent.offsetParent
+ return parent
+ })
+ }
+ }
+
+ // for now
+ $.fn.detach = $.fn.remove
+
+ // Generate the `width` and `height` functions
+ ;['width', 'height'].forEach(function(dimension){
+ var dimensionProperty =
+ dimension.replace(/./, function(m){ return m[0].toUpperCase() })
+
+ $.fn[dimension] = function(value){
+ var offset, el = this[0]
+ if (value === undefined) return isWindow(el) ? el['inner' + dimensionProperty] :
+ isDocument(el) ? el.documentElement['scroll' + dimensionProperty] :
+ (offset = this.offset()) && offset[dimension]
+ else return this.each(function(idx){
+ el = $(this)
+ el.css(dimension, funcArg(this, value, idx, el[dimension]()))
+ })
+ }
+ })
+
+ function traverseNode(node, fun) {
+ fun(node)
+ for (var key in node.childNodes) traverseNode(node.childNodes[key], fun)
+ }
+
+ // Generate the `after`, `prepend`, `before`, `append`,
+ // `insertAfter`, `insertBefore`, `appendTo`, and `prependTo` methods.
+ adjacencyOperators.forEach(function(operator, operatorIndex) {
+ var inside = operatorIndex % 2 //=> prepend, append
+
+ $.fn[operator] = function(){
+ // arguments can be nodes, arrays of nodes, Zepto objects and HTML strings
+ var argType, nodes = $.map(arguments, function(arg) {
+ argType = type(arg)
+ return argType == "object" || argType == "array" || arg == null ?
+ arg : zepto.fragment(arg)
+ }),
+ parent, copyByClone = this.length > 1
+ if (nodes.length < 1) return this
+
+ return this.each(function(_, target){
+ parent = inside ? target : target.parentNode
+
+ // convert all methods to a "before" operation
+ target = operatorIndex == 0 ? target.nextSibling :
+ operatorIndex == 1 ? target.firstChild :
+ operatorIndex == 2 ? target :
+ null
+
+ nodes.forEach(function(node){
+ if (copyByClone) node = node.cloneNode(true)
+ else if (!parent) return $(node).remove()
+
+ traverseNode(parent.insertBefore(node, target), function(el){
+ if (el.nodeName != null && el.nodeName.toUpperCase() === 'SCRIPT' &&
+ (!el.type || el.type === 'text/javascript') && !el.src)
+ window['eval'].call(window, el.innerHTML)
+ })
+ })
+ })
+ }
+
+ // after => insertAfter
+ // prepend => prependTo
+ // before => insertBefore
+ // append => appendTo
+ $.fn[inside ? operator+'To' : 'insert'+(operatorIndex ? 'Before' : 'After')] = function(html){
+ $(html)[operator](this)
+ return this
+ }
+ })
+
+ zepto.Z.prototype = $.fn
+
+ // Export internal API functions in the `$.zepto` namespace
+ zepto.uniq = uniq
+ zepto.deserializeValue = deserializeValue
+ $.zepto = zepto
+
+ return $
+ })()
+
+ window.Zepto = Zepto
+ window.$ === undefined && (window.$ = Zepto)
+
+ ;(function($){
+ var $$ = $.zepto.qsa, _zid = 1, undefined,
+ slice = Array.prototype.slice,
+ isFunction = $.isFunction,
+ isString = function(obj){ return typeof obj == 'string' },
+ handlers = {},
+ specialEvents={},
+ focusinSupported = 'onfocusin' in window,
+ focus = { focus: 'focusin', blur: 'focusout' },
+ hover = { mouseenter: 'mouseover', mouseleave: 'mouseout' }
+
+ specialEvents.click = specialEvents.mousedown = specialEvents.mouseup = specialEvents.mousemove = 'MouseEvents'
+
+ function zid(element) {
+ return element._zid || (element._zid = _zid++)
+ }
+ function findHandlers(element, event, fn, selector) {
+ event = parse(event)
+ if (event.ns) var matcher = matcherFor(event.ns)
+ return (handlers[zid(element)] || []).filter(function(handler) {
+ return handler
+ && (!event.e || handler.e == event.e)
+ && (!event.ns || matcher.test(handler.ns))
+ && (!fn || zid(handler.fn) === zid(fn))
+ && (!selector || handler.sel == selector)
+ })
+ }
+ function parse(event) {
+ var parts = ('' + event).split('.')
+ return {e: parts[0], ns: parts.slice(1).sort().join(' ')}
+ }
+ function matcherFor(ns) {
+ return new RegExp('(?:^| )' + ns.replace(' ', ' .* ?') + '(?: |$)')
+ }
+
+ function eventCapture(handler, captureSetting) {
+ return handler.del &&
+ (!focusinSupported && (handler.e in focus)) ||
+ !!captureSetting
+ }
+
+ function realEvent(type) {
+ return hover[type] || (focusinSupported && focus[type]) || type
+ }
+
+ function add(element, events, fn, data, selector, delegator, capture){
+ var id = zid(element), set = (handlers[id] || (handlers[id] = []))
+ events.split(/\s/).forEach(function(event){
+ if (event == 'ready') return $(document).ready(fn)
+ var handler = parse(event)
+ handler.fn = fn
+ handler.sel = selector
+ // emulate mouseenter, mouseleave
+ if (handler.e in hover) fn = function(e){
+ var related = e.relatedTarget
+ if (!related || (related !== this && !$.contains(this, related)))
+ return handler.fn.apply(this, arguments)
+ }
+ handler.del = delegator
+ var callback = delegator || fn
+ handler.proxy = function(e){
+ e = compatible(e)
+ if (e.isImmediatePropagationStopped()) return
+ e.data = data
+ var result = callback.apply(element, e._args == undefined ? [e] : [e].concat(e._args))
+ if (result === false) e.preventDefault(), e.stopPropagation()
+ return result
+ }
+ handler.i = set.length
+ set.push(handler)
+ if ('addEventListener' in element)
+ element.addEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
+ })
+ }
+ function remove(element, events, fn, selector, capture){
+ var id = zid(element)
+ ;(events || '').split(/\s/).forEach(function(event){
+ findHandlers(element, event, fn, selector).forEach(function(handler){
+ delete handlers[id][handler.i]
+ if ('removeEventListener' in element)
+ element.removeEventListener(realEvent(handler.e), handler.proxy, eventCapture(handler, capture))
+ })
+ })
+ }
+
+ $.event = { add: add, remove: remove }
+
+ $.proxy = function(fn, context) {
+ if (isFunction(fn)) {
+ var proxyFn = function(){ return fn.apply(context, arguments) }
+ proxyFn._zid = zid(fn)
+ return proxyFn
+ } else if (isString(context)) {
+ return $.proxy(fn[context], fn)
+ } else {
+ throw new TypeError("expected function")
+ }
+ }
+
+ $.fn.bind = function(event, data, callback){
+ return this.on(event, data, callback)
+ }
+ $.fn.unbind = function(event, callback){
+ return this.off(event, callback)
+ }
+ $.fn.one = function(event, selector, data, callback){
+ return this.on(event, selector, data, callback, 1)
+ }
+
+ var returnTrue = function(){return true},
+ returnFalse = function(){return false},
+ ignoreProperties = /^([A-Z]|returnValue$|layer[XY]$)/,
+ eventMethods = {
+ preventDefault: 'isDefaultPrevented',
+ stopImmediatePropagation: 'isImmediatePropagationStopped',
+ stopPropagation: 'isPropagationStopped'
+ }
+
+ function compatible(event, source) {
+ if (source || !event.isDefaultPrevented) {
+ source || (source = event)
+
+ $.each(eventMethods, function(name, predicate) {
+ var sourceMethod = source[name]
+ event[name] = function(){
+ this[predicate] = returnTrue
+ return sourceMethod && sourceMethod.apply(source, arguments)
+ }
+ event[predicate] = returnFalse
+ })
+
+ if (source.defaultPrevented !== undefined ? source.defaultPrevented :
+ 'returnValue' in source ? source.returnValue === false :
+ source.getPreventDefault && source.getPreventDefault())
+ event.isDefaultPrevented = returnTrue
+ }
+ return event
+ }
+
+ function createProxy(event) {
+ var key, proxy = { originalEvent: event }
+ for (key in event)
+ if (!ignoreProperties.test(key) && event[key] !== undefined) proxy[key] = event[key]
+
+ return compatible(proxy, event)
+ }
+
+ $.fn.delegate = function(selector, event, callback){
+ return this.on(event, selector, callback)
+ }
+ $.fn.undelegate = function(selector, event, callback){
+ return this.off(event, selector, callback)
+ }
+
+ $.fn.live = function(event, callback){
+ $(document.body).delegate(this.selector, event, callback)
+ return this
+ }
+ $.fn.die = function(event, callback){
+ $(document.body).undelegate(this.selector, event, callback)
+ return this
+ }
+
+ $.fn.on = function(event, selector, data, callback, one){
+ var autoRemove, delegator, $this = this
+ if (event && !isString(event)) {
+ $.each(event, function(type, fn){
+ $this.on(type, selector, data, fn, one)
+ })
+ return $this
+ }
+
+ if (!isString(selector) && !isFunction(callback) && callback !== false)
+ callback = data, data = selector, selector = undefined
+ if (isFunction(data) || data === false)
+ callback = data, data = undefined
+
+ if (callback === false) callback = returnFalse
+
+ return $this.each(function(_, element){
+ if (one) autoRemove = function(e){
+ remove(element, e.type, callback)
+ return callback.apply(this, arguments)
+ }
+
+ if (selector) delegator = function(e){
+ var evt, match = $(e.target).closest(selector, element).get(0)
+ if (match && match !== element) {
+ evt = $.extend(createProxy(e), {currentTarget: match, liveFired: element})
+ return (autoRemove || callback).apply(match, [evt].concat(slice.call(arguments, 1)))
+ }
+ }
+
+ add(element, event, callback, data, selector, delegator || autoRemove)
+ })
+ }
+ $.fn.off = function(event, selector, callback){
+ var $this = this
+ if (event && !isString(event)) {
+ $.each(event, function(type, fn){
+ $this.off(type, selector, fn)
+ })
+ return $this
+ }
+
+ if (!isString(selector) && !isFunction(callback) && callback !== false)
+ callback = selector, selector = undefined
+
+ if (callback === false) callback = returnFalse
+
+ return $this.each(function(){
+ remove(this, event, callback, selector)
+ })
+ }
+
+ $.fn.trigger = function(event, args){
+ event = (isString(event) || $.isPlainObject(event)) ? $.Event(event) : compatible(event)
+ event._args = args
+ return this.each(function(){
+ // items in the collection might not be DOM elements
+ if('dispatchEvent' in this) this.dispatchEvent(event)
+ else $(this).triggerHandler(event, args)
+ })
+ }
+
+ // triggers event handlers on current element just as if an event occurred,
+ // doesn't trigger an actual event, doesn't bubble
+ $.fn.triggerHandler = function(event, args){
+ var e, result
+ this.each(function(i, element){
+ e = createProxy(isString(event) ? $.Event(event) : event)
+ e._args = args
+ e.target = element
+ $.each(findHandlers(element, event.type || event), function(i, handler){
+ result = handler.proxy(e)
+ if (e.isImmediatePropagationStopped()) return false
+ })
+ })
+ return result
+ }
+
+ // shortcut methods for `.bind(event, fn)` for each event type
+ ;('focusin focusout load resize scroll unload click dblclick '+
+ 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave '+
+ 'change select keydown keypress keyup error').split(' ').forEach(function(event) {
+ $.fn[event] = function(callback) {
+ return callback ?
+ this.bind(event, callback) :
+ this.trigger(event)
+ }
+ })
+
+ ;['focus', 'blur'].forEach(function(name) {
+ $.fn[name] = function(callback) {
+ if (callback) this.bind(name, callback)
+ else this.each(function(){
+ try { this[name]() }
+ catch(e) {}
+ })
+ return this
+ }
+ })
+
+ $.Event = function(type, props) {
+ if (!isString(type)) props = type, type = props.type
+ var event = document.createEvent(specialEvents[type] || 'Events'), bubbles = true
+ if (props) for (var name in props) (name == 'bubbles') ? (bubbles = !!props[name]) : (event[name] = props[name])
+ event.initEvent(type, bubbles, true)
+ return compatible(event)
+ }
+
+ })(Zepto)
+
+ ;(function($){
+ var jsonpID = 0,
+ document = window.document,
+ key,
+ name,
+ rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+ scriptTypeRE = /^(?:text|application)\/javascript/i,
+ xmlTypeRE = /^(?:text|application)\/xml/i,
+ jsonType = 'application/json',
+ htmlType = 'text/html',
+ blankRE = /^\s*$/
+
+ // trigger a custom event and return false if it was cancelled
+ function triggerAndReturn(context, eventName, data) {
+ var event = $.Event(eventName)
+ $(context).trigger(event, data)
+ return !event.isDefaultPrevented()
+ }
+
+ // trigger an Ajax "global" event
+ function triggerGlobal(settings, context, eventName, data) {
+ if (settings.global) return triggerAndReturn(context || document, eventName, data)
+ }
+
+ // Number of active Ajax requests
+ $.active = 0
+
+ function ajaxStart(settings) {
+ if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart')
+ }
+ function ajaxStop(settings) {
+ if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop')
+ }
+
+ // triggers an extra global event "ajaxBeforeSend" that's like "ajaxSend" but cancelable
+ function ajaxBeforeSend(xhr, settings) {
+ var context = settings.context
+ if (settings.beforeSend.call(context, xhr, settings) === false ||
+ triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)
+ return false
+
+ triggerGlobal(settings, context, 'ajaxSend', [xhr, settings])
+ }
+ function ajaxSuccess(data, xhr, settings, deferred) {
+ var context = settings.context, status = 'success'
+ settings.success.call(context, data, status, xhr)
+ if (deferred) deferred.resolveWith(context, [data, status, xhr])
+ triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data])
+ ajaxComplete(status, xhr, settings)
+ }
+ // type: "timeout", "error", "abort", "parsererror"
+ function ajaxError(error, type, xhr, settings, deferred) {
+ var context = settings.context
+ settings.error.call(context, xhr, type, error)
+ if (deferred) deferred.rejectWith(context, [xhr, type, error])
+ triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error || type])
+ ajaxComplete(type, xhr, settings)
+ }
+ // status: "success", "notmodified", "error", "timeout", "abort", "parsererror"
+ function ajaxComplete(status, xhr, settings) {
+ var context = settings.context
+ settings.complete.call(context, xhr, status)
+ triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings])
+ ajaxStop(settings)
+ }
+
+ // Empty function, used as default callback
+ function empty() {}
+
+ $.ajaxJSONP = function(options, deferred){
+ if (!('type' in options)) return $.ajax(options)
+
+ var _callbackName = options.jsonpCallback,
+ callbackName = ($.isFunction(_callbackName) ?
+ _callbackName() : _callbackName) || ('jsonp' + (++jsonpID)),
+ script = document.createElement('script'),
+ originalCallback = window[callbackName],
+ responseData,
+ abort = function(errorType) {
+ $(script).triggerHandler('error', errorType || 'abort')
+ },
+ xhr = { abort: abort }, abortTimeout
+
+ if (deferred) deferred.promise(xhr)
+
+ $(script).on('load error', function(e, errorType){
+ clearTimeout(abortTimeout)
+ $(script).off().remove()
+
+ if (e.type == 'error' || !responseData) {
+ ajaxError(null, errorType || 'error', xhr, options, deferred)
+ } else {
+ ajaxSuccess(responseData[0], xhr, options, deferred)
+ }
+
+ window[callbackName] = originalCallback
+ if (responseData && $.isFunction(originalCallback))
+ originalCallback(responseData[0])
+
+ originalCallback = responseData = undefined
+ })
+
+ if (ajaxBeforeSend(xhr, options) === false) {
+ abort('abort')
+ return xhr
+ }
+
+ window[callbackName] = function(){
+ responseData = arguments
+ }
+
+ script.src = options.url.replace(/\?(.+)=\?/, '?$1=' + callbackName)
+ document.head.appendChild(script)
+
+ if (options.timeout > 0) abortTimeout = setTimeout(function(){
+ abort('timeout')
+ }, options.timeout)
+
+ return xhr
+ }
+
+ $.ajaxSettings = {
+ // Default type of request
+ type: 'GET',
+ // Callback that is executed before request
+ beforeSend: empty,
+ // Callback that is executed if the request succeeds
+ success: empty,
+ // Callback that is executed the the server drops error
+ error: empty,
+ // Callback that is executed on request complete (both: error and success)
+ complete: empty,
+ // The context for the callbacks
+ context: null,
+ // Whether to trigger "global" Ajax events
+ global: true,
+ // Transport
+ xhr: function () {
+ return new window.XMLHttpRequest()
+ },
+ // MIME types mapping
+ // IIS returns Javascript as "application/x-javascript"
+ accepts: {
+ script: 'text/javascript, application/javascript, application/x-javascript',
+ json: jsonType,
+ xml: 'application/xml, text/xml',
+ html: htmlType,
+ text: 'text/plain'
+ },
+ // Whether the request is to another domain
+ crossDomain: false,
+ // Default timeout
+ timeout: 0,
+ // Whether data should be serialized to string
+ processData: true,
+ // Whether the browser should be allowed to cache GET responses
+ cache: true
+ }
+
+ function mimeToDataType(mime) {
+ if (mime) mime = mime.split(';', 2)[0]
+ return mime && ( mime == htmlType ? 'html' :
+ mime == jsonType ? 'json' :
+ scriptTypeRE.test(mime) ? 'script' :
+ xmlTypeRE.test(mime) && 'xml' ) || 'text'
+ }
+
+ function appendQuery(url, query) {
+ if (query == '') return url
+ return (url + '&' + query).replace(/[&?]{1,2}/, '?')
+ }
+
+ // serialize payload and append it to the URL for GET requests
+ function serializeData(options) {
+ if (options.processData && options.data && $.type(options.data) != "string")
+ options.data = $.param(options.data, options.traditional)
+ if (options.data && (!options.type || options.type.toUpperCase() == 'GET'))
+ options.url = appendQuery(options.url, options.data), options.data = undefined
+ }
+
+ $.ajax = function(options){
+ var settings = $.extend({}, options || {}),
+ deferred = $.Deferred && $.Deferred()
+ for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]
+
+ ajaxStart(settings)
+
+ if (!settings.crossDomain) settings.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(settings.url) &&
+ RegExp.$2 != window.location.host
+
+ if (!settings.url) settings.url = window.location.toString()
+ serializeData(settings)
+ if (settings.cache === false) settings.url = appendQuery(settings.url, '_=' + Date.now())
+
+ var dataType = settings.dataType, hasPlaceholder = /\?.+=\?/.test(settings.url)
+ if (dataType == 'jsonp' || hasPlaceholder) {
+ if (!hasPlaceholder)
+ settings.url = appendQuery(settings.url,
+ settings.jsonp ? (settings.jsonp + '=?') : settings.jsonp === false ? '' : 'callback=?')
+ return $.ajaxJSONP(settings, deferred)
+ }
+
+ var mime = settings.accepts[dataType],
+ headers = { },
+ setHeader = function(name, value) { headers[name.toLowerCase()] = [name, value] },
+ protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol,
+ xhr = settings.xhr(),
+ nativeSetHeader = xhr.setRequestHeader,
+ abortTimeout
+
+ if (deferred) deferred.promise(xhr)
+
+ if (!settings.crossDomain) setHeader('X-Requested-With', 'XMLHttpRequest')
+ setHeader('Accept', mime || '*/*')
+ if (mime = settings.mimeType || mime) {
+ if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0]
+ xhr.overrideMimeType && xhr.overrideMimeType(mime)
+ }
+ if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))
+ setHeader('Content-Type', settings.contentType || 'application/x-www-form-urlencoded')
+
+ if (settings.headers) for (name in settings.headers) setHeader(name, settings.headers[name])
+ xhr.setRequestHeader = setHeader
+
+ xhr.onreadystatechange = function(){
+ if (xhr.readyState == 4) {
+ xhr.onreadystatechange = empty
+ clearTimeout(abortTimeout)
+ var result, error = false
+ if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {
+ dataType = dataType || mimeToDataType(settings.mimeType || xhr.getResponseHeader('content-type'))
+ result = xhr.responseText
+
+ try {
+ // http://perfectionkills.com/global-eval-what-are-the-options/
+ if (dataType == 'script') (1,eval)(result)
+ else if (dataType == 'xml') result = xhr.responseXML
+ else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)
+ } catch (e) { error = e }
+
+ if (error) ajaxError(error, 'parsererror', xhr, settings, deferred)
+ else ajaxSuccess(result, xhr, settings, deferred)
+ } else {
+ ajaxError(xhr.statusText || null, xhr.status ? 'error' : 'abort', xhr, settings, deferred)
+ }
+ }
+ }
+
+ if (ajaxBeforeSend(xhr, settings) === false) {
+ xhr.abort()
+ ajaxError(null, 'abort', xhr, settings, deferred)
+ return xhr
+ }
+
+ if (settings.xhrFields) for (name in settings.xhrFields) xhr[name] = settings.xhrFields[name]
+
+ var async = 'async' in settings ? settings.async : true
+ xhr.open(settings.type, settings.url, async, settings.username, settings.password)
+
+ for (name in headers) nativeSetHeader.apply(xhr, headers[name])
+
+ if (settings.timeout > 0) abortTimeout = setTimeout(function(){
+ xhr.onreadystatechange = empty
+ xhr.abort()
+ ajaxError(null, 'timeout', xhr, settings, deferred)
+ }, settings.timeout)
+
+ // avoid sending empty string (#319)
+ xhr.send(settings.data ? settings.data : null)
+ return xhr
+ }
+
+ // handle optional data/success arguments
+ function parseArguments(url, data, success, dataType) {
+ var hasData = !$.isFunction(data)
+ return {
+ url: url,
+ data: hasData ? data : undefined,
+ success: !hasData ? data : $.isFunction(success) ? success : undefined,
+ dataType: hasData ? dataType || success : success
+ }
+ }
+
+ $.get = function(url, data, success, dataType){
+ return $.ajax(parseArguments.apply(null, arguments))
+ }
+
+ $.post = function(url, data, success, dataType){
+ var options = parseArguments.apply(null, arguments)
+ options.type = 'POST'
+ return $.ajax(options)
+ }
+
+ $.getJSON = function(url, data, success){
+ var options = parseArguments.apply(null, arguments)
+ options.dataType = 'json'
+ return $.ajax(options)
+ }
+
+ $.fn.load = function(url, data, success){
+ if (!this.length) return this
+ var self = this, parts = url.split(/\s/), selector,
+ options = parseArguments(url, data, success),
+ callback = options.success
+ if (parts.length > 1) options.url = parts[0], selector = parts[1]
+ options.success = function(response){
+ self.html(selector ?
+ $('<div>').html(response.replace(rscript, "")).find(selector)
+ : response)
+ callback && callback.apply(self, arguments)
+ }
+ $.ajax(options)
+ return this
+ }
+
+ var escape = encodeURIComponent
+
+ function serialize(params, obj, traditional, scope){
+ var type, array = $.isArray(obj), hash = $.isPlainObject(obj)
+ $.each(obj, function(key, value) {
+ type = $.type(value)
+ if (scope) key = traditional ? scope :
+ scope + '[' + (hash || type == 'object' || type == 'array' ? key : '') + ']'
+ // handle data in serializeArray() format
+ if (!scope && array) params.add(value.name, value.value)
+ // recurse into nested objects
+ else if (type == "array" || (!traditional && type == "object"))
+ serialize(params, value, traditional, key)
+ else params.add(key, value)
+ })
+ }
+
+ $.param = function(obj, traditional){
+ var params = []
+ params.add = function(k, v){ this.push(escape(k) + '=' + escape(v)) }
+ serialize(params, obj, traditional)
+ return params.join('&').replace(/%20/g, '+')
+ }
+ })(Zepto)
+
+ ;(function($){
+ $.fn.serializeArray = function() {
+ var result = [], el
+ $([].slice.call(this.get(0).elements)).each(function(){
+ el = $(this)
+ var type = el.attr('type')
+ if (this.nodeName.toLowerCase() != 'fieldset' &&
+ !this.disabled && type != 'submit' && type != 'reset' && type != 'button' &&
+ ((type != 'radio' && type != 'checkbox') || this.checked))
+ result.push({
+ name: el.attr('name'),
+ value: el.val()
+ })
+ })
+ return result
+ }
+
+ $.fn.serialize = function(){
+ var result = []
+ this.serializeArray().forEach(function(elm){
+ result.push(encodeURIComponent(elm.name) + '=' + encodeURIComponent(elm.value))
+ })
+ return result.join('&')
+ }
+
+ $.fn.submit = function(callback) {
+ if (callback) this.bind('submit', callback)
+ else if (this.length) {
+ var event = $.Event('submit')
+ this.eq(0).trigger(event)
+ if (!event.isDefaultPrevented()) this.get(0).submit()
+ }
+ return this
+ }
+
+ })(Zepto)
+
+ ;(function($){
+ // __proto__ doesn't exist on IE<11, so redefine
+ // the Z function to use object extension instead
+ if (!('__proto__' in {})) {
+ $.extend($.zepto, {
+ Z: function(dom, selector){
+ dom = dom || []
+ $.extend(dom, $.fn)
+ dom.selector = selector || ''
+ dom.__Z = true
+ return dom
+ },
+ // this is a kludge but works
+ isZ: function(object){
+ return $.type(object) === 'array' && '__Z' in object
+ }
+ })
+ }
+
+ // getComputedStyle shouldn't freak out when called
+ // without a valid element as argument
+ try {
+ getComputedStyle(undefined)
+ } catch(e) {
+ var nativeGetComputedStyle = getComputedStyle;
+ window.getComputedStyle = function(element, pseudoElement){
+ try {
+ return nativeGetComputedStyle(element, pseudoElement)
+ } catch(e) {
+ return null
+ }
+ }
+ }
+ })(Zepto)
+
+
+ TL.getJSON = Zepto.getJSON;
+ TL.ajax = Zepto.ajax;
+})(TL)
+
+// Based on https://github.com/madrobby/zepto/blob/5585fe00f1828711c04208372265a5d71e3238d1/src/ajax.js
+// Zepto.js
+// (c) 2010-2012 Thomas Fuchs
+// Zepto.js may be freely distributed under the MIT license.
+/*
+Copyright (c) 2010-2012 Thomas Fuchs
+http://zeptojs.com
+
+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.
+*/
+
+
+/* **********************************************
+ Begin TL.Class.js
+********************************************** */
+
+/* TL.Class
+ Class powers the OOP facilities of the library.
+================================================== */
+TL.Class = function () {};
+
+TL.Class.extend = function (/*Object*/ props) /*-> Class*/ {
+
+ // extended class with the new prototype
+ var NewClass = function () {
+ if (this.initialize) {
+ this.initialize.apply(this, arguments);
+ }
+ };
+
+ // instantiate class without calling constructor
+ var F = function () {};
+ F.prototype = this.prototype;
+ var proto = new F();
+
+ proto.constructor = NewClass;
+ NewClass.prototype = proto;
+
+ // add superclass access
+ NewClass.superclass = this.prototype;
+
+ // add class name
+ //proto.className = props;
+
+ //inherit parent's statics
+ for (var i in this) {
+ if (this.hasOwnProperty(i) && i !== 'prototype' && i !== 'superclass') {
+ NewClass[i] = this[i];
+ }
+ }
+
+ // mix static properties into the class
+ if (props.statics) {
+ TL.Util.extend(NewClass, props.statics);
+ delete props.statics;
+ }
+
+ // mix includes into the prototype
+ if (props.includes) {
+ TL.Util.extend.apply(null, [proto].concat(props.includes));
+ delete props.includes;
+ }
+
+ // merge options
+ if (props.options && proto.options) {
+ props.options = TL.Util.extend({}, proto.options, props.options);
+ }
+
+ // mix given properties into the prototype
+ TL.Util.extend(proto, props);
+
+ // allow inheriting further
+ NewClass.extend = TL.Class.extend;
+
+ // method for adding properties to prototype
+ NewClass.include = function (props) {
+ TL.Util.extend(this.prototype, props);
+ };
+
+ return NewClass;
+};
+
+
+/* **********************************************
+ Begin TL.Events.js
+********************************************** */
+
+/* TL.Events
+ adds custom events functionality to TL classes
+================================================== */
+TL.Events = {
+ addEventListener: function (/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {
+ var events = this._tl_events = this._tl_events || {};
+ events[type] = events[type] || [];
+ events[type].push({
+ action: fn,
+ context: context || this
+ });
+ return this;
+ },
+
+ hasEventListeners: function (/*String*/ type) /*-> Boolean*/ {
+ var k = '_tl_events';
+ return (k in this) && (type in this[k]) && (this[k][type].length > 0);
+ },
+
+ removeEventListener: function (/*String*/ type, /*Function*/ fn, /*(optional) Object*/ context) {
+ if (!this.hasEventListeners(type)) {
+ return this;
+ }
+
+ for (var i = 0, events = this._tl_events, len = events[type].length; i < len; i++) {
+ if (
+ (events[type][i].action === fn) &&
+ (!context || (events[type][i].context === context))
+ ) {
+ events[type].splice(i, 1);
+ return this;
+ }
+ }
+ return this;
+ },
+
+ fireEvent: function (/*String*/ type, /*(optional) Object*/ data) {
+ if (!this.hasEventListeners(type)) {
+ return this;
+ }
+
+ var event = TL.Util.mergeData({
+ type: type,
+ target: this
+ }, data);
+
+ var listeners = this._tl_events[type].slice();
+
+ for (var i = 0, len = listeners.length; i < len; i++) {
+ listeners[i].action.call(listeners[i].context || this, event);
+ }
+
+ return this;
+ }
+};
+
+TL.Events.on = TL.Events.addEventListener;
+TL.Events.off = TL.Events.removeEventListener;
+TL.Events.fire = TL.Events.fireEvent;
+
+
+/* **********************************************
+ Begin TL.Browser.js
+********************************************** */
+
+/*
+ Based on Leaflet Browser
+ TL.Browser handles different browser and feature detections for internal use.
+*/
+
+
+(function() {
+
+ var ua = navigator.userAgent.toLowerCase(),
+ doc = document.documentElement,
+
+ ie = 'ActiveXObject' in window,
+
+ webkit = ua.indexOf('webkit') !== -1,
+ phantomjs = ua.indexOf('phantom') !== -1,
+ android23 = ua.search('android [23]') !== -1,
+
+ mobile = typeof orientation !== 'undefined',
+ msPointer = navigator.msPointerEnabled && navigator.msMaxTouchPoints && !window.PointerEvent,
+ pointer = (window.PointerEvent && navigator.pointerEnabled && navigator.maxTouchPoints) || msPointer,
+
+ ie3d = ie && ('transition' in doc.style),
+ webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23,
+ gecko3d = 'MozPerspective' in doc.style,
+ opera3d = 'OTransition' in doc.style,
+ opera = window.opera;
+
+
+ var retina = 'devicePixelRatio' in window && window.devicePixelRatio > 1;
+
+ if (!retina && 'matchMedia' in window) {
+ var matches = window.matchMedia('(min-resolution:144dpi)');
+ retina = matches && matches.matches;
+ }
+
+ var touch = !window.L_NO_TOUCH && !phantomjs && (pointer || 'ontouchstart' in window || (window.DocumentTouch && document instanceof window.DocumentTouch));
+
+ TL.Browser = {
+ ie: ie,
+ ua: ua,
+ ie9: Boolean(ie && ua.match(/MSIE 9/i)),
+ ielt9: ie && !document.addEventListener,
+ webkit: webkit,
+ //gecko: (ua.indexOf('gecko') !== -1) && !webkit && !window.opera && !ie,
+ firefox: (ua.indexOf('gecko') !== -1) && !webkit && !window.opera && !ie,
+ android: ua.indexOf('android') !== -1,
+ android23: android23,
+ chrome: ua.indexOf('chrome') !== -1,
+ edge: ua.indexOf('edge/') !== -1,
+
+ ie3d: ie3d,
+ webkit3d: webkit3d,
+ gecko3d: gecko3d,
+ opera3d: opera3d,
+ any3d: !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d || opera3d) && !phantomjs,
+
+ mobile: mobile,
+ mobileWebkit: mobile && webkit,
+ mobileWebkit3d: mobile && webkit3d,
+ mobileOpera: mobile && window.opera,
+
+ touch: !! touch,
+ msPointer: !! msPointer,
+ pointer: !! pointer,
+
+ retina: !! retina,
+ orientation: function() {
+ var w = window.innerWidth,
+ h = window.innerHeight,
+ _orientation = "portrait";
+
+ if (w > h) {
+ _orientation = "landscape";
+ }
+ if (Math.abs(window.orientation) == 90) {
+ //_orientation = "landscape";
+ }
+ trace(_orientation);
+ return _orientation;
+ }
+ };
+
+}());
+
+
+/* **********************************************
+ Begin TL.Load.js
+********************************************** */
+
+/* TL.Load
+ Loads External Javascript and CSS
+================================================== */
+
+TL.Load = (function (doc) {
+ var loaded = [];
+
+ function isLoaded(url) {
+
+ var i = 0,
+ has_loaded = false;
+
+ for (i = 0; i < loaded.length; i++) {
+ if (loaded[i] == url) {
+ has_loaded = true;
+ }
+ }
+
+ if (has_loaded) {
+ return true;
+ } else {
+ loaded.push(url);
+ return false;
+ }
+
+ }
+
+ return {
+
+ css: function (urls, callback, obj, context) {
+ if (!isLoaded(urls)) {
+ TL.LoadIt.css(urls, callback, obj, context);
+ } else {
+ callback();
+ }
+ },
+
+ js: function (urls, callback, obj, context) {
+ if (!isLoaded(urls)) {
+ TL.LoadIt.js(urls, callback, obj, context);
+ } else {
+ callback();
+ }
+ }
+ };
+
+})(this.document);
+
+
+/*jslint browser: true, eqeqeq: true, bitwise: true, newcap: true, immed: true, regexp: false */
+
+/*
+LazyLoad makes it easy and painless to lazily load one or more external
+JavaScript or CSS files on demand either during or after the rendering of a web
+page.
+
+Supported browsers include Firefox 2+, IE6+, Safari 3+ (including Mobile
+Safari), Google Chrome, and Opera 9+. Other browsers may or may not work and
+are not officially supported.
+
+Visit https://github.com/rgrove/lazyload/ for more info.
+
+Copyright (c) 2011 Ryan Grove <ryan@wonko.com>
+All rights reserved.
+
+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.
+
+@module lazyload
+@class LazyLoad
+@static
+@version 2.0.3 (git)
+*/
+
+TL.LoadIt = (function (doc) {
+ // -- Private Variables ------------------------------------------------------
+
+ // User agent and feature test information.
+ var env,
+
+ // Reference to the <head> element (populated lazily).
+ head,
+
+ // Requests currently in progress, if any.
+ pending = {},
+
+ // Number of times we've polled to check whether a pending stylesheet has
+ // finished loading. If this gets too high, we're probably stalled.
+ pollCount = 0,
+
+ // Queued requests.
+ queue = {css: [], js: []},
+
+ // Reference to the browser's list of stylesheets.
+ styleSheets = doc.styleSheets;
+
+ // -- Private Methods --------------------------------------------------------
+
+ /**
+ Creates and returns an HTML element with the specified name and attributes.
+
+ @method createNode
+ @param {String} name element name
+ @param {Object} attrs name/value mapping of element attributes
+ @return {HTMLElement}
+ @private
+ */
+ function createNode(name, attrs) {
+ var node = doc.createElement(name), attr;
+
+ for (attr in attrs) {
+ if (attrs.hasOwnProperty(attr)) {
+ node.setAttribute(attr, attrs[attr]);
+ }
+ }
+
+ return node;
+ }
+
+ /**
+ Called when the current pending resource of the specified type has finished
+ loading. Executes the associated callback (if any) and loads the next
+ resource in the queue.
+
+ @method finish
+ @param {String} type resource type ('css' or 'js')
+ @private
+ */
+ function finish(type) {
+ var p = pending[type],
+ callback,
+ urls;
+
+ if (p) {
+ callback = p.callback;
+ urls = p.urls;
+
+ urls.shift();
+ pollCount = 0;
+
+ // If this is the last of the pending URLs, execute the callback and
+ // start the next request in the queue (if any).
+ if (!urls.length) {
+ callback && callback.call(p.context, p.obj);
+ pending[type] = null;
+ queue[type].length && load(type);
+ }
+ }
+ }
+
+ /**
+ Populates the <code>env</code> variable with user agent and feature test
+ information.
+
+ @method getEnv
+ @private
+ */
+ function getEnv() {
+ var ua = navigator.userAgent;
+
+ env = {
+ // True if this browser supports disabling async mode on dynamically
+ // created script nodes. See
+ // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order
+ async: doc.createElement('script').async === true
+ };
+
+ (env.webkit = /AppleWebKit\//.test(ua))
+ || (env.ie = /MSIE/.test(ua))
+ || (env.opera = /Opera/.test(ua))
+ || (env.gecko = /Gecko\//.test(ua))
+ || (env.unknown = true);
+ }
+
+ /**
+ Loads the specified resources, or the next resource of the specified type
+ in the queue if no resources are specified. If a resource of the specified
+ type is already being loaded, the new request will be queued until the
+ first request has been finished.
+
+ When an array of resource URLs is specified, those URLs will be loaded in
+ parallel if it is possible to do so while preserving execution order. All
+ browsers support parallel loading of CSS, but only Firefox and Opera
+ support parallel loading of scripts. In other browsers, scripts will be
+ queued and loaded one at a time to ensure correct execution order.
+
+ @method load
+ @param {String} type resource type ('css' or 'js')
+ @param {String|Array} urls (optional) URL or array of URLs to load
+ @param {Function} callback (optional) callback function to execute when the
+ resource is loaded
+ @param {Object} obj (optional) object to pass to the callback function
+ @param {Object} context (optional) if provided, the callback function will
+ be executed in this object's context
+ @private
+ */
+ function load(type, urls, callback, obj, context) {
+ var _finish = function () { finish(type); },
+ isCSS = type === 'css',
+ nodes = [],
+ i, len, node, p, pendingUrls, url;
+
+ env || getEnv();
+
+ if (urls) {
+ // If urls is a string, wrap it in an array. Otherwise assume it's an
+ // array and create a copy of it so modifications won't be made to the
+ // original.
+ urls = typeof urls === 'string' ? [urls] : urls.concat();
+
+ // Create a request object for each URL. If multiple URLs are specified,
+ // the callback will only be executed after all URLs have been loaded.
+ //
+ // Sadly, Firefox and Opera are the only browsers capable of loading
+ // scripts in parallel while preserving execution order. In all other
+ // browsers, scripts must be loaded sequentially.
+ //
+ // All browsers respect CSS specificity based on the order of the link
+ // elements in the DOM, regardless of the order in which the stylesheets
+ // are actually downloaded.
+ if (isCSS || env.async || env.gecko || env.opera) {
+ // Load in parallel.
+ queue[type].push({
+ urls : urls,
+ callback: callback,
+ obj : obj,
+ context : context
+ });
+ } else {
+ // Load sequentially.
+ for (i = 0, len = urls.length; i < len; ++i) {
+ queue[type].push({
+ urls : [urls[i]],
+ callback: i === len - 1 ? callback : null, // callback is only added to the last URL
+ obj : obj,
+ context : context
+ });
+ }
+ }
+ }
+
+ // If a previous load request of this type is currently in progress, we'll
+ // wait our turn. Otherwise, grab the next item in the queue.
+ if (pending[type] || !(p = pending[type] = queue[type].shift())) {
+ return;
+ }
+
+ head || (head = doc.head || doc.getElementsByTagName('head')[0]);
+ pendingUrls = p.urls;
+
+ for (i = 0, len = pendingUrls.length; i < len; ++i) {
+ url = pendingUrls[i];
+
+ if (isCSS) {
+ node = env.gecko ? createNode('style') : createNode('link', {
+ href: url,
+ rel : 'stylesheet'
+ });
+ } else {
+ node = createNode('script', {src: url});
+ node.async = false;
+ }
+
+ node.className = 'lazyload';
+ node.setAttribute('charset', 'utf-8');
+
+ if (env.ie && !isCSS) {
+ node.onreadystatechange = function () {
+ if (/loaded|complete/.test(node.readyState)) {
+ node.onreadystatechange = null;
+ _finish();
+ }
+ };
+ } else if (isCSS && (env.gecko || env.webkit)) {
+ // Gecko and WebKit don't support the onload event on link nodes.
+ if (env.webkit) {
+ // In WebKit, we can poll for changes to document.styleSheets to
+ // figure out when stylesheets have loaded.
+ p.urls[i] = node.href; // resolve relative URLs (or polling won't work)
+ pollWebKit();
+ } else {
+ // In Gecko, we can import the requested URL into a <style> node and
+ // poll for the existence of node.sheet.cssRules. Props to Zach
+ // Leatherman for calling my attention to this technique.
+ node.innerHTML = '@import "' + url + '";';
+ pollGecko(node);
+ }
+ } else {
+ node.onload = node.onerror = _finish;
+ }
+
+ nodes.push(node);
+ }
+
+ for (i = 0, len = nodes.length; i < len; ++i) {
+ head.appendChild(nodes[i]);
+ }
+ }
+
+ /**
+ Begins polling to determine when the specified stylesheet has finished loading
+ in Gecko. Polling stops when all pending stylesheets have loaded or after 10
+ seconds (to prevent stalls).
+
+ Thanks to Zach Leatherman for calling my attention to the @import-based
+ cross-domain technique used here, and to Oleg Slobodskoi for an earlier
+ same-domain implementation. See Zach's blog for more details:
+ http://www.zachleat.com/web/2010/07/29/load-css-dynamically/
+
+ @method pollGecko
+ @param {HTMLElement} node Style node to poll.
+ @private
+ */
+ function pollGecko(node) {
+ var hasRules;
+
+ try {
+ // We don't really need to store this value or ever refer to it again, but
+ // if we don't store it, Closure Compiler assumes the code is useless and
+ // removes it.
+ hasRules = !!node.sheet.cssRules;
+ } catch (ex) {
+ // An exception means the stylesheet is still loading.
+ pollCount += 1;
+
+ if (pollCount < 200) {
+ setTimeout(function () { pollGecko(node); }, 50);
+ } else {
+ // We've been polling for 10 seconds and nothing's happened. Stop
+ // polling and finish the pending requests to avoid blocking further
+ // requests.
+ hasRules && finish('css');
+ }
+
+ return;
+ }
+
+ // If we get here, the stylesheet has loaded.
+ finish('css');
+ }
+
+ /**
+ Begins polling to determine when pending stylesheets have finished loading
+ in WebKit. Polling stops when all pending stylesheets have loaded or after 10
+ seconds (to prevent stalls).
+
+ @method pollWebKit
+ @private
+ */
+ function pollWebKit() {
+ var css = pending.css, i;
+
+ if (css) {
+ i = styleSheets.length;
+
+ // Look for a stylesheet matching the pending URL.
+ while (--i >= 0) {
+ if (styleSheets[i].href === css.urls[0]) {
+ finish('css');
+ break;
+ }
+ }
+
+ pollCount += 1;
+
+ if (css) {
+ if (pollCount < 200) {
+ setTimeout(pollWebKit, 50);
+ } else {
+ // We've been polling for 10 seconds and nothing's happened, which may
+ // indicate that the stylesheet has been removed from the document
+ // before it had a chance to load. Stop polling and finish the pending
+ // request to prevent blocking further requests.
+ finish('css');
+ }
+ }
+ }
+ }
+
+ return {
+
+ /**
+ Requests the specified CSS URL or URLs and executes the specified
+ callback (if any) when they have finished loading. If an array of URLs is
+ specified, the stylesheets will be loaded in parallel and the callback
+ will be executed after all stylesheets have finished loading.
+
+ @method css
+ @param {String|Array} urls CSS URL or array of CSS URLs to load
+ @param {Function} callback (optional) callback function to execute when
+ the specified stylesheets are loaded
+ @param {Object} obj (optional) object to pass to the callback function
+ @param {Object} context (optional) if provided, the callback function
+ will be executed in this object's context
+ @static
+ */
+ css: function (urls, callback, obj, context) {
+ load('css', urls, callback, obj, context);
+ },
+
+ /**
+ Requests the specified JavaScript URL or URLs and executes the specified
+ callback (if any) when they have finished loading. If an array of URLs is
+ specified and the browser supports it, the scripts will be loaded in
+ parallel and the callback will be executed after all scripts have
+ finished loading.
+
+ Currently, only Firefox and Opera support parallel loading of scripts while
+ preserving execution order. In other browsers, scripts will be
+ queued and loaded one at a time to ensure correct execution order.
+
+ @method js
+ @param {String|Array} urls JS URL or array of JS URLs to load
+ @param {Function} callback (optional) callback function to execute when
+ the specified scripts are loaded
+ @param {Object} obj (optional) object to pass to the callback function
+ @param {Object} context (optional) if provided, the callback function
+ will be executed in this object's context
+ @static
+ */
+ js: function (urls, callback, obj, context) {
+ load('js', urls, callback, obj, context);
+ }
+
+ };
+})(this.document);
+
+
+/* **********************************************
+ Begin TL.TimelineConfig.js
+********************************************** */
+
+/* TL.TimelineConfig
+separate the configuration from the display (TL.Timeline)
+to make testing easier
+================================================== */
+TL.TimelineConfig = TL.Class.extend({
+
+ includes: [],
+ initialize: function (data) {
+ this.title = '';
+ this.scale = '';
+ this.events = [];
+ this.eras = [];
+ this.event_dict = {}; // despite name, all slides (events + title) indexed by slide.unique_id
+ this.messages = {
+ errors: [],
+ warnings: []
+ };
+
+ // Initialize the data
+ if (typeof data === 'object' && data.events) {
+ this.scale = data.scale;
+ this.events = [];
+ this._ensureValidScale(data.events);
+
+ if (data.title) {
+ var title_id = this._assignID(data.title);
+ this._tidyFields(data.title);
+ this.title = data.title;
+ this.event_dict[title_id] = this.title;
+ }
+
+ for (var i = 0; i < data.events.length; i++) {
+ try {
+ this.addEvent(data.events[i], true);
+ } catch (e) {
+ this.logError(e);
+ }
+ }
+
+ if (data.eras) {
+ for (var i = 0; i < data.eras.length; i++) {
+ try {
+ this.addEra(data.eras[i], true);
+ } catch (e) {
+ this.logError("Era " + i + ": " + e);
+ }
+ }
+ }
+
+ TL.DateUtil.sortByDate(this.events);
+ TL.DateUtil.sortByDate(this.eras);
+
+ }
+ },
+ logError: function(msg) {
+ trace(msg);
+ this.messages.errors.push(msg);
+ },
+ /*
+ * Return any accumulated error messages. If `sep` is passed, it should be a string which will be used to join all messages, resulting in a string return value. Otherwise,
+ * errors will be returned as an array.
+ */
+ getErrors: function(sep) {
+ if (sep) {
+ return this.messages.errors.join(sep);
+ } else {
+ return this.messages.errors;
+ }
+ },
+ /*
+ * Perform any sanity checks we can before trying to use this to make a timeline. Returns nothing, but errors will be logged
+ * such that after this is called, one can test `this.isValid()` to see if everything is OK.
+ */
+ validate: function() {
+ if (typeof(this.events) == "undefined" || typeof(this.events.length) == "undefined" || this.events.length == 0) {
+ this.logError("Timeline configuration has no events.")
+ }
+
+ // make sure all eras have start and end dates
+ for (var i = 0; i < this.eras.length; i++) {
+ if (typeof(this.eras[i].start_date) == 'undefined' || typeof(this.eras[i].end_date) == 'undefined') {
+ var era_identifier;
+ if (this.eras[i].text && this.eras[i].text.headline) {
+ era_identifier = this.eras[i].text.headline
+ } else {
+ era_identifier = "era " + (i+1);
+ }
+ this.logError("All eras must have start and end dates. [" + era_identifier + "]") // add internationalization (I18N) and context
+ }
+ };
+ },
+
+ isValid: function() {
+ return this.messages.errors.length == 0;
+ },
+ /* Add an event (including cleaning/validation) and return the unique id.
+ * All event data validation should happen in here.
+ * Throws: TL.Error for any validation problems.
+ */
+ addEvent: function(data, defer_sort) {
+ var event_id = this._assignID(data);
+
+ if (typeof(data.start_date) == 'undefined') {
+ throw new TL.Error("missing_start_date_err", event_id);
+ } else {
+ this._processDates(data);
+ this._tidyFields(data);
+ }
+
+ this.events.push(data);
+ this.event_dict[event_id] = data;
+
+ if (!defer_sort) {
+ TL.DateUtil.sortByDate(this.events);
+ }
+ return event_id;
+ },
+
+ addEra: function(data, defer_sort) {
+ var event_id = this._assignID(data);
+
+ if (typeof(data.start_date) == 'undefined') {
+ throw new TL.Error("missing_start_date_err", event_id);
+ } else {
+ this._processDates(data);
+ this._tidyFields(data);
+ }
+
+ this.eras.push(data);
+ this.event_dict[event_id] = data;
+
+ if (!defer_sort) {
+ TL.DateUtil.sortByDate(this.eras);
+ }
+ return event_id;
+ },
+
+ /**
+ * Given a slide, verify that its ID is unique, or assign it one which is.
+ * The assignment happens in this function, and the assigned ID is also
+ * the return value. Not thread-safe, because ids are not reserved
+ * when assigned here.
+ */
+ _assignID: function(slide) {
+ var slide_id = slide.unique_id;
+ if (!TL.Util.trim(slide_id)) {
+ // give it an ID if it doesn't have one
+ slide_id = (slide.text) ? TL.Util.slugify(slide.text.headline) : null;
+ }
+ // make sure it's unique and add it.
+ slide.unique_id = TL.Util.ensureUniqueKey(this.event_dict,slide_id);
+ return slide.unique_id
+ },
+
+ /**
+ * Given an array of slide configs (the events), ensure that each one has a distinct unique_id. The id of the title
+ * is also passed in because in most ways it functions as an event slide, and the event IDs must also all be unique
+ * from the title ID.
+ */
+ _makeUniqueIdentifiers: function(title_id, array) {
+ var used = [title_id];
+
+ // establish which IDs are assigned and if any appear twice, clear out successors.
+ for (var i = 0; i < array.length; i++) {
+ if (TL.Util.trim(array[i].unique_id)) {
+ array[i].unique_id = TL.Util.slugify(array[i].unique_id); // enforce valid
+ if (used.indexOf(array[i].unique_id) == -1) {
+ used.push(array[i].unique_id);
+ } else { // it was already used, wipe it out
+ array[i].unique_id = '';
+ }
+ }
+ };
+
+ if (used.length != (array.length + 1)) {
+ // at least some are yet to be assigned
+ for (var i = 0; i < array.length; i++) {
+ if (!array[i].unique_id) {
+ // use the headline for the unique ID if it's available
+ var slug = (array[i].text) ? TL.Util.slugify(array[i].text.headline) : null;
+ if (!slug) {
+ slug = TL.Util.unique_ID(6); // or generate a random ID
+ }
+ if (used.indexOf(slug) != -1) {
+ slug = slug + '-' + i; // use the index to get a unique ID.
+ }
+ used.push(slug);
+ array[i].unique_id = slug;
+ }
+ }
+ }
+ },
+ _ensureValidScale: function(events) {
+ if(!this.scale) {
+ trace("Determining scale dynamically");
+ this.scale = "human"; // default to human unless there's a slide which is explicitly 'cosmological' or one which has a cosmological year
+
+ for (var i = 0; i < events.length; i++) {
+ if (events[i].scale == 'cosmological') {
+ this.scale = 'cosmological';
+ break;
+ }
+ if (events[i].start_date && typeof(events[i].start_date.year) != "undefined") {
+ var d = new TL.BigDate(events[i].start_date);
+ var year = d.data.date_obj.year;
+ if(year < -271820 || year > 275759) {
+ this.scale = "cosmological";
+ break;
+ }
+ }
+ }
+ }
+ var dateCls = TL.DateUtil.SCALE_DATE_CLASSES[this.scale];
+ if (!dateCls) { this.logError("Don't know how to process dates on scale "+this.scale); }
+ },
+ /*
+ Given a thing which has a start_date and optionally an end_date, make sure that it is an instance
+ of the correct date class (for human or cosmological scale). For slides, remove redundant end dates
+ (people frequently configure an end date which is the same as the start date).
+ */
+ _processDates: function(slide_or_era) {
+ var dateCls = TL.DateUtil.SCALE_DATE_CLASSES[this.scale];
+ if(!(slide_or_era.start_date instanceof dateCls)) {
+ var start_date = slide_or_era.start_date;
+ slide_or_era.start_date = new dateCls(start_date);
+
+ // eliminate redundant end dates.
+ if (typeof(slide_or_era.end_date) != 'undefined' && !(slide_or_era.end_date instanceof dateCls)) {
+ var end_date = slide_or_era.end_date;
+ var equal = true;
+ for (property in start_date) {
+ equal = equal && (start_date[property] == end_date[property]);
+ }
+ if (equal) {
+ trace("End date same as start date is redundant; dropping end date");
+ delete slide_or_era.end_date;
+ } else {
+ slide_or_era.end_date = new dateCls(end_date);
+ }
+
+ }
+ }
+
+ },
+ /**
+ * Return the earliest date that this config knows about, whether it's a slide or an era
+ */
+ getEarliestDate: function() {
+ // counting that dates were sorted in initialization
+ var date = this.events[0].start_date;
+ if (this.eras && this.eras.length > 0) {
+ if (this.eras[0].start_date.isBefore(date)) {
+ return this.eras[0].start_date;
+ }
+ }
+ return date;
+
+ },
+ /**
+ * Return the latest date that this config knows about, whether it's a slide or an era, taking end_dates into account.
+ */
+ getLatestDate: function() {
+ var dates = [];
+ for (var i = 0; i < this.events.length; i++) {
+ if (this.events[i].end_date) {
+ dates.push({ date: this.events[i].end_date });
+ } else {
+ dates.push({ date: this.events[i].start_date });
+ }
+ }
+ for (var i = 0; i < this.eras.length; i++) {
+ if (this.eras[i].end_date) {
+ dates.push({ date: this.eras[i].end_date });
+ } else {
+ dates.push({ date: this.eras[i].start_date });
+ }
+ }
+ TL.DateUtil.sortByDate(dates, 'date');
+ return dates.slice(-1)[0].date;
+ },
+ _tidyFields: function(slide) {
+
+ function fillIn(obj,key,default_value) {
+ if (!default_value) default_value = '';
+ if (!obj.hasOwnProperty(key)) { obj[key] = default_value }
+ }
+
+ if (slide.group) {
+ slide.group = TL.Util.trim(slide.group);
+ }
+
+ if (!slide.text) {
+ slide.text = {};
+ }
+ fillIn(slide.text,'text');
+ fillIn(slide.text,'headline');
+ }
+});
+
+
+/* **********************************************
+ Begin TL.ConfigFactory.js
+********************************************** */
+
+/* TL.ConfigFactory.js
+ * Build TimelineConfig objects from other data sources
+ */
+;(function(TL){
+ /*
+ * Convert a URL to a Google Spreadsheet (typically a /pubhtml version but somewhat flexible) into an object with the spreadsheet key (ID) and worksheet ID.
+
+ If `url` is actually a string which is only letters, numbers, '-' and '_', then it's assumed to be an ID already. If we had a more precise way of testing to see if the input argument was a valid key, we might apply it, but I don't know where that's documented.
+
+ If we're pretty sure this isn't a bare key or a url that could be used to find a Google spreadsheet then return null.
+ */
+ function parseGoogleSpreadsheetURL(url) {
+ parts = {
+ key: null,
+ worksheet: 0 // not really sure how to use this to get the feed for that sheet, so this is not ready except for first sheet right now
+ }
+ // key as url parameter (old-fashioned)
+ var key_pat = /\bkey=([-_A-Za-z0-9]+)&?/i;
+ var url_pat = /docs.google.com\/spreadsheets(.*?)\/d\//; // fixing issue of URLs with u/0/d
+
+ if (url.match(key_pat)) {
+ parts.key = url.match(key_pat)[1];
+ // can we get a worksheet from this form?
+ } else if (url.match(url_pat)) {
+ var pos = url.search(url_pat) + url.match(url_pat)[0].length;
+ var tail = url.substr(pos);
+ parts.key = tail.split('/')[0]
+ if (url.match(/\?gid=(\d+)/)) {
+ parts.worksheet = url.match(/\?gid=(\d+)/)[1];
+ }
+ } else if (url.match(/^\b[-_A-Za-z0-9]+$/)) {
+ parts.key = url;
+ }
+
+ if (parts.key) {
+ return parts;
+ } else {
+ return null;
+ }
+ }
+
+ function extractGoogleEntryData_V1(item) {
+ var item_data = {}
+ for (k in item) {
+ if (k.indexOf('gsx$') == 0) {
+ item_data[k.substr(4)] = item[k].$t;
+ }
+ }
+ if (TL.Util.isEmptyObject(item_data)) return null;
+ var d = {
+ media: {
+ caption: item_data.mediacaption || '',
+ credit: item_data.mediacredit || '',
+ url: item_data.media || '',
+ thumbnail: item_data.mediathumbnail || ''
+ },
+ text: {
+ headline: item_data.headline || '',
+ text: item_data.text || ''
+ },
+ group: item_data.tag || '',
+ type: item_data.type || ''
+ }
+ if (item_data.startdate) {
+ d['start_date'] = TL.Date.parseDate(item_data.startdate);
+ }
+ if (item_data.enddate) {
+ d['end_date'] = TL.Date.parseDate(item_data.enddate);
+ }
+
+
+ return d;
+ }
+
+ function extractGoogleEntryData_V3(item) {
+
+ function clean_integer(s) {
+ if (s) {
+ return s.replace(/[\s,]+/g,''); // doesn't handle '.' as comma separator, but how to distinguish that from decimal separator?
+ }
+ }
+
+ var item_data = {}
+ for (k in item) {
+ if (k.indexOf('gsx$') == 0) {
+ item_data[k.substr(4)] = TL.Util.trim(item[k].$t);
+ }
+ }
+ if (TL.Util.isEmptyObject(item_data)) return null;
+ var d = {
+ media: {
+ caption: item_data.mediacaption || '',
+ credit: item_data.mediacredit || '',
+ url: item_data.media || '',
+ thumbnail: item_data.mediathumbnail || ''
+ },
+ text: {
+ headline: item_data.headline || '',
+ text: item_data.text || ''
+ },
+ start_date: {
+ year: clean_integer(item_data.year),
+ month: clean_integer(item_data.month) || '',
+ day: clean_integer(item_data.day) || ''
+ },
+ end_date: {
+ year: clean_integer(item_data.endyear) || '',
+ month: clean_integer(item_data.endmonth) || '',
+ day: clean_integer(item_data.endday) || ''
+ },
+ display_date: item_data.displaydate || '',
+
+ type: item_data.type || ''
+ }
+
+ if (item_data.time) {
+ TL.Util.mergeData(d.start_date,TL.DateUtil.parseTime(item_data.time));
+ }
+
+ if (item_data.endtime) {
+ TL.Util.mergeData(d.end_date,TL.DateUtil.parseTime(item_data.endtime));
+ }
+
+
+ if (item_data.group) {
+ d.group = item_data.group;
+ }
+
+ if (d.end_date.year == '') {
+ var bad_date = d.end_date;
+ delete d.end_date;
+ if (bad_date.month != '' || bad_date.day != '' || bad_date.time != '') {
+ var label = d.text.headline ||
+ trace("Invalid end date for spreadsheet row. Must have a year if any other date fields are specified.");
+ trace(item);
+ }
+ }
+
+ if (item_data.background) {
+ if (item_data.background.match(/^(https?:)?\/\/?/)) { // support http, https, protocol relative, site relative
+ d['background'] = { 'url': item_data.background }
+ } else { // for now we'll trust it's a color
+ d['background'] = { 'color': item_data.background }
+ }
+ }
+
+ return d;
+ }
+
+
+
+ var getGoogleItemExtractor = function(data) {
+ if (typeof data.feed.entry === 'undefined'
+ || data.feed.entry.length == 0) {
+ throw new TL.Error("empty_feed_err");
+ }
+ var entry = data.feed.entry[0];
+
+ if (typeof entry.gsx$startdate !== 'undefined') {
+ // check headers V1
+ // var headers_V1 = ['startdate', 'enddate', 'headline','text','media','mediacredit','mediacaption','mediathumbnail','media','type','tag'];
+ // for (var i = 0; i < headers_V1.length; i++) {
+ // if (typeof entry['gsx$' + headers_V1[i]] == 'undefined') {
+ // throw new TL.Error("invalid_data_format_err");
+ // }
+ // }
+ return extractGoogleEntryData_V1;
+ } else if (typeof entry.gsx$year !== 'undefined') {
+ // check rest of V3 headers
+ var headers_V3 = ['month', 'day', 'time', 'endmonth', 'endyear', 'endday', 'endtime', 'displaydate', 'headline','text','media','mediacredit','mediacaption','mediathumbnail','type','group','background'];
+ // for (var i = 0; i < headers_V3.length; i++) {
+ // if (typeof entry['gsx$' + headers_V3[i]] == 'undefined') {
+ // throw new TL.Error("invalid_data_format_err");
+ // }
+ // }
+ return extractGoogleEntryData_V3;
+ }
+ throw new TL.Error("invalid_data_format_err");
+ }
+
+ var buildGoogleFeedURL = function(key, api_version) {
+ if (api_version == 'v4') {
+ return "https://sheets.googleapis.com/v4/spreadsheets/" + key + "/values/A1:R1000?key=AIzaSyCInR0kjJJ2Co6aQAXjLBQ14CEHam3K0xg";
+ } else {
+ return "https://spreadsheets.google.com/feeds/list/" + key + "/1/public/values?alt=json";
+ }
+ }
+
+ var jsonFromGoogleURL = function(google_url) {
+ var api_version = 'v3';
+ var parts = parseGoogleSpreadsheetURL(google_url);
+ if (parts && parts.key) {
+ var spreadsheet_key = parts.key;
+ } else {
+ throw new TL.Error('invalid_url_err', google_url);
+ }
+
+ var url = buildGoogleFeedURL(spreadsheet_key, api_version);
+
+ var response = TL.ajax({
+ url: url,
+ async: false
+ });
+
+ // tricky because errors can be in the response object or in the parsed data...
+
+ if (response.status != 200) {
+ console.log("Error fetching data " + api_version + ": " + response.status + " - " + response.statusText);
+ api_version = 'v4';
+ var url = buildGoogleFeedURL(spreadsheet_key, api_version);
+ console.log("trying v4 - " + google_url);
+ var response = TL.ajax({
+ url: url,
+ async: false
+ });
+
+ if (response.status == 403) {
+ throw new TL.Error('invalid_url_share_required');
+ } else if (response.status != 200) {
+ var msg = "Error fetching data " + api_version + ": " + response.status + " - " + response.statusText;
+ console.log(msg);
+ throw new TL.Error("google_error", msg);
+ }
+ }
+
+
+ var data = JSON.parse(response.responseText);
+
+ if (data.error) {
+ var msg = "Error fetching data " + api_version + ": " + response.status + " - " + response.statusText;
+ console.log(msg);
+ console.log(data.error);
+ throw new TL.Error("google_error", msg);
+ }
+
+ return googleFeedJSONtoTimelineJSON(data);
+ }
+
+ function extractGoogleEntryData_V4(column, item) {
+ function clean_integer(s) {
+ if (s) {
+ return s.replace(/[\s,]+/g,''); // doesn't handle '.' as comma separator, but how to distinguish that from decimal separator?
+ }
+ }
+ // console.log(item);
+ var item_data = {};
+ for (var i = 1; i < item.length; i++) {
+ if (column.length >= i) {
+ var column_name = column[i].toLowerCase().replace(" ", "");
+ item_data[column_name] = item[i];
+ }
+
+ }
+
+ var event = {
+ media: {
+ caption: item_data.mediacaption || '',
+ credit: item_data.mediacredit || '',
+ url: item_data.media || '',
+ thumbnail: item_data.mediathumbnail || ''
+ },
+ text: {
+ headline: item_data.headline || '',
+ text: item_data.text || ''
+ },
+ start_date: {
+ year: clean_integer(item[0]),
+ month: clean_integer(item[1]) || '',
+ day: clean_integer(item[2]) || ''
+ },
+ end_date: {
+ year: clean_integer(item_data.endyear) || '',
+ month: clean_integer(item_data.endmonth) || '',
+ day: clean_integer(item_data.endday) || ''
+ },
+ display_date: item_data.displaydate || '',
+
+ type: item_data.type || ''
+ }
+
+
+ if (item_data.time) {
+ TL.Util.mergeData(event.start_date,TL.DateUtil.parseTime(item[3]));
+ }
+
+ if (item_data.endtime) {
+ TL.Util.mergeData(event.end_date,TL.DateUtil.parseTime(item_data.endtime));
+ }
+
+ if (item_data.group) {
+ event.group = item_data.group;
+ }
+
+ if (event.end_date.year == '') {
+ var bad_date = event.end_date;
+ delete event.end_date;
+ if (bad_date.month != '' || bad_date.day != '' || bad_date.time != '') {
+ var label = event.text.headline ||
+ trace("Invalid end date for spreadsheet row. Must have a year if any other date fields are specified.");
+ trace(item);
+ }
+ }
+
+ if (item_data.background) {
+ if (item_data.background.match(/^(https?:)?\/\/?/)) { // support http, https, protocol relative, site relative
+ event['background'] = { 'url': item_data.background }
+ } else { // for now we'll trust it's a color
+ event['background'] = { 'color': item_data.background }
+ }
+ }
+
+ return event;
+ }
+
+ var googleFeedJSONtoTimelineJSON = function(data) {
+ var timeline_config = { 'events': [], 'errors': [], 'warnings': [], 'eras': [] }
+
+ if (data.values) {
+ // Google Sheets API v4
+ for (var i = 1; i < data.values.length; i++) {
+ var event = extractGoogleEntryData_V4(data.values[0], data.values[i]);
+ if (event) { // blank rows return null
+ var row_type = 'event';
+ if (typeof (event.type) != 'undefined') {
+ row_type = event.type;
+ delete event.type;
+ }
+ if (row_type == 'title') {
+ if (!timeline_config.title) {
+ timeline_config.title = event;
+ } else {
+ timeline_config.warnings.push("Multiple title slides detected.");
+ timeline_config.events.push(event);
+ }
+ } else if (row_type == 'era') {
+ timeline_config.eras.push(event);
+ } else {
+ timeline_config.events.push(event);
+ }
+ }
+ }
+ } else {
+
+ // Google Sheets API v3
+ var extract = getGoogleItemExtractor(data);
+ for (var i = 0; i < data.feed.entry.length; i++) {
+ try {
+ var event = extract(data.feed.entry[i]);
+ if (event) { // blank rows return null
+ var row_type = 'event';
+ if (typeof(event.type) != 'undefined') {
+ row_type = event.type;
+ delete event.type;
+ }
+ if (row_type == 'title') {
+ if (!timeline_config.title) {
+ timeline_config.title = event;
+ } else {
+ timeline_config.warnings.push("Multiple title slides detected.");
+ timeline_config.events.push(event);
+ }
+ } else if (row_type == 'era') {
+ timeline_config.eras.push(event);
+ } else {
+ timeline_config.events.push(event);
+ }
+ }
+ } catch(e) {
+ if (e.message) {
+ e = e.message;
+ }
+ timeline_config.errors.push(e + " ["+ i +"]");
+ }
+ };
+
+ }
+
+ return timeline_config;
+
+ }
+
+ var makeConfig = function(url, callback) {
+ var tc,
+ key = parseGoogleSpreadsheetURL(url);
+
+ if (key) {
+ try {
+ var json = jsonFromGoogleURL(url);
+ } catch(e) {
+ tc = new TL.TimelineConfig();
+ if (e.name == 'NetworkError') {
+ tc.logError(new TL.Error("network_err"));
+ } else if(e.name == 'TL.Error') {
+ tc.logError(e);
+ } else {
+ tc.logError(new TL.Error("unknown_read_err", e.name));
+ }
+ callback(tc);
+ return;
+ }
+ tc = new TL.TimelineConfig(json);
+ if (json.errors) {
+ for (var i = 0; i < json.errors.length; i++) {
+ tc.logError(json.errors[i]);
+ };
+ }
+ callback(tc);
+ } else {
+ TL.ajax({
+ url: url,
+ dataType: 'json',
+ success: function(data){
+ try {
+ tc = new TL.TimelineConfig(data);
+ } catch(e) {
+ tc = new TL.TimelineConfig();
+ tc.logError(e);
+ }
+ callback(tc);
+ },
+ error: function(xhr, errorType, error) {
+ tc = new TL.TimelineConfig();
+ if (errorType == 'parsererror') {
+ var error = new TL.Error("invalid_url_err");
+ } else {
+ var error = new TL.Error("unknown_read_err", errorType)
+ }
+ tc.logError(error);
+ callback(tc);
+ }
+ });
+
+ }
+ }
+
+ TL.ConfigFactory = {
+ // export for unit testing and use by authoring tool
+ parseGoogleSpreadsheetURL: parseGoogleSpreadsheetURL,
+ // export for unit testing
+ googleFeedJSONtoTimelineJSON: googleFeedJSONtoTimelineJSON,
+
+
+ fromGoogle: function(url) {
+ console.warn("TL.ConfigFactory.fromGoogle is deprecated and will be removed soon. Use TL.ConfigFactory.makeConfig(url,callback)")
+ return jsonFromGoogleURL(url);
+
+ },
+
+ /*
+ * Given a URL to a Timeline data source, read the data, create a TimelineConfig
+ * object, and call the given `callback` function passing the created config as
+ * the only argument. This should be the main public interface to getting configs
+ * from any kind of URL, Google or direct JSON.
+ */
+ makeConfig: makeConfig,
+ }
+})(TL)
+
+
+/* **********************************************
+ Begin TL.Language.js
+********************************************** */
+
+TL.Language = function(options) {
+ // borrowed from http://stackoverflow.com/a/14446414/102476
+ for (k in TL.Language.languages.en) {
+ this[k] = TL.Language.languages.en[k];
+ }
+ if (options && options.language && typeof(options.language) == 'string' && options.language != 'en') {
+ var code = options.language;
+ if (!(code in TL.Language.languages)) {
+ if (/\.json$/.test(code)) {
+ var url = code;
+ } else {
+ var fragment = "/locale/" + code + ".json";
+ var script_path = options.script_path || TL.Timeline.source_path;
+ if (/\/$/.test(script_path)) { fragment = fragment.substr(1)}
+ var url = script_path + fragment;
+ }
+ var self = this;
+ var xhr = TL.ajax({
+ url: url, async: false
+ });
+ if (xhr.status == 200) {
+ TL.Language.languages[code] = JSON.parse(xhr.responseText);
+ } else {
+ throw "Could not load language [" + code + "]: " + xhr.statusText;
+ }
+ }
+ TL.Util.mergeData(this,TL.Language.languages[code]);
+
+ }
+}
+
+TL.Language.formatNumber = function(val,mask) {
+ if (mask.match(/%(\.(\d+))?f/)) {
+ var match = mask.match(/%(\.(\d+))?f/);
+ var token = match[0];
+ if (match[2]) {
+ val = val.toFixed(match[2]);
+ }
+ return mask.replace(token,val);
+ }
+ // use mask as literal display value.
+ return mask;
+}
+
+
+
+/* TL.Util.mergeData is shallow, we have nested dicts.
+ This is a simplistic handling but should work.
+ */
+TL.Language.prototype.mergeData = function(lang_json) {
+ for (k in TL.Language.languages.en) {
+ if (lang_json[k]) {
+ if (typeof(this[k]) == 'object') {
+ TL.Util.mergeData(lang_json[k], this[k]);
+ } else {
+ this[k] = lang_json[k]; // strings, mostly
+ }
+ }
+ }
+}
+
+TL.Language.fallback = { messages: {} }; // placeholder to satisfy IE8 early compilation
+TL.Language.prototype.getMessage = function(k) {
+ return this.messages[k] || TL.Language.fallback.messages[k] || k;
+}
+
+TL.Language.prototype._ = TL.Language.prototype.getMessage; // keep it concise
+
+TL.Language.prototype.formatDate = function(date, format_name) {
+
+ if (date.constructor == Date) {
+ return this.formatJSDate(date, format_name);
+ }
+
+ if (date.constructor == TL.BigYear) {
+ return this.formatBigYear(date, format_name);
+ }
+
+ if (date.data && date.data.date_obj) {
+ return this.formatDate(date.data.date_obj, format_name);
+ }
+
+ trace("Unfamiliar date presented for formatting");
+ return date.toString();
+}
+
+TL.Language.prototype.formatBigYear = function(bigyear, format_name) {
+ var the_year = bigyear.year;
+ var format_list = this.bigdateformats[format_name] || this.bigdateformats['fallback'];
+
+ if (format_list) {
+ for (var i = 0; i < format_list.length; i++) {
+ var tuple = format_list[i];
+ if (Math.abs(the_year / tuple[0]) > 1) {
+ // will we ever deal with distant future dates?
+ return TL.Language.formatNumber(Math.abs(the_year / tuple[0]),tuple[1])
+ }
+ };
+
+ return the_year.toString();
+
+ } else {
+ trace("Language file dateformats missing cosmological. Falling back.");
+ return TL.Language.formatNumber(the_year,format_name);
+ }
+}
+
+TL.Language.prototype.formatJSDate = function(js_date, format_name) {
+ // ultimately we probably want this to work with TL.Date instead of (in addition to?) JS Date
+ // utc, timezone and timezoneClip are carry over from Steven Levithan implementation. We probably aren't going to use them.
+ var self = this;
+ var formatPeriod = function(fmt, value) {
+ var formats = self.period_labels[fmt];
+ if (formats) {
+ var fmt = (value < 12) ? formats[0] : formats[1];
+ }
+ return "<span class='tl-timeaxis-timesuffix'>" + fmt + "</span>";
+ }
+
+ var utc = false,
+ timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
+ timezoneClip = /[^-+\dA-Z]/g;
+
+
+ if (!format_name) {
+ format_name = 'full';
+ }
+
+ var mask = this.dateformats[format_name] || TL.Language.fallback.dateformats[format_name];
+ if (!mask) {
+ mask = format_name; // allow custom format strings
+ }
+
+
+ var _ = utc ? "getUTC" : "get",
+ d = js_date[_ + "Date"](),
+ D = js_date[_ + "Day"](),
+ m = js_date[_ + "Month"](),
+ y = js_date[_ + "FullYear"](),
+ H = js_date[_ + "Hours"](),
+ M = js_date[_ + "Minutes"](),
+ s = js_date[_ + "Seconds"](),
+ L = js_date[_ + "Milliseconds"](),
+ o = utc ? 0 : js_date.getTimezoneOffset(),
+ year = "",
+ flags = {
+ d: d,
+ dd: TL.Util.pad(d),
+ ddd: this.date.day_abbr[D],
+ dddd: this.date.day[D],
+ m: m + 1,
+ mm: TL.Util.pad(m + 1),
+ mmm: this.date.month_abbr[m],
+ mmmm: this.date.month[m],
+ yy: String(y).slice(2),
+ yyyy: (y < 0 && this.has_negative_year_modifier()) ? Math.abs(y) : y,
+ h: H % 12 || 12,
+ hh: TL.Util.pad(H % 12 || 12),
+ H: H,
+ HH: TL.Util.pad(H),
+ M: M,
+ MM: TL.Util.pad(M),
+ s: s,
+ ss: TL.Util.pad(s),
+ l: TL.Util.pad(L, 3),
+ L: TL.Util.pad(L > 99 ? Math.round(L / 10) : L),
+ t: formatPeriod('t',H),
+ tt: formatPeriod('tt',H),
+ T: formatPeriod('T',H),
+ TT: formatPeriod('TT',H),
+ Z: utc ? "UTC" : (String(js_date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
+ o: (o > 0 ? "-" : "+") + TL.Util.pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
+ S: ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
+ };
+
+ var formatted = mask.replace(TL.Language.DATE_FORMAT_TOKENS, function ($0) {
+ return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
+ });
+
+ return this._applyEra(formatted, y);
+}
+
+TL.Language.prototype.has_negative_year_modifier = function() {
+ return Boolean(this.era_labels.negative_year.prefix || this.era_labels.negative_year.suffix);
+}
+
+
+TL.Language.prototype._applyEra = function(formatted_date, original_year) {
+ // trusts that the formatted_date was property created with a non-negative year if there are
+ // negative affixes to be applied
+ var labels = (original_year < 0) ? this.era_labels.negative_year : this.era_labels.positive_year;
+ var result = '';
+ if (labels.prefix) { result += '<span>' + labels.prefix + '</span> ' }
+ result += formatted_date;
+ if (labels.suffix) { result += ' <span>' + labels.suffix + '</span>' }
+ return result;
+}
+
+
+TL.Language.DATE_FORMAT_TOKENS = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g;
+
+TL.Language.languages = {
+ /*
+ This represents the canonical list of message keys which translation files should handle. The existence of the 'en.json' file should not mislead you.
+ It is provided more as a starting point for someone who wants to provide a
+ new translation since the form for non-default languages (JSON not JS) is slightly different from what appears below. Also, those files have some message keys grandfathered in from TimelineJS2 which we'd rather not have to
+ get "re-translated" if we use them.
+*/
+ en: {
+ name: "English",
+ lang: "en",
+ api: {
+ wikipedia: "en" // the two letter code at the beginning of the Wikipedia subdomain for this language
+ },
+ messages: {
+ loading: "Loading",
+ wikipedia: "From Wikipedia, the free encyclopedia",
+ error: "Error",
+ contract_timeline: "Contract Timeline",
+ return_to_title: "Return to Title",
+ loading_content: "Loading Content",
+ expand_timeline: "Expand Timeline",
+ loading_timeline: "Loading Timeline... ",
+ swipe_to_navigate: "Swipe to Navigate<br><span class='tl-button'>OK</span>",
+ unknown_read_err: "An unexpected error occurred trying to read your spreadsheet data",
+ invalid_url_err: "Unable to read Timeline data. Make sure your URL is for a Google Spreadsheet or a Timeline JSON file.",
+ invalid_url_share_required: "Because of unexpected changes to Google's data access API, the creator of this timeline must enable 'anyone with the url can read' access for this spreadsheet. See timeline.knightlab.com for more information.",
+ network_err: "Unable to read your Google Spreadsheet. Make sure you have published it to the web.",
+ empty_feed_err: "No data entries found",
+ missing_start_date_err: "Missing start_date",
+ invalid_data_format_err: "Header row has been modified.",
+ date_compare_err: "Can't compare TL.Dates on different scales",
+ invalid_scale_err: "Invalid scale",
+ invalid_date_err: "Invalid date: month, day and year must be numbers.",
+ invalid_separator_error: "Invalid time: misuse of : or . as separator.",
+ invalid_hour_err: "Invalid time (hour)",
+ invalid_minute_err: "Invalid time (minute)",
+ invalid_second_err: "Invalid time (second)",
+ invalid_fractional_err: "Invalid time (fractional seconds)",
+ invalid_second_fractional_err: "Invalid time (seconds and fractional seconds)",
+ invalid_year_err: "Invalid year",
+ flickr_notfound_err: "Photo not found or private",
+ flickr_invalidurl_err: "Invalid Flickr URL",
+ imgur_invalidurl_err: "Invalid Imgur URL",
+ twitter_invalidurl_err: "Invalid Twitter URL",
+ twitter_load_err: "Unable to load Tweet",
+ twitterembed_invalidurl_err: "Invalid Twitter Embed url",
+ wikipedia_load_err: "Unable to load Wikipedia entry",
+ youtube_invalidurl_err: "Invalid YouTube URL",
+ spotify_invalid_url: "Invalid Spotify URL",
+ template_value_err: "No value provided for variable",
+ invalid_rgb_err: "Invalid RGB argument",
+ time_scale_scale_err: "Don't know how to get date from time for scale",
+ axis_helper_no_options_err: "Axis helper must be configured with options",
+ axis_helper_scale_err: "No AxisHelper available for scale",
+ invalid_integer_option: "Invalid option value—must be a whole number."
+ },
+ date: {
+ month: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+ month_abbr: ["Jan.", "Feb.", "March", "April", "May", "June", "July", "Aug.", "Sept.", "Oct.", "Nov.", "Dec."],
+ day: ["Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+ day_abbr: ["Sun.","Mon.", "Tues.", "Wed.", "Thurs.", "Fri.", "Sat."]
+ },
+ era_labels: { // specify prefix or suffix to apply to formatted date. Blanks mean no change.
+ positive_year: {
+ prefix: '',
+ suffix: ''
+ },
+ negative_year: { // if either of these is specified, the year will be converted to positive before they are applied
+ prefix: '',
+ suffix: 'BCE'
+ }
+ },
+ period_labels: { // use of t/tt/T/TT legacy of original Timeline date format
+ t: ['a', 'p'],
+ tt: ['am', 'pm'],
+ T: ['A', 'P'],
+ TT: ['AM', 'PM']
+ },
+ dateformats: {
+ year: "yyyy",
+ month_short: "mmm",
+ month: "mmmm yyyy",
+ full_short: "mmm d",
+ full: "mmmm d',' yyyy",
+ time: "h:MM:ss TT' <small>'mmmm d',' yyyy'</small>'",
+ time_short: "h:MM:ss TT",
+ time_no_seconds_short: "h:MM TT",
+ time_no_minutes_short: "h TT",
+ time_no_seconds_small_date: "h:MM TT' <small>'mmmm d',' yyyy'</small>'",
+ time_milliseconds: "l",
+ full_long: "mmm d',' yyyy 'at' h:MM TT",
+ full_long_small_date: "h:MM TT' <small>mmm d',' yyyy'</small>'"
+ },
+ bigdateformats: {
+ fallback: [ // a list of tuples, with t[0] an order of magnitude and t[1] a format string. format string syntax may change...
+ [1000000000,"%.2f billion years ago"],
+ [1000000,"%.1f million years ago"],
+ [1000,"%.1f thousand years ago"],
+ [1, "%f years ago"]
+ ],
+ compact: [
+ [1000000000,"%.2f bya"],
+ [1000000,"%.1f mya"],
+ [1000,"%.1f kya"],
+ [1, "%f years ago"]
+ ],
+ verbose: [
+ [1000000000,"%.2f billion years ago"],
+ [1000000,"%.1f million years ago"],
+ [1000,"%.1f thousand years ago"],
+ [1, "%f years ago"]
+ ]
+ }
+ }
+}
+
+TL.Language.fallback = new TL.Language();
+
+
+/* **********************************************
+ Begin TL.I18NMixins.js
+********************************************** */
+
+/* TL.I18NMixins
+ assumes that its class has an options object with a TL.Language instance
+================================================== */
+TL.I18NMixins = {
+ getLanguage: function() {
+ if (this.options && this.options.language) {
+ return this.options.language;
+ }
+ trace("Expected a language option");
+ return TL.Language.fallback;
+ },
+
+ _: function(msg) {
+ return this.getLanguage()._(msg);
+ }
+}
+
+
+/* **********************************************
+ Begin TL.Ease.js
+********************************************** */
+
+/* The equations defined here are open source under BSD License.
+ * http://www.robertpenner.com/easing_terms_of_use.html (c) 2003 Robert Penner
+ * Adapted to single time-based by
+ * Brian Crescimanno <brian.crescimanno@gmail.com>
+ * Ken Snyder <kendsnyder@gmail.com>
+ */
+
+/** MIT License
+ *
+ * KeySpline - use bezier curve for transition easing function
+ * Copyright (c) 2012 Gaetan Renaudeau <renaudeau.gaetan@gmail.com>
+ *
+ * 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.
+ */
+/**
+ * KeySpline - use bezier curve for transition easing function
+ * is inspired from Firefox's nsSMILKeySpline.cpp
+ * Usage:
+ * var spline = new KeySpline(0.25, 0.1, 0.25, 1.0)
+ * spline.get(x) => returns the easing value | x must be in [0, 1] range
+ */
+
+TL.Easings = {
+ ease: [0.25, 0.1, 0.25, 1.0],
+ linear: [0.00, 0.0, 1.00, 1.0],
+ easein: [0.42, 0.0, 1.00, 1.0],
+ easeout: [0.00, 0.0, 0.58, 1.0],
+ easeinout: [0.42, 0.0, 0.58, 1.0]
+};
+
+TL.Ease = {
+ KeySpline: function(a) {
+ //KeySpline: function(mX1, mY1, mX2, mY2) {
+ this.get = function(aX) {
+ if (a[0] == a[1] && a[2] == a[3]) return aX; // linear
+ return CalcBezier(GetTForX(aX), a[1], a[3]);
+ }
+
+ function A(aA1, aA2) {
+ return 1.0 - 3.0 * aA2 + 3.0 * aA1;
+ }
+
+ function B(aA1, aA2) {
+ return 3.0 * aA2 - 6.0 * aA1;
+ }
+
+ function C(aA1) {
+ return 3.0 * aA1;
+ }
+
+ // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.
+
+ function CalcBezier(aT, aA1, aA2) {
+ return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;
+ }
+
+ // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.
+
+ function GetSlope(aT, aA1, aA2) {
+ return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1);
+ }
+
+ function GetTForX(aX) {
+ // Newton raphson iteration
+ var aGuessT = aX;
+ for (var i = 0; i < 4; ++i) {
+ var currentSlope = GetSlope(aGuessT, a[0], a[2]);
+ if (currentSlope == 0.0) return aGuessT;
+ var currentX = CalcBezier(aGuessT, a[0], a[2]) - aX;
+ aGuessT -= currentX / currentSlope;
+ }
+ return aGuessT;
+ }
+ },
+
+ easeInSpline: function(t) {
+ var spline = new TL.Ease.KeySpline(TL.Easings.easein);
+ return spline.get(t);
+ },
+
+ easeInOutExpo: function(t) {
+ var spline = new TL.Ease.KeySpline(TL.Easings.easein);
+ return spline.get(t);
+ },
+
+ easeOut: function(t) {
+ return Math.sin(t * Math.PI / 2);
+ },
+ easeOutStrong: function(t) {
+ return (t == 1) ? 1 : 1 - Math.pow(2, - 10 * t);
+ },
+ easeIn: function(t) {
+ return t * t;
+ },
+ easeInStrong: function(t) {
+ return (t == 0) ? 0 : Math.pow(2, 10 * (t - 1));
+ },
+ easeOutBounce: function(pos) {
+ if ((pos) < (1 / 2.75)) {
+ return (7.5625 * pos * pos);
+ } else if (pos < (2 / 2.75)) {
+ return (7.5625 * (pos -= (1.5 / 2.75)) * pos + .75);
+ } else if (pos < (2.5 / 2.75)) {
+ return (7.5625 * (pos -= (2.25 / 2.75)) * pos + .9375);
+ } else {
+ return (7.5625 * (pos -= (2.625 / 2.75)) * pos + .984375);
+ }
+ },
+ easeInBack: function(pos) {
+ var s = 1.70158;
+ return (pos) * pos * ((s + 1) * pos - s);
+ },
+ easeOutBack: function(pos) {
+ var s = 1.70158;
+ return (pos = pos - 1) * pos * ((s + 1) * pos + s) + 1;
+ },
+ bounce: function(t) {
+ if (t < (1 / 2.75)) {
+ return 7.5625 * t * t;
+ }
+ if (t < (2 / 2.75)) {
+ return 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;
+ }
+ if (t < (2.5 / 2.75)) {
+ return 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;
+ }
+ return 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;
+ },
+ bouncePast: function(pos) {
+ if (pos < (1 / 2.75)) {
+ return (7.5625 * pos * pos);
+ } else if (pos < (2 / 2.75)) {
+ return 2 - (7.5625 * (pos -= (1.5 / 2.75)) * pos + .75);
+ } else if (pos < (2.5 / 2.75)) {
+ return 2 - (7.5625 * (pos -= (2.25 / 2.75)) * pos + .9375);
+ } else {
+ return 2 - (7.5625 * (pos -= (2.625 / 2.75)) * pos + .984375);
+ }
+ },
+ swingTo: function(pos) {
+ var s = 1.70158;
+ return (pos -= 1) * pos * ((s + 1) * pos + s) + 1;
+ },
+ swingFrom: function(pos) {
+ var s = 1.70158;
+ return pos * pos * ((s + 1) * pos - s);
+ },
+ elastic: function(pos) {
+ return -1 * Math.pow(4, - 8 * pos) * Math.sin((pos * 6 - 1) * (2 * Math.PI) / 2) + 1;
+ },
+ spring: function(pos) {
+ return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6));
+ },
+ blink: function(pos, blinks) {
+ return Math.round(pos * (blinks || 5)) % 2;
+ },
+ pulse: function(pos, pulses) {
+ return (-Math.cos((pos * ((pulses || 5) - .5) * 2) * Math.PI) / 2) + .5;
+ },
+ wobble: function(pos) {
+ return (-Math.cos(pos * Math.PI * (9 * pos)) / 2) + 0.5;
+ },
+ sinusoidal: function(pos) {
+ return (-Math.cos(pos * Math.PI) / 2) + 0.5;
+ },
+ flicker: function(pos) {
+ var pos = pos + (Math.random() - 0.5) / 5;
+ return easings.sinusoidal(pos < 0 ? 0 : pos > 1 ? 1 : pos);
+ },
+ mirror: function(pos) {
+ if (pos < 0.5) return easings.sinusoidal(pos * 2);
+ else return easings.sinusoidal(1 - (pos - 0.5) * 2);
+ },
+ // accelerating from zero velocity
+ easeInQuad: function (t) { return t*t },
+ // decelerating to zero velocity
+ easeOutQuad: function (t) { return t*(2-t) },
+ // acceleration until halfway, then deceleration
+ easeInOutQuad: function (t) { return t<.5 ? 2*t*t : -1+(4-2*t)*t },
+ // accelerating from zero velocity
+ easeInCubic: function (t) { return t*t*t },
+ // decelerating to zero velocity
+ easeOutCubic: function (t) { return (--t)*t*t+1 },
+ // acceleration until halfway, then deceleration
+ easeInOutCubic: function (t) { return t<.5 ? 4*t*t*t : (t-1)*(2*t-2)*(2*t-2)+1 },
+ // accelerating from zero velocity
+ easeInQuart: function (t) { return t*t*t*t },
+ // decelerating to zero velocity
+ easeOutQuart: function (t) { return 1-(--t)*t*t*t },
+ // acceleration until halfway, then deceleration
+ easeInOutQuart: function (t) { return t<.5 ? 8*t*t*t*t : 1-8*(--t)*t*t*t },
+ // accelerating from zero velocity
+ easeInQuint: function (t) { return t*t*t*t*t },
+ // decelerating to zero velocity
+ easeOutQuint: function (t) { return 1+(--t)*t*t*t*t },
+ // acceleration until halfway, then deceleration
+ easeInOutQuint: function (t) { return t<.5 ? 16*t*t*t*t*t : 1+16*(--t)*t*t*t*t }
+};
+
+/*
+Math.easeInExpo = function (t, b, c, d) {
+ return c * Math.pow( 2, 10 * (t/d - 1) ) + b;
+};
+
+
+
+// exponential easing out - decelerating to zero velocity
+
+
+Math.easeOutExpo = function (t, b, c, d) {
+ return c * ( -Math.pow( 2, -10 * t/d ) + 1 ) + b;
+};
+
+
+
+// exponential easing in/out - accelerating until halfway, then decelerating
+
+
+Math.easeInOutExpo = function (t, b, c, d) {
+ t /= d/2;
+ if (t < 1) return c/2 * Math.pow( 2, 10 * (t - 1) ) + b;
+ t--;
+ return c/2 * ( -Math.pow( 2, -10 * t) + 2 ) + b;
+};
+*/
+
+/* **********************************************
+ Begin TL.Animate.js
+********************************************** */
+
+/* TL.Animate
+ Basic animation
+================================================== */
+
+TL.Animate = function(el, options) {
+ var animation = new tlanimate(el, options),
+ webkit_timeout;
+ /*
+ // POSSIBLE ISSUE WITH WEBKIT FUTURE BUILDS
+ var onWebKitTimeout = function() {
+
+ animation.stop(true);
+ }
+ if (TL.Browser.webkit) {
+ webkit_timeout = setTimeout(function(){onWebKitTimeout()}, options.duration);
+ }
+ */
+ return animation;
+};
+
+
+/* Based on: Morpheus
+ https://github.com/ded/morpheus - (c) Dustin Diaz 2011
+ License MIT
+================================================== */
+window.tlanimate = (function() {
+
+ var doc = document,
+ win = window,
+ perf = win.performance,
+ perfNow = perf && (perf.now || perf.webkitNow || perf.msNow || perf.mozNow),
+ now = perfNow ? function () { return perfNow.call(perf) } : function () { return +new Date() },
+ html = doc.documentElement,
+ fixTs = false, // feature detected below
+ thousand = 1000,
+ rgbOhex = /^rgb\(|#/,
+ relVal = /^([+\-])=([\d\.]+)/,
+ numUnit = /^(?:[\+\-]=?)?\d+(?:\.\d+)?(%|in|cm|mm|em|ex|pt|pc|px)$/,
+ rotate = /rotate\(((?:[+\-]=)?([\-\d\.]+))deg\)/,
+ scale = /scale\(((?:[+\-]=)?([\d\.]+))\)/,
+ skew = /skew\(((?:[+\-]=)?([\-\d\.]+))deg, ?((?:[+\-]=)?([\-\d\.]+))deg\)/,
+ translate = /translate\(((?:[+\-]=)?([\-\d\.]+))px, ?((?:[+\-]=)?([\-\d\.]+))px\)/,
+ // these elements do not require 'px'
+ unitless = { lineHeight: 1, zoom: 1, zIndex: 1, opacity: 1, transform: 1};
+
+ // which property name does this browser use for transform
+ var transform = function () {
+ var styles = doc.createElement('a').style,
+ props = ['webkitTransform', 'MozTransform', 'OTransform', 'msTransform', 'Transform'],
+ i;
+
+ for (i = 0; i < props.length; i++) {
+ if (props[i] in styles) return props[i]
+ };
+ }();
+
+ // does this browser support the opacity property?
+ var opacity = function () {
+ return typeof doc.createElement('a').style.opacity !== 'undefined'
+ }();
+
+ // initial style is determined by the elements themselves
+ var getStyle = doc.defaultView && doc.defaultView.getComputedStyle ?
+ function (el, property) {
+ property = property == 'transform' ? transform : property
+ property = camelize(property)
+ var value = null,
+ computed = doc.defaultView.getComputedStyle(el, '');
+
+ computed && (value = computed[property]);
+ return el.style[property] || value;
+ } : html.currentStyle ?
+
+ function (el, property) {
+ property = camelize(property)
+
+ if (property == 'opacity') {
+ var val = 100
+ try {
+ val = el.filters['DXImageTransform.Microsoft.Alpha'].opacity
+ } catch (e1) {
+ try {
+ val = el.filters('alpha').opacity
+ } catch (e2) {
+
+ }
+ }
+ return val / 100
+ }
+ var value = el.currentStyle ? el.currentStyle[property] : null
+ return el.style[property] || value
+ } :
+
+ function (el, property) {
+ return el.style[camelize(property)]
+ }
+
+ var frame = function () {
+ // native animation frames
+ // http://webstuff.nfshost.com/anim-timing/Overview.html
+ // http://dev.chromium.org/developers/design-documents/requestanimationframe-implementation
+ return win.requestAnimationFrame ||
+ win.webkitRequestAnimationFrame ||
+ win.mozRequestAnimationFrame ||
+ win.msRequestAnimationFrame ||
+ win.oRequestAnimationFrame ||
+ function (callback) {
+ win.setTimeout(function () {
+ callback(+new Date())
+ }, 17) // when I was 17..
+ }
+ }()
+
+ var children = []
+
+ frame(function(timestamp) {
+ // feature-detect if rAF and now() are of the same scale (epoch or high-res),
+ // if not, we have to do a timestamp fix on each frame
+ fixTs = timestamp > 1e12 != now() > 1e12
+ })
+
+ function has(array, elem, i) {
+ if (Array.prototype.indexOf) return array.indexOf(elem)
+ for (i = 0; i < array.length; ++i) {
+ if (array[i] === elem) return i
+ }
+ }
+
+ function render(timestamp) {
+ var i, count = children.length
+ // if we're using a high res timer, make sure timestamp is not the old epoch-based value.
+ // http://updates.html5rocks.com/2012/05/requestAnimationFrame-API-now-with-sub-millisecond-precision
+ if (perfNow && timestamp > 1e12) timestamp = now()
+ if (fixTs) timestamp = now()
+ for (i = count; i--;) {
+ children[i](timestamp)
+ }
+ children.length && frame(render)
+ }
+
+ function live(f) {
+ if (children.push(f) === 1) frame(render)
+ }
+
+ function die(f) {
+ var rest, index = has(children, f)
+ if (index >= 0) {
+ rest = children.slice(index + 1)
+ children.length = index
+ children = children.concat(rest)
+ }
+ }
+
+ function parseTransform(style, base) {
+ var values = {}, m
+ if (m = style.match(rotate)) values.rotate = by(m[1], base ? base.rotate : null)
+ if (m = style.match(scale)) values.scale = by(m[1], base ? base.scale : null)
+ if (m = style.match(skew)) {values.skewx = by(m[1], base ? base.skewx : null); values.skewy = by(m[3], base ? base.skewy : null)}
+ if (m = style.match(translate)) {values.translatex = by(m[1], base ? base.translatex : null); values.translatey = by(m[3], base ? base.translatey : null)}
+ return values
+ }
+
+ function formatTransform(v) {
+ var s = ''
+ if ('rotate' in v) s += 'rotate(' + v.rotate + 'deg) '
+ if ('scale' in v) s += 'scale(' + v.scale + ') '
+ if ('translatex' in v) s += 'translate(' + v.translatex + 'px,' + v.translatey + 'px) '
+ if ('skewx' in v) s += 'skew(' + v.skewx + 'deg,' + v.skewy + 'deg)'
+ return s
+ }
+
+ function rgb(r, g, b) {
+ return '#' + (1 << 24 | r << 16 | g << 8 | b).toString(16).slice(1)
+ }
+
+ // convert rgb and short hex to long hex
+ function toHex(c) {
+ var m = c.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/)
+ return (m ? rgb(m[1], m[2], m[3]) : c)
+ .replace(/#(\w)(\w)(\w)$/, '#$1$1$2$2$3$3') // short skirt to long jacket
+ }
+
+ // change font-size => fontSize etc.
+ function camelize(s) {
+ return s.replace(/-(.)/g, function (m, m1) {
+ return m1.toUpperCase()
+ })
+ }
+
+ // aren't we having it?
+ function fun(f) {
+ return typeof f == 'function'
+ }
+
+ function nativeTween(t) {
+ // default to a pleasant-to-the-eye easeOut (like native animations)
+ return Math.sin(t * Math.PI / 2)
+ }
+
+ /**
+ * Core tween method that requests each frame
+ * @param duration: time in milliseconds. defaults to 1000
+ * @param fn: tween frame callback function receiving 'position'
+ * @param done {optional}: complete callback function
+ * @param ease {optional}: easing method. defaults to easeOut
+ * @param from {optional}: integer to start from
+ * @param to {optional}: integer to end at
+ * @returns method to stop the animation
+ */
+ function tween(duration, fn, done, ease, from, to) {
+ ease = fun(ease) ? ease : morpheus.easings[ease] || nativeTween
+ var time = duration || thousand
+ , self = this
+ , diff = to - from
+ , start = now()
+ , stop = 0
+ , end = 0
+
+ function run(t) {
+ var delta = t - start
+ if (delta > time || stop) {
+ to = isFinite(to) ? to : 1
+ stop ? end && fn(to) : fn(to)
+ die(run)
+ return done && done.apply(self)
+ }
+ // if you don't specify a 'to' you can use tween as a generic delta tweener
+ // cool, eh?
+ isFinite(to) ?
+ fn((diff * ease(delta / time)) + from) :
+ fn(ease(delta / time))
+ }
+
+ live(run)
+
+ return {
+ stop: function (jump) {
+ stop = 1
+ end = jump // jump to end of animation?
+ if (!jump) done = null // remove callback if not jumping to end
+ }
+ }
+ }
+
+ /**
+ * generic bezier method for animating x|y coordinates
+ * minimum of 2 points required (start and end).
+ * first point start, last point end
+ * additional control points are optional (but why else would you use this anyway ;)
+ * @param points: array containing control points
+ [[0, 0], [100, 200], [200, 100]]
+ * @param pos: current be(tween) position represented as float 0 - 1
+ * @return [x, y]
+ */
+ function bezier(points, pos) {
+ var n = points.length, r = [], i, j
+ for (i = 0; i < n; ++i) {
+ r[i] = [points[i][0], points[i][1]]
+ }
+ for (j = 1; j < n; ++j) {
+ for (i = 0; i < n - j; ++i) {
+ r[i][0] = (1 - pos) * r[i][0] + pos * r[parseInt(i + 1, 10)][0]
+ r[i][1] = (1 - pos) * r[i][1] + pos * r[parseInt(i + 1, 10)][1]
+ }
+ }
+ return [r[0][0], r[0][1]]
+ }
+
+ // this gets you the next hex in line according to a 'position'
+ function nextColor(pos, start, finish) {
+ var r = [], i, e, from, to
+ for (i = 0; i < 6; i++) {
+ from = Math.min(15, parseInt(start.charAt(i), 16))
+ to = Math.min(15, parseInt(finish.charAt(i), 16))
+ e = Math.floor((to - from) * pos + from)
+ e = e > 15 ? 15 : e < 0 ? 0 : e
+ r[i] = e.toString(16)
+ }
+ return '#' + r.join('')
+ }
+
+ // this retreives the frame value within a sequence
+ function getTweenVal(pos, units, begin, end, k, i, v) {
+ if (k == 'transform') {
+ v = {}
+ for (var t in begin[i][k]) {
+ v[t] = (t in end[i][k]) ? Math.round(((end[i][k][t] - begin[i][k][t]) * pos + begin[i][k][t]) * thousand) / thousand : begin[i][k][t]
+ }
+ return v
+ } else if (typeof begin[i][k] == 'string') {
+ return nextColor(pos, begin[i][k], end[i][k])
+ } else {
+ // round so we don't get crazy long floats
+ v = Math.round(((end[i][k] - begin[i][k]) * pos + begin[i][k]) * thousand) / thousand
+ // some css properties don't require a unit (like zIndex, lineHeight, opacity)
+ if (!(k in unitless)) v += units[i][k] || 'px'
+ return v
+ }
+ }
+
+ // support for relative movement via '+=n' or '-=n'
+ function by(val, start, m, r, i) {
+ return (m = relVal.exec(val)) ?
+ (i = parseFloat(m[2])) && (start + (m[1] == '+' ? 1 : -1) * i) :
+ parseFloat(val)
+ }
+
+ /**
+ * morpheus:
+ * @param element(s): HTMLElement(s)
+ * @param options: mixed bag between CSS Style properties & animation options
+ * - {n} CSS properties|values
+ * - value can be strings, integers,
+ * - or callback function that receives element to be animated. method must return value to be tweened
+ * - relative animations start with += or -= followed by integer
+ * - duration: time in ms - defaults to 1000(ms)
+ * - easing: a transition method - defaults to an 'easeOut' algorithm
+ * - complete: a callback method for when all elements have finished
+ * - bezier: array of arrays containing x|y coordinates that define the bezier points. defaults to none
+ * - this may also be a function that receives element to be animated. it must return a value
+ */
+ function morpheus(elements, options) {
+ var els = elements ? (els = isFinite(elements.length) ? elements : [elements]) : [], i
+ , complete = options.complete
+ , duration = options.duration
+ , ease = options.easing
+ , points = options.bezier
+ , begin = []
+ , end = []
+ , units = []
+ , bez = []
+ , originalLeft
+ , originalTop
+
+ if (points) {
+ // remember the original values for top|left
+ originalLeft = options.left;
+ originalTop = options.top;
+ delete options.right;
+ delete options.bottom;
+ delete options.left;
+ delete options.top;
+ }
+
+ for (i = els.length; i--;) {
+
+ // record beginning and end states to calculate positions
+ begin[i] = {}
+ end[i] = {}
+ units[i] = {}
+
+ // are we 'moving'?
+ if (points) {
+
+ var left = getStyle(els[i], 'left')
+ , top = getStyle(els[i], 'top')
+ , xy = [by(fun(originalLeft) ? originalLeft(els[i]) : originalLeft || 0, parseFloat(left)),
+ by(fun(originalTop) ? originalTop(els[i]) : originalTop || 0, parseFloat(top))]
+
+ bez[i] = fun(points) ? points(els[i], xy) : points
+ bez[i].push(xy)
+ bez[i].unshift([
+ parseInt(left, 10),
+ parseInt(top, 10)
+ ])
+ }
+
+ for (var k in options) {
+ switch (k) {
+ case 'complete':
+ case 'duration':
+ case 'easing':
+ case 'bezier':
+ continue
+ }
+ var v = getStyle(els[i], k), unit
+ , tmp = fun(options[k]) ? options[k](els[i]) : options[k]
+ if (typeof tmp == 'string' &&
+ rgbOhex.test(tmp) &&
+ !rgbOhex.test(v)) {
+ delete options[k]; // remove key :(
+ continue; // cannot animate colors like 'orange' or 'transparent'
+ // only #xxx, #xxxxxx, rgb(n,n,n)
+ }
+
+ begin[i][k] = k == 'transform' ? parseTransform(v) :
+ typeof tmp == 'string' && rgbOhex.test(tmp) ?
+ toHex(v).slice(1) :
+ parseFloat(v)
+ end[i][k] = k == 'transform' ? parseTransform(tmp, begin[i][k]) :
+ typeof tmp == 'string' && tmp.charAt(0) == '#' ?
+ toHex(tmp).slice(1) :
+ by(tmp, parseFloat(v));
+ // record original unit
+ (typeof tmp == 'string') && (unit = tmp.match(numUnit)) && (units[i][k] = unit[1])
+ }
+ }
+ // ONE TWEEN TO RULE THEM ALL
+ return tween.apply(els, [duration, function (pos, v, xy) {
+ // normally not a fan of optimizing for() loops, but we want something
+ // fast for animating
+ for (i = els.length; i--;) {
+ if (points) {
+ xy = bezier(bez[i], pos)
+ els[i].style.left = xy[0] + 'px'
+ els[i].style.top = xy[1] + 'px'
+ }
+ for (var k in options) {
+ v = getTweenVal(pos, units, begin, end, k, i)
+ k == 'transform' ?
+ els[i].style[transform] = formatTransform(v) :
+ k == 'opacity' && !opacity ?
+ (els[i].style.filter = 'alpha(opacity=' + (v * 100) + ')') :
+ (els[i].style[camelize(k)] = v)
+ }
+ }
+ }, complete, ease])
+ }
+
+ // expose useful methods
+ morpheus.tween = tween
+ morpheus.getStyle = getStyle
+ morpheus.bezier = bezier
+ morpheus.transform = transform
+ morpheus.parseTransform = parseTransform
+ morpheus.formatTransform = formatTransform
+ morpheus.easings = {}
+
+ return morpheus
+})();
+
+
+/* **********************************************
+ Begin TL.Point.js
+********************************************** */
+
+/* TL.Point
+ Inspired by Leaflet
+ TL.Point represents a point with x and y coordinates.
+================================================== */
+
+TL.Point = function (/*Number*/ x, /*Number*/ y, /*Boolean*/ round) {
+ this.x = (round ? Math.round(x) : x);
+ this.y = (round ? Math.round(y) : y);
+};
+
+TL.Point.prototype = {
+ add: function (point) {
+ return this.clone()._add(point);
+ },
+
+ _add: function (point) {
+ this.x += point.x;
+ this.y += point.y;
+ return this;
+ },
+
+ subtract: function (point) {
+ return this.clone()._subtract(point);
+ },
+
+ // destructive subtract (faster)
+ _subtract: function (point) {
+ this.x -= point.x;
+ this.y -= point.y;
+ return this;
+ },
+
+ divideBy: function (num, round) {
+ return new TL.Point(this.x / num, this.y / num, round);
+ },
+
+ multiplyBy: function (num) {
+ return new TL.Point(this.x * num, this.y * num);
+ },
+
+ distanceTo: function (point) {
+ var x = point.x - this.x,
+ y = point.y - this.y;
+ return Math.sqrt(x * x + y * y);
+ },
+
+ round: function () {
+ return this.clone()._round();
+ },
+
+ // destructive round
+ _round: function () {
+ this.x = Math.round(this.x);
+ this.y = Math.round(this.y);
+ return this;
+ },
+
+ clone: function () {
+ return new TL.Point(this.x, this.y);
+ },
+
+ toString: function () {
+ return 'Point(' +
+ TL.Util.formatNum(this.x) + ', ' +
+ TL.Util.formatNum(this.y) + ')';
+ }
+};
+
+/* **********************************************
+ Begin TL.DomMixins.js
+********************************************** */
+
+/* TL.DomMixins
+ DOM methods used regularly
+ Assumes there is a _el.container and animator
+================================================== */
+TL.DomMixins = {
+
+ /* Adding, Hiding, Showing etc
+ ================================================== */
+ show: function(animate) {
+ if (animate) {
+ /*
+ this.animator = TL.Animate(this._el.container, {
+ left: -(this._el.container.offsetWidth * n) + "px",
+ duration: this.options.duration,
+ easing: this.options.ease
+ });
+ */
+ } else {
+ this._el.container.style.display = "block";
+ }
+ },
+
+ hide: function(animate) {
+ this._el.container.style.display = "none";
+ },
+
+ addTo: function(container) {
+ container.appendChild(this._el.container);
+ this.onAdd();
+ },
+
+ removeFrom: function(container) {
+ container.removeChild(this._el.container);
+ this.onRemove();
+ },
+
+ /* Animate to Position
+ ================================================== */
+ animatePosition: function(pos, el) {
+ var ani = {
+ duration: this.options.duration,
+ easing: this.options.ease
+ };
+ for (var name in pos) {
+ if (pos.hasOwnProperty(name)) {
+ ani[name] = pos[name] + "px";
+ }
+ }
+
+ if (this.animator) {
+ this.animator.stop();
+ }
+ this.animator = TL.Animate(el, ani);
+ },
+
+ /* Events
+ ================================================== */
+
+ onLoaded: function() {
+ this.fire("loaded", this.data);
+ },
+
+ onAdd: function() {
+ this.fire("added", this.data);
+ },
+
+ onRemove: function() {
+ this.fire("removed", this.data);
+ },
+
+ /* Set the Position
+ ================================================== */
+ setPosition: function(pos, el) {
+ for (var name in pos) {
+ if (pos.hasOwnProperty(name)) {
+ if (el) {
+ el.style[name] = pos[name] + "px";
+ } else {
+ this._el.container.style[name] = pos[name] + "px";
+ };
+ }
+ }
+ },
+
+ getPosition: function() {
+ return TL.Dom.getPosition(this._el.container);
+ }
+
+};
+
+
+/* **********************************************
+ Begin TL.Dom.js
+********************************************** */
+
+/* TL.Dom
+ Utilities for working with the DOM
+================================================== */
+
+TL.Dom = {
+
+ get: function(id) {
+ return (typeof id === 'string' ? document.getElementById(id) : id);
+ },
+
+ getByClass: function(id) {
+ if (id) {
+ return document.getElementsByClassName(id);
+ }
+ },
+
+ create: function(tagName, className, container) {
+ var el = document.createElement(tagName);
+ el.className = className;
+ if (container) {
+ container.appendChild(el);
+ }
+ return el;
+ },
+
+ createText: function(content, container) {
+ var el = document.createTextNode(content);
+ if (container) {
+ container.appendChild(el);
+ }
+ return el;
+ },
+
+ getTranslateString: function (point) {
+ return TL.Dom.TRANSLATE_OPEN +
+ point.x + 'px,' + point.y + 'px' +
+ TL.Dom.TRANSLATE_CLOSE;
+ },
+
+ setPosition: function (el, point) {
+ el._tl_pos = point;
+ if (TL.Browser.webkit3d) {
+ el.style[TL.Dom.TRANSFORM] = TL.Dom.getTranslateString(point);
+
+ if (TL.Browser.android) {
+ el.style['-webkit-perspective'] = '1000';
+ el.style['-webkit-backface-visibility'] = 'hidden';
+ }
+ } else {
+ el.style.left = point.x + 'px';
+ el.style.top = point.y + 'px';
+ }
+ },
+
+ getPosition: function(el){
+ var pos = {
+ x: 0,
+ y: 0
+ }
+ while( el && !isNaN( el.offsetLeft ) && !isNaN( el.offsetTop ) ) {
+ pos.x += el.offsetLeft// - el.scrollLeft;
+ pos.y += el.offsetTop// - el.scrollTop;
+ el = el.offsetParent;
+ }
+ return pos;
+ },
+
+ testProp: function(props) {
+ var style = document.documentElement.style;
+
+ for (var i = 0; i < props.length; i++) {
+ if (props[i] in style) {
+ return props[i];
+ }
+ }
+ return false;
+ }
+
+};
+
+TL.Util.mergeData(TL.Dom, {
+ TRANSITION: TL.Dom.testProp(['transition', 'webkitTransition', 'OTransition', 'MozTransition', 'msTransition']),
+ TRANSFORM: TL.Dom.testProp(['transformProperty', 'WebkitTransform', 'OTransform', 'MozTransform', 'msTransform']),
+
+ TRANSLATE_OPEN: 'translate' + (TL.Browser.webkit3d ? '3d(' : '('),
+ TRANSLATE_CLOSE: TL.Browser.webkit3d ? ',0)' : ')'
+});
+
+
+/* **********************************************
+ Begin TL.DomUtil.js
+********************************************** */
+
+/* TL.DomUtil
+ Inspired by Leaflet
+ TL.DomUtil contains various utility functions for working with DOM
+================================================== */
+
+
+TL.DomUtil = {
+ get: function (id) {
+ return (typeof id === 'string' ? document.getElementById(id) : id);
+ },
+
+ getStyle: function (el, style) {
+ var value = el.style[style];
+ if (!value && el.currentStyle) {
+ value = el.currentStyle[style];
+ }
+ if (!value || value === 'auto') {
+ var css = document.defaultView.getComputedStyle(el, null);
+ value = css ? css[style] : null;
+ }
+ return (value === 'auto' ? null : value);
+ },
+
+ getViewportOffset: function (element) {
+ var top = 0,
+ left = 0,
+ el = element,
+ docBody = document.body;
+
+ do {
+ top += el.offsetTop || 0;
+ left += el.offsetLeft || 0;
+
+ if (el.offsetParent === docBody &&
+ TL.DomUtil.getStyle(el, 'position') === 'absolute') {
+ break;
+ }
+ el = el.offsetParent;
+ } while (el);
+
+ el = element;
+
+ do {
+ if (el === docBody) {
+ break;
+ }
+
+ top -= el.scrollTop || 0;
+ left -= el.scrollLeft || 0;
+
+ el = el.parentNode;
+ } while (el);
+
+ return new TL.Point(left, top);
+ },
+
+ create: function (tagName, className, container) {
+ var el = document.createElement(tagName);
+ el.className = className;
+ if (container) {
+ container.appendChild(el);
+ }
+ return el;
+ },
+
+ disableTextSelection: function () {
+ if (document.selection && document.selection.empty) {
+ document.selection.empty();
+ }
+ if (!this._onselectstart) {
+ this._onselectstart = document.onselectstart;
+ document.onselectstart = TL.Util.falseFn;
+ }
+ },
+
+ enableTextSelection: function () {
+ document.onselectstart = this._onselectstart;
+ this._onselectstart = null;
+ },
+
+ hasClass: function (el, name) {
+ return (el.className.length > 0) &&
+ new RegExp("(^|\\s)" + name + "(\\s|$)").test(el.className);
+ },
+
+ addClass: function (el, name) {
+ if (!TL.DomUtil.hasClass(el, name)) {
+ el.className += (el.className ? ' ' : '') + name;
+ }
+ },
+
+ removeClass: function (el, name) {
+ el.className = el.className.replace(/(\S+)\s*/g, function (w, match) {
+ if (match === name) {
+ return '';
+ }
+ return w;
+ }).replace(/^\s+/, '');
+ },
+
+ setOpacity: function (el, value) {
+ if (TL.Browser.ie) {
+ el.style.filter = 'alpha(opacity=' + Math.round(value * 100) + ')';
+ } else {
+ el.style.opacity = value;
+ }
+ },
+
+
+ testProp: function (props) {
+ var style = document.documentElement.style;
+
+ for (var i = 0; i < props.length; i++) {
+ if (props[i] in style) {
+ return props[i];
+ }
+ }
+ return false;
+ },
+
+ getTranslateString: function (point) {
+
+ return TL.DomUtil.TRANSLATE_OPEN +
+ point.x + 'px,' + point.y + 'px' +
+ TL.DomUtil.TRANSLATE_CLOSE;
+ },
+
+ getScaleString: function (scale, origin) {
+ var preTranslateStr = TL.DomUtil.getTranslateString(origin),
+ scaleStr = ' scale(' + scale + ') ',
+ postTranslateStr = TL.DomUtil.getTranslateString(origin.multiplyBy(-1));
+
+ return preTranslateStr + scaleStr + postTranslateStr;
+ },
+
+ setPosition: function (el, point) {
+ el._tl_pos = point;
+ if (TL.Browser.webkit3d) {
+ el.style[TL.DomUtil.TRANSFORM] = TL.DomUtil.getTranslateString(point);
+
+ if (TL.Browser.android) {
+ el.style['-webkit-perspective'] = '1000';
+ el.style['-webkit-backface-visibility'] = 'hidden';
+ }
+ } else {
+ el.style.left = point.x + 'px';
+ el.style.top = point.y + 'px';
+ }
+ },
+
+ getPosition: function (el) {
+ return el._tl_pos;
+ }
+};
+
+/* **********************************************
+ Begin TL.DomEvent.js
+********************************************** */
+
+/* TL.DomEvent
+ Inspired by Leaflet
+ DomEvent contains functions for working with DOM events.
+================================================== */
+// TODO stamp
+
+TL.DomEvent = {
+ /* inpired by John Resig, Dean Edwards and YUI addEvent implementations */
+ addListener: function (/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn, /*Object*/ context) {
+ var id = TL.Util.stamp(fn),
+ key = '_tl_' + type + id;
+
+ if (obj[key]) {
+ return;
+ }
+
+ var handler = function (e) {
+ return fn.call(context || obj, e || TL.DomEvent._getEvent());
+ };
+
+ if (TL.Browser.touch && (type === 'dblclick') && this.addDoubleTapListener) {
+ this.addDoubleTapListener(obj, handler, id);
+ } else if ('addEventListener' in obj) {
+ if (type === 'mousewheel') {
+ obj.addEventListener('DOMMouseScroll', handler, false);
+ obj.addEventListener(type, handler, false);
+ } else if ((type === 'mouseenter') || (type === 'mouseleave')) {
+ var originalHandler = handler,
+ newType = (type === 'mouseenter' ? 'mouseover' : 'mouseout');
+ handler = function (e) {
+ if (!TL.DomEvent._checkMouse(obj, e)) {
+ return;
+ }
+ return originalHandler(e);
+ };
+ obj.addEventListener(newType, handler, false);
+ } else {
+ obj.addEventListener(type, handler, false);
+ }
+ } else if ('attachEvent' in obj) {
+ obj.attachEvent("on" + type, handler);
+ }
+
+ obj[key] = handler;
+ },
+
+ removeListener: function (/*HTMLElement*/ obj, /*String*/ type, /*Function*/ fn) {
+ var id = TL.Util.stamp(fn),
+ key = '_tl_' + type + id,
+ handler = obj[key];
+
+ if (!handler) {
+ return;
+ }
+
+ if (TL.Browser.touch && (type === 'dblclick') && this.removeDoubleTapListener) {
+ this.removeDoubleTapListener(obj, id);
+ } else if ('removeEventListener' in obj) {
+ if (type === 'mousewheel') {
+ obj.removeEventListener('DOMMouseScroll', handler, false);
+ obj.removeEventListener(type, handler, false);
+ } else if ((type === 'mouseenter') || (type === 'mouseleave')) {
+ obj.removeEventListener((type === 'mouseenter' ? 'mouseover' : 'mouseout'), handler, false);
+ } else {
+ obj.removeEventListener(type, handler, false);
+ }
+ } else if ('detachEvent' in obj) {
+ obj.detachEvent("on" + type, handler);
+ }
+ obj[key] = null;
+ },
+
+ _checkMouse: function (el, e) {
+ var related = e.relatedTarget;
+
+ if (!related) {
+ return true;
+ }
+
+ try {
+ while (related && (related !== el)) {
+ related = related.parentNode;
+ }
+ } catch (err) {
+ return false;
+ }
+
+ return (related !== el);
+ },
+
+ /*jshint noarg:false */ // evil magic for IE
+ _getEvent: function () {
+ var e = window.event;
+ if (!e) {
+ var caller = arguments.callee.caller;
+ while (caller) {
+ e = caller['arguments'][0];
+ if (e && window.Event === e.constructor) {
+ break;
+ }
+ caller = caller.caller;
+ }
+ }
+ return e;
+ },
+ /*jshint noarg:false */
+
+ stopPropagation: function (/*Event*/ e) {
+ if (e.stopPropagation) {
+ e.stopPropagation();
+ } else {
+ e.cancelBubble = true;
+ }
+ },
+
+ // TODO TL.Draggable.START
+ disableClickPropagation: function (/*HTMLElement*/ el) {
+ TL.DomEvent.addListener(el, TL.Draggable.START, TL.DomEvent.stopPropagation);
+ TL.DomEvent.addListener(el, 'click', TL.DomEvent.stopPropagation);
+ TL.DomEvent.addListener(el, 'dblclick', TL.DomEvent.stopPropagation);
+ },
+
+ preventDefault: function (/*Event*/ e) {
+ if (e.preventDefault) {
+ e.preventDefault();
+ } else {
+ e.returnValue = false;
+ }
+ },
+
+ stop: function (e) {
+ TL.DomEvent.preventDefault(e);
+ TL.DomEvent.stopPropagation(e);
+ },
+
+
+ getWheelDelta: function (e) {
+ var delta = 0;
+ if (e.wheelDelta) {
+ delta = e.wheelDelta / 120;
+ }
+ if (e.detail) {
+ delta = -e.detail / 3;
+ }
+ return delta;
+ }
+};
+
+
+
+
+/* **********************************************
+ Begin TL.StyleSheet.js
+********************************************** */
+
+/* TL.StyleSheet
+ Style Sheet Object
+================================================== */
+
+TL.StyleSheet = TL.Class.extend({
+
+ includes: [TL.Events],
+
+ _el: {},
+
+ /* Constructor
+ ================================================== */
+ initialize: function() {
+ // Borrowed from: http://davidwalsh.name/add-rules-stylesheets
+ this.style = document.createElement("style");
+
+ // WebKit hack :(
+ this.style.appendChild(document.createTextNode(""));
+
+ // Add the <style> element to the page
+ document.head.appendChild(this.style);
+
+ this.sheet = this.style.sheet;
+
+ },
+
+ addRule: function(selector, rules, index) {
+ var _index = 0;
+
+ if (index) {
+ _index = index;
+ }
+
+ if("insertRule" in this.sheet) {
+ this.sheet.insertRule(selector + "{" + rules + "}", _index);
+ }
+ else if("addRule" in this.sheet) {
+ this.sheet.addRule(selector, rules, _index);
+ }
+ },
+
+
+ /* Events
+ ================================================== */
+ onLoaded: function(error) {
+ this._state.loaded = true;
+ this.fire("loaded", this.data);
+ }
+
+});
+
+/* **********************************************
+ Begin TL.Date.js
+********************************************** */
+
+/* TL.Date
+ Date object
+ MONTHS are 1-BASED, not 0-BASED (different from Javascript date objects)
+================================================== */
+
+//
+// Class for human dates
+//
+
+TL.Date = TL.Class.extend({
+
+ // @data = ms, JS Date object, or JS dictionary with date properties
+ initialize: function (data, format, format_short) {
+ if (typeof(data) == 'number') {
+ this.data = {
+ format: "yyyy mmmm",
+ date_obj: new Date(data)
+ };
+ } else if(Date == data.constructor) {
+ this.data = {
+ format: "yyyy mmmm",
+ date_obj: data
+ };
+ } else {
+ this.data = JSON.parse(JSON.stringify(data)); // clone don't use by reference.
+ this._createDateObj();
+ }
+
+ this._setFormat(format, format_short);
+ },
+
+ setDateFormat: function(format) {
+ this.data.format = format;
+ },
+
+ getDisplayDate: function(language, format) {
+ if (this.data.display_date) {
+ return this.data.display_date;
+ }
+ if (!language) {
+ language = TL.Language.fallback;
+ }
+ if (language.constructor != TL.Language) {
+ trace("First argument to getDisplayDate must be TL.Language");
+ language = TL.Language.fallback;
+ }
+
+ var format_key = format || this.data.format;
+ return language.formatDate(this.data.date_obj, format_key);
+ },
+
+ getMillisecond: function() {
+ return this.getTime();
+ },
+
+ getTime: function() {
+ return this.data.date_obj.getTime();
+ },
+
+ isBefore: function(other_date) {
+ if (!this.data.date_obj.constructor == other_date.data.date_obj.constructor) {
+ throw new TL.Error("date_compare_err") // but should be able to compare 'cosmological scale' dates once we get to that...
+ }
+ if ('isBefore' in this.data.date_obj) {
+ return this.data.date_obj['isBefore'](other_date.data.date_obj);
+ }
+ return this.data.date_obj < other_date.data.date_obj
+ },
+
+ isAfter: function(other_date) {
+ if (!this.data.date_obj.constructor == other_date.data.date_obj.constructor) {
+ throw new TL.Error("date_compare_err") // but should be able to compare 'cosmological scale' dates once we get to that...
+ }
+ if ('isAfter' in this.data.date_obj) {
+ return this.data.date_obj['isAfter'](other_date.data.date_obj);
+ }
+ return this.data.date_obj > other_date.data.date_obj
+ },
+
+ // Return a new TL.Date which has been 'floored' at the given scale.
+ // @scale = string value from TL.Date.SCALES
+ floor: function(scale) {
+ var d = new Date(this.data.date_obj.getTime());
+ for (var i = 0; i < TL.Date.SCALES.length; i++) {
+ // for JS dates, we iteratively apply flooring functions
+ TL.Date.SCALES[i][2](d);
+ if (TL.Date.SCALES[i][0] == scale) return new TL.Date(d);
+ };
+
+ throw new TL.Error("invalid_scale_err", scale);
+ },
+
+ /* Private Methods
+ ================================================== */
+
+ _getDateData: function() {
+ var _date = {
+ year: 0,
+ month: 1, // stupid JS dates
+ day: 1,
+ hour: 0,
+ minute: 0,
+ second: 0,
+ millisecond: 0
+ };
+
+ // Merge data
+ TL.Util.mergeData(_date, this.data);
+
+ // Make strings into numbers
+ var DATE_PARTS = TL.Date.DATE_PARTS;
+
+ for (var ix in DATE_PARTS) {
+ var x = TL.Util.trim(_date[DATE_PARTS[ix]]);
+ if (!x.match(/^-?\d*$/)) {
+ throw new TL.Error("invalid_date_err", DATE_PARTS[ix] + " = '" + _date[DATE_PARTS[ix]] + "'");
+ }
+
+ var parsed = parseInt(_date[DATE_PARTS[ix]]);
+ if (isNaN(parsed)) {
+ parsed = (ix == 4 || ix == 5) ? 1 : 0; // month and day have diff baselines
+ }
+ _date[DATE_PARTS[ix]] = parsed;
+ }
+
+ if (_date.month > 0 && _date.month <= 12) { // adjust for JS's weirdness
+ _date.month = _date.month - 1;
+ }
+
+ return _date;
+ },
+
+ _createDateObj: function() {
+ var _date = this._getDateData();
+ this.data.date_obj = new Date(_date.year, _date.month, _date.day, _date.hour, _date.minute, _date.second, _date.millisecond);
+ if (this.data.date_obj.getFullYear() != _date.year) {
+ // Javascript has stupid defaults for two-digit years
+ this.data.date_obj.setFullYear(_date.year);
+ }
+ },
+
+ /* Find Best Format
+ * this may not work with 'cosmologic' dates, or with TL.Date if we
+ * support constructing them based on JS Date and time
+ ================================================== */
+ findBestFormat: function(variant) {
+ var eval_array = TL.Date.DATE_PARTS,
+ format = "";
+
+ for (var i = 0; i < eval_array.length; i++) {
+ if ( this.data[eval_array[i]]) {
+ if (variant) {
+ if (!(variant in TL.Date.BEST_DATEFORMATS)) {
+ variant = 'short'; // legacy
+ }
+ } else {
+ variant = 'base'
+ }
+ return TL.Date.BEST_DATEFORMATS[variant][eval_array[i]];
+ }
+ };
+ return "";
+ },
+ _setFormat: function(format, format_short) {
+ if (format) {
+ this.data.format = format;
+ } else if (!this.data.format) {
+ this.data.format = this.findBestFormat();
+ }
+
+ if (format_short) {
+ this.data.format_short = format_short;
+ } else if (!this.data.format_short) {
+ this.data.format_short = this.findBestFormat(true);
+ }
+ }
+});
+
+// offer something that can figure out the right date class to return
+TL.Date.makeDate = function(data) {
+ var date = new TL.Date(data);
+ if (!isNaN(date.getTime())) {
+ return date;
+ }
+ return new TL.BigDate(data);
+}
+
+TL.BigYear = TL.Class.extend({
+ initialize: function (year) {
+ this.year = parseInt(year);
+ if (isNaN(this.year)) {
+ throw new TL.Error('invalid_year_err', year);
+ }
+ },
+
+ isBefore: function(that) {
+ return this.year < that.year;
+ },
+
+ isAfter: function(that) {
+ return this.year > that.year;
+ },
+
+ getTime: function() {
+ return this.year;
+ }
+});
+
+(function(cls){
+ // human scales
+ cls.SCALES = [ // ( name, units_per_tick, flooring function )
+ ['millisecond',1, function(d) { }],
+ ['second',1000, function(d) { d.setMilliseconds(0);}],
+ ['minute',1000 * 60, function(d) { d.setSeconds(0);}],
+ ['hour',1000 * 60 * 60, function(d) { d.setMinutes(0);}],
+ ['day',1000 * 60 * 60 * 24, function(d) { d.setHours(0);}],
+ ['month',1000 * 60 * 60 * 24 * 30, function(d) { d.setDate(1);}],
+ ['year',1000 * 60 * 60 * 24 * 365, function(d) { d.setMonth(0);}],
+ ['decade',1000 * 60 * 60 * 24 * 365 * 10, function(d) {
+ var real_year = d.getFullYear();
+ d.setFullYear( real_year - (real_year % 10))
+ }],
+ ['century',1000 * 60 * 60 * 24 * 365 * 100, function(d) {
+ var real_year = d.getFullYear();
+ d.setFullYear( real_year - (real_year % 100))
+ }],
+ ['millennium',1000 * 60 * 60 * 24 * 365 * 1000, function(d) {
+ var real_year = d.getFullYear();
+ d.setFullYear( real_year - (real_year % 1000))
+ }]
+ ];
+
+ // Date parts from highest to lowest precision
+ cls.DATE_PARTS = ["millisecond", "second", "minute", "hour", "day", "month", "year"];
+
+ var ISO8601_SHORT_PATTERN = /^([\+-]?\d+?)(-\d{2}?)?(-\d{2}?)?$/;
+ // regex below from
+ // http://www.pelagodesign.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/
+ var ISO8601_PATTERN = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;
+
+ /* For now, rather than extract parts from regexp, lets trust the browser.
+ * Famous last words...
+ * What about UTC vs local time?
+ * see also http://stackoverflow.com/questions/10005374/ecmascript-5-date-parse-results-for-iso-8601-test-cases
+ */
+ cls.parseISODate = function(str) {
+ var d = new Date(str);
+ if (isNaN(d)) {
+ throw new TL.Error("invalid_date_err", str);
+ }
+ return {
+ year: d.getFullYear(),
+ month: d.getMonth() + 1,
+ day: d.getDate(),
+ hour: d.getHours(),
+ minute: d.getMinutes(),
+ second: d.getSeconds(),
+ millisecond: d.getMilliseconds()
+ }
+
+ }
+
+ cls.parseDate = function(str) {
+
+ if (str.match(ISO8601_SHORT_PATTERN)) {
+ // parse short specifically to avoid timezone offset confusion
+ // most browsers assume short is UTC, not local time.
+ var parts = str.match(ISO8601_SHORT_PATTERN).slice(1);
+ var d = { year: parts[0].replace('+','')} // year can be negative
+ if (parts[1]) { d['month'] = parts[1].replace('-',''); }
+ if (parts[2]) { d['day'] = parts[2].replace('-',''); }
+ return d;
+ }
+
+ if (str.match(ISO8601_PATTERN)) {
+ return cls.parseISODate(str);
+ }
+
+ if (str.match(/^\-?\d+$/)) {
+ return { year: str }
+ }
+
+ var parsed = {}
+ if (str.match(/\d+\/\d+\/\d+/)) { // mm/yy/dddd
+ var date = str.match(/\d+\/\d+\/\d+/)[0];
+ str = TL.Util.trim(str.replace(date,''));
+ var date_parts = date.split('/');
+ parsed.month = date_parts[0];
+ parsed.day = date_parts[1];
+ parsed.year = date_parts[2];
+ }
+
+ if (str.match(/\d+\/\d+/)) { // mm/yy
+ var date = str.match(/\d+\/\d+/)[0];
+ str = TL.Util.trim(str.replace(date,''));
+ var date_parts = date.split('/');
+ parsed.month = date_parts[0];
+ parsed.year = date_parts[1];
+ }
+ // todo: handle hours, minutes, seconds, millis other date formats, etc...
+ if (str.match(':')) {
+ var time_parts = str.split(':');
+ parsed.hour = time_parts[0];
+ parsed.minute = time_parts[1];
+ if (time_parts[2]) {
+ second_parts = time_parts[2].split('.');
+ parsed.second = second_parts[0];
+ parsed.millisecond = second_parts[1];
+ }
+ }
+ return parsed;
+ }
+
+ cls.BEST_DATEFORMATS = {
+ base: {
+ millisecond: 'time_short',
+ second: 'time',
+ minute: 'time_no_seconds_small_date',
+ hour: 'time_no_seconds_small_date',
+ day: 'full',
+ month: 'month',
+ year: 'year',
+ decade: 'year',
+ century: 'year',
+ millennium: 'year',
+ age: 'fallback',
+ epoch: 'fallback',
+ era: 'fallback',
+ eon: 'fallback',
+ eon2: 'fallback'
+ },
+
+ short: {
+ millisecond: 'time_short',
+ second: 'time_short',
+ minute: 'time_no_seconds_short',
+ hour: 'time_no_minutes_short',
+ day: 'full_short',
+ month: 'month_short',
+ year: 'year',
+ decade: 'year',
+ century: 'year',
+ millennium: 'year',
+ age: 'fallback',
+ epoch: 'fallback',
+ era: 'fallback',
+ eon: 'fallback',
+ eon2: 'fallback'
+ }
+ }
+
+
+})(TL.Date)
+
+
+//
+// Class for cosmological dates
+//
+TL.BigDate = TL.Date.extend({
+
+ // @data = TL.BigYear object or JS dictionary with date properties
+ initialize: function(data, format, format_short) {
+ if (TL.BigYear == data.constructor) {
+ this.data = {
+ date_obj: data
+ }
+ } else {
+ this.data = JSON.parse(JSON.stringify(data));
+ this._createDateObj();
+ }
+
+ this._setFormat(format, format_short);
+ },
+
+ // Create date_obj
+ _createDateObj: function() {
+ var _date = this._getDateData();
+ this.data.date_obj = new TL.BigYear(_date.year);
+ },
+
+ // Return a new TL.BigDate which has been 'floored' at the given scale.
+ // @scale = string value from TL.BigDate.SCALES
+ floor: function(scale) {
+ for (var i = 0; i < TL.BigDate.SCALES.length; i++) {
+ if (TL.BigDate.SCALES[i][0] == scale) {
+ var floored = TL.BigDate.SCALES[i][2](this.data.date_obj);
+ return new TL.BigDate(floored);
+ }
+ };
+
+ throw new TL.Error("invalid_scale_err", scale);
+ }
+});
+
+(function(cls){
+ // cosmo units are years, not millis
+ var AGE = 1000000;
+ var EPOCH = AGE * 10;
+ var ERA = EPOCH * 10;
+ var EON = ERA * 10;
+
+ var Floorer = function(unit) {
+ return function(a_big_year) {
+ var year = a_big_year.getTime();
+ return new TL.BigYear(Math.floor(year/unit) * unit);
+ }
+ }
+
+ // cosmological scales
+ cls.SCALES = [ // ( name, units_per_tick, flooring function )
+ ['year',1, new Floorer(1)],
+ ['decade',10, new Floorer(10)],
+ ['century',100, new Floorer(100)],
+ ['millennium',1000, new Floorer(1000)],
+ ['age',AGE, new Floorer(AGE)], // 1M years
+ ['epoch',EPOCH, new Floorer(EPOCH)], // 10M years
+ ['era',ERA, new Floorer(ERA)], // 100M years
+ ['eon',EON, new Floorer(EON)] // 1B years
+ ];
+
+})(TL.BigDate)
+
+
+/* **********************************************
+ Begin TL.DateUtil.js
+********************************************** */
+
+/* TL.DateUtil
+ Utilities for parsing time
+================================================== */
+
+
+TL.DateUtil = {
+ get: function (id) {
+ return (typeof id === 'string' ? document.getElementById(id) : id);
+ },
+
+ sortByDate: function(array,prop_name) { // only for use with slide data objects
+ var prop_name = prop_name || 'start_date';
+ array.sort(function(a,b){
+ if (a[prop_name].isBefore(b[prop_name])) return -1;
+ if (a[prop_name].isAfter(b[prop_name])) return 1;
+ return 0;
+ });
+ },
+
+ parseTime: function(time_str) {
+ var parsed = {
+ hour: null, minute: null, second: null, millisecond: null // conform to keys in TL.Date
+ }
+ var period = null;
+ var match = time_str.match(/(\s*[AaPp]\.?[Mm]\.?\s*)$/);
+ if (match) {
+ period = TL.Util.trim(match[0]);
+ time_str = TL.Util.trim(time_str.substring(0,time_str.lastIndexOf(period)));
+ }
+
+ var parts = [];
+ var no_separators = time_str.match(/^\s*(\d{1,2})(\d{2})\s*$/);
+ if (no_separators) {
+ parts = no_separators.slice(1);
+ } else {
+ parts = time_str.split(':');
+ if (parts.length == 1) {
+ parts = time_str.split('.');
+ }
+ }
+
+ if (parts.length > 4) {
+ throw new TL.Error("invalid_separator_error");
+ }
+
+ parsed.hour = parseInt(parts[0]);
+
+ if (period && period.toLowerCase()[0] == 'p' && parsed.hour != 12) {
+ parsed.hour += 12;
+ } else if (period && period.toLowerCase()[0] == 'a' && parsed.hour == 12) {
+ parsed.hour = 0;
+ }
+
+
+ if (isNaN(parsed.hour) || parsed.hour < 0 || parsed.hour > 23) {
+ throw new TL.Error("invalid_hour_err", parsed.hour);
+ }
+
+ if (parts.length > 1) {
+ parsed.minute = parseInt(parts[1]);
+ if (isNaN(parsed.minute)) {
+ throw new TL.Error("invalid_minute_err", parsed.minute);
+ }
+ }
+
+ if (parts.length > 2) {
+ var sec_parts = parts[2].split(/[\.,]/);
+ parts = sec_parts.concat(parts.slice(3)) // deal with various methods of specifying fractional seconds
+ if (parts.length > 2) {
+ throw new TL.Error("invalid_second_fractional_err");
+ }
+ parsed.second = parseInt(parts[0]);
+ if (isNaN(parsed.second)) {
+ throw new TL.Error("invalid_second_err");
+ }
+ if (parts.length == 2) {
+ var frac_secs = parseInt(parts[1]);
+ if (isNaN(frac_secs)) {
+ throw new TL.Error("invalid_fractional_err");
+ }
+ parsed.millisecond = 100 * frac_secs;
+ }
+ }
+
+ return parsed;
+ },
+
+ SCALE_DATE_CLASSES: {
+ human: TL.Date,
+ cosmological: TL.BigDate
+ }
+
+
+};
+
+
+/* **********************************************
+ Begin TL.Draggable.js
+********************************************** */
+
+/* TL.Draggable
+ TL.Draggable allows you to add dragging capabilities to any element. Supports mobile devices too.
+ TODO Enable constraints
+================================================== */
+
+TL.Draggable = TL.Class.extend({
+
+ includes: TL.Events,
+
+ _el: {},
+
+ mousedrag: {
+ down: "mousedown",
+ up: "mouseup",
+ leave: "mouseleave",
+ move: "mousemove"
+ },
+
+ touchdrag: {
+ down: "touchstart",
+ up: "touchend",
+ leave: "mouseleave",
+ move: "touchmove"
+ },
+
+ initialize: function (drag_elem, options, move_elem) {
+
+ // DOM ELements
+ this._el = {
+ drag: drag_elem,
+ move: drag_elem
+ };
+
+ if (move_elem) {
+ this._el.move = move_elem;
+ }
+
+
+ //Options
+ this.options = {
+ enable: {
+ x: true,
+ y: true
+ },
+ constraint: {
+ top: false,
+ bottom: false,
+ left: false,
+ right: false
+ },
+ momentum_multiplier: 2000,
+ duration: 1000,
+ ease: TL.Ease.easeInOutQuint
+ };
+
+
+ // Animation Object
+ this.animator = null;
+
+ // Drag Event Type
+ this.dragevent = this.mousedrag;
+
+ if (TL.Browser.touch) {
+ this.dragevent = this.touchdrag;
+ }
+
+ // Draggable Data
+ this.data = {
+ sliding: false,
+ direction: "none",
+ pagex: {
+ start: 0,
+ end: 0
+ },
+ pagey: {
+ start: 0,
+ end: 0
+ },
+ pos: {
+ start: {
+ x: 0,
+ y:0
+ },
+ end: {
+ x: 0,
+ y:0
+ }
+ },
+ new_pos: {
+ x: 0,
+ y: 0
+ },
+ new_pos_parent: {
+ x: 0,
+ y: 0
+ },
+ time: {
+ start: 0,
+ end: 0
+ },
+ touch: false
+ };
+
+ // Merge Data and Options
+ TL.Util.mergeData(this.options, options);
+
+
+ },
+
+ enable: function(e) {
+
+ this.data.pos.start = 0;
+ this._el.move.style.left = this.data.pos.start.x + "px";
+ this._el.move.style.top = this.data.pos.start.y + "px";
+ this._el.move.style.position = "absolute";
+ },
+
+ disable: function() {
+ TL.DomEvent.removeListener(this._el.drag, this.dragevent.down, this._onDragStart, this);
+ TL.DomEvent.removeListener(this._el.drag, this.dragevent.up, this._onDragEnd, this);
+ },
+
+ stopMomentum: function() {
+ if (this.animator) {
+ this.animator.stop();
+ }
+
+ },
+
+ updateConstraint: function(c) {
+ this.options.constraint = c;
+
+ },
+
+ /* Private Methods
+ ================================================== */
+ _onDragStart: function(e) {
+ if (TL.Browser.touch) {
+ if (e.originalEvent) {
+ this.data.pagex.start = e.originalEvent.touches[0].screenX;
+ this.data.pagey.start = e.originalEvent.touches[0].screenY;
+ } else {
+ this.data.pagex.start = e.targetTouches[0].screenX;
+ this.data.pagey.start = e.targetTouches[0].screenY;
+ }
+ } else {
+ this.data.pagex.start = e.pageX;
+ this.data.pagey.start = e.pageY;
+ }
+
+ // Center element to finger or mouse
+ if (this.options.enable.x) {
+ this._el.move.style.left = this.data.pagex.start - (this._el.move.offsetWidth / 2) + "px";
+ }
+
+ if (this.options.enable.y) {
+ this._el.move.style.top = this.data.pagey.start - (this._el.move.offsetHeight / 2) + "px";
+ }
+
+ this.data.pos.start = TL.Dom.getPosition(this._el.drag);
+ this.data.time.start = new Date().getTime();
+
+ this.fire("dragstart", this.data);
+ TL.DomEvent.addListener(this._el.drag, this.dragevent.move, this._onDragMove, this);
+ TL.DomEvent.addListener(this._el.drag, this.dragevent.leave, this._onDragEnd, this);
+ },
+
+ _onDragEnd: function(e) {
+ this.data.sliding = false;
+ TL.DomEvent.removeListener(this._el.drag, this.dragevent.move, this._onDragMove, this);
+ TL.DomEvent.removeListener(this._el.drag, this.dragevent.leave, this._onDragEnd, this);
+ this.fire("dragend", this.data);
+
+ // momentum
+ this._momentum();
+ },
+
+ _onDragMove: function(e) {
+ e.preventDefault();
+ this.data.sliding = true;
+
+ if (TL.Browser.touch) {
+ if (e.originalEvent) {
+ this.data.pagex.end = e.originalEvent.touches[0].screenX;
+ this.data.pagey.end = e.originalEvent.touches[0].screenY;
+ } else {
+ this.data.pagex.end = e.targetTouches[0].screenX;
+ this.data.pagey.end = e.targetTouches[0].screenY;
+ }
+
+ } else {
+ this.data.pagex.end = e.pageX;
+ this.data.pagey.end = e.pageY;
+ }
+
+ this.data.pos.end = TL.Dom.getPosition(this._el.drag);
+ this.data.new_pos.x = -(this.data.pagex.start - this.data.pagex.end - this.data.pos.start.x);
+ this.data.new_pos.y = -(this.data.pagey.start - this.data.pagey.end - this.data.pos.start.y );
+
+ if (this.options.enable.x) {
+ this._el.move.style.left = this.data.new_pos.x + "px";
+ }
+
+ if (this.options.enable.y) {
+ this._el.move.style.top = this.data.new_pos.y + "px";
+ }
+
+ this.fire("dragmove", this.data);
+ },
+
+ _momentum: function() {
+ var pos_adjust = {
+ x: 0,
+ y: 0,
+ time: 0
+ },
+ pos_change = {
+ x: 0,
+ y: 0,
+ time: 0
+ },
+ swipe = false,
+ swipe_direction = "";
+
+
+ if (TL.Browser.touch) {
+ // Treat mobile multiplier differently
+ //this.options.momentum_multiplier = this.options.momentum_multiplier * 2;
+ }
+
+ pos_adjust.time = (new Date().getTime() - this.data.time.start) * 10;
+ pos_change.time = (new Date().getTime() - this.data.time.start) * 10;
+
+ pos_change.x = this.options.momentum_multiplier * (Math.abs(this.data.pagex.end) - Math.abs(this.data.pagex.start));
+ pos_change.y = this.options.momentum_multiplier * (Math.abs(this.data.pagey.end) - Math.abs(this.data.pagey.start));
+
+ pos_adjust.x = Math.round(pos_change.x / pos_change.time);
+ pos_adjust.y = Math.round(pos_change.y / pos_change.time);
+
+ this.data.new_pos.x = Math.min(this.data.pos.end.x + pos_adjust.x);
+ this.data.new_pos.y = Math.min(this.data.pos.end.y + pos_adjust.y);
+
+
+ if (!this.options.enable.x) {
+ this.data.new_pos.x = this.data.pos.start.x;
+ } else if (this.data.new_pos.x < 0) {
+ this.data.new_pos.x = 0;
+ }
+
+ if (!this.options.enable.y) {
+ this.data.new_pos.y = this.data.pos.start.y;
+ } else if (this.data.new_pos.y < 0) {
+ this.data.new_pos.y = 0;
+ }
+
+ // Detect Swipe
+ if (pos_change.time < 3000) {
+ swipe = true;
+ }
+
+ // Detect Direction
+ if (Math.abs(pos_change.x) > 10000) {
+ this.data.direction = "left";
+ if (pos_change.x > 0) {
+ this.data.direction = "right";
+ }
+ }
+ // Detect Swipe
+ if (Math.abs(pos_change.y) > 10000) {
+ this.data.direction = "up";
+ if (pos_change.y > 0) {
+ this.data.direction = "down";
+ }
+ }
+ this._animateMomentum();
+ if (swipe) {
+ this.fire("swipe_" + this.data.direction, this.data);
+ }
+
+ },
+
+
+ _animateMomentum: function() {
+ var pos = {
+ x: this.data.new_pos.x,
+ y: this.data.new_pos.y
+ },
+ animate = {
+ duration: this.options.duration,
+ easing: TL.Ease.easeOutStrong
+ };
+
+ if (this.options.enable.y) {
+ if (this.options.constraint.top || this.options.constraint.bottom) {
+ if (pos.y > this.options.constraint.bottom) {
+ pos.y = this.options.constraint.bottom;
+ } else if (pos.y < this.options.constraint.top) {
+ pos.y = this.options.constraint.top;
+ }
+ }
+ animate.top = Math.floor(pos.y) + "px";
+ }
+
+ if (this.options.enable.x) {
+ if (this.options.constraint.left || this.options.constraint.right) {
+ if (pos.x > this.options.constraint.left) {
+ pos.x = this.options.constraint.left;
+ } else if (pos.x < this.options.constraint.right) {
+ pos.x = this.options.constraint.right;
+ }
+ }
+ animate.left = Math.floor(pos.x) + "px";
+ }
+
+ this.animator = TL.Animate(this._el.move, animate);
+
+ this.fire("momentum", this.data);
+ }
+});
+
+
+/* **********************************************
+ Begin TL.Swipable.js
+********************************************** */
+
+/* TL.Swipable
+ TL.Draggable allows you to add dragging capabilities to any element. Supports mobile devices too.
+ TODO Enable constraints
+================================================== */
+
+TL.Swipable = TL.Class.extend({
+
+ includes: TL.Events,
+
+ _el: {},
+
+ mousedrag: {
+ down: "mousedown",
+ up: "mouseup",
+ leave: "mouseleave",
+ move: "mousemove"
+ },
+
+ touchdrag: {
+ down: "touchstart",
+ up: "touchend",
+ leave: "mouseleave",
+ move: "touchmove"
+ },
+
+ initialize: function (drag_elem, move_elem, options) {
+
+ // DOM ELements
+ this._el = {
+ drag: drag_elem,
+ move: drag_elem
+ };
+
+ if (move_elem) {
+ this._el.move = move_elem;
+ }
+
+
+ //Options
+ this.options = {
+ snap: false,
+ enable: {
+ x: true,
+ y: true
+ },
+ constraint: {
+ top: false,
+ bottom: false,
+ left: 0,
+ right: false
+ },
+ momentum_multiplier: 2000,
+ duration: 1000,
+ ease: TL.Ease.easeInOutQuint
+ };
+
+
+ // Animation Object
+ this.animator = null;
+
+ // Drag Event Type
+ this.dragevent = this.mousedrag;
+
+ if (TL.Browser.touch) {
+ this.dragevent = this.touchdrag;
+ }
+
+ // Draggable Data
+ this.data = {
+ sliding: false,
+ direction: "none",
+ pagex: {
+ start: 0,
+ end: 0
+ },
+ pagey: {
+ start: 0,
+ end: 0
+ },
+ pos: {
+ start: {
+ x: 0,
+ y:0
+ },
+ end: {
+ x: 0,
+ y:0
+ }
+ },
+ new_pos: {
+ x: 0,
+ y: 0
+ },
+ new_pos_parent: {
+ x: 0,
+ y: 0
+ },
+ time: {
+ start: 0,
+ end: 0
+ },
+ touch: false
+ };
+
+ // Merge Data and Options
+ TL.Util.mergeData(this.options, options);
+
+
+ },
+
+ enable: function(e) {
+ TL.DomEvent.addListener(this._el.drag, this.dragevent.down, this._onDragStart, this);
+ TL.DomEvent.addListener(this._el.drag, this.dragevent.up, this._onDragEnd, this);
+
+ this.data.pos.start = 0; //TL.Dom.getPosition(this._el.move);
+ this._el.move.style.left = this.data.pos.start.x + "px";
+ this._el.move.style.top = this.data.pos.start.y + "px";
+ this._el.move.style.position = "absolute";
+ //this._el.move.style.zIndex = "11";
+ //this._el.move.style.cursor = "move";
+ },
+
+ disable: function() {
+ TL.DomEvent.removeListener(this._el.drag, this.dragevent.down, this._onDragStart, this);
+ TL.DomEvent.removeListener(this._el.drag, this.dragevent.up, this._onDragEnd, this);
+ },
+
+ stopMomentum: function() {
+ if (this.animator) {
+ this.animator.stop();
+ }
+
+ },
+
+ updateConstraint: function(c) {
+ this.options.constraint = c;
+
+ // Temporary until issues are fixed
+
+ },
+
+ /* Private Methods
+ ================================================== */
+ _onDragStart: function(e) {
+
+ if (this.animator) {
+ this.animator.stop();
+ }
+
+ if (TL.Browser.touch) {
+ if (e.originalEvent) {
+ this.data.pagex.start = e.originalEvent.touches[0].screenX;
+ this.data.pagey.start = e.originalEvent.touches[0].screenY;
+ } else {
+ this.data.pagex.start = e.targetTouches[0].screenX;
+ this.data.pagey.start = e.targetTouches[0].screenY;
+ }
+ } else {
+ this.data.pagex.start = e.pageX;
+ this.data.pagey.start = e.pageY;
+ }
+
+ // Center element to finger or mouse
+ if (this.options.enable.x) {
+ //this._el.move.style.left = this.data.pagex.start - (this._el.move.offsetWidth / 2) + "px";
+ }
+
+ if (this.options.enable.y) {
+ //this._el.move.style.top = this.data.pagey.start - (this._el.move.offsetHeight / 2) + "px";
+ }
+
+ this.data.pos.start = {x:this._el.move.offsetLeft, y:this._el.move.offsetTop};
+
+
+ this.data.time.start = new Date().getTime();
+
+ this.fire("dragstart", this.data);
+ TL.DomEvent.addListener(this._el.drag, this.dragevent.move, this._onDragMove, this);
+ TL.DomEvent.addListener(this._el.drag, this.dragevent.leave, this._onDragEnd, this);
+ },
+
+ _onDragEnd: function(e) {
+ this.data.sliding = false;
+ TL.DomEvent.removeListener(this._el.drag, this.dragevent.move, this._onDragMove, this);
+ TL.DomEvent.removeListener(this._el.drag, this.dragevent.leave, this._onDragEnd, this);
+ this.fire("dragend", this.data);
+
+ // momentum
+ this._momentum();
+ },
+
+ _onDragMove: function(e) {
+ var change = {
+ x:0,
+ y:0
+ }
+ //e.preventDefault();
+ this.data.sliding = true;
+
+ if (TL.Browser.touch) {
+ if (e.originalEvent) {
+ this.data.pagex.end = e.originalEvent.touches[0].screenX;
+ this.data.pagey.end = e.originalEvent.touches[0].screenY;
+ } else {
+ this.data.pagex.end = e.targetTouches[0].screenX;
+ this.data.pagey.end = e.targetTouches[0].screenY;
+ }
+
+ } else {
+ this.data.pagex.end = e.pageX;
+ this.data.pagey.end = e.pageY;
+ }
+
+ change.x = this.data.pagex.start - this.data.pagex.end;
+ change.y = this.data.pagey.start - this.data.pagey.end;
+
+ this.data.pos.end = {x:this._el.drag.offsetLeft, y:this._el.drag.offsetTop};
+
+ this.data.new_pos.x = -(change.x - this.data.pos.start.x);
+ this.data.new_pos.y = -(change.y - this.data.pos.start.y );
+
+ if (this.options.enable.x && ( Math.abs(change.x) > Math.abs(change.y) ) ) {
+ e.preventDefault();
+ this._el.move.style.left = this.data.new_pos.x + "px";
+ }
+
+ if (this.options.enable.y && ( Math.abs(change.y) > Math.abs(change.y) ) ) {
+ e.preventDefault();
+ this._el.move.style.top = this.data.new_pos.y + "px";
+ }
+
+ this.fire("dragmove", this.data);
+ },
+
+ _momentum: function() {
+ var pos_adjust = {
+ x: 0,
+ y: 0,
+ time: 0
+ },
+ pos_change = {
+ x: 0,
+ y: 0,
+ time: 0
+ },
+ swipe_detect = {
+ x: false,
+ y: false
+ },
+ swipe = false,
+ swipe_direction = "";
+
+
+ this.data.direction = null;
+
+ pos_adjust.time = (new Date().getTime() - this.data.time.start) * 10;
+ pos_change.time = (new Date().getTime() - this.data.time.start) * 10;
+
+ pos_change.x = this.options.momentum_multiplier * (Math.abs(this.data.pagex.end) - Math.abs(this.data.pagex.start));
+ pos_change.y = this.options.momentum_multiplier * (Math.abs(this.data.pagey.end) - Math.abs(this.data.pagey.start));
+
+ pos_adjust.x = Math.round(pos_change.x / pos_change.time);
+ pos_adjust.y = Math.round(pos_change.y / pos_change.time);
+
+ this.data.new_pos.x = Math.min(this.data.new_pos.x + pos_adjust.x);
+ this.data.new_pos.y = Math.min(this.data.new_pos.y + pos_adjust.y);
+
+ if (!this.options.enable.x) {
+ this.data.new_pos.x = this.data.pos.start.x;
+ } else if (this.options.constraint.left && this.data.new_pos.x > this.options.constraint.left) {
+ this.data.new_pos.x = this.options.constraint.left;
+ }
+
+ if (!this.options.enable.y) {
+ this.data.new_pos.y = this.data.pos.start.y;
+ } else if (this.data.new_pos.y < 0) {
+ this.data.new_pos.y = 0;
+ }
+
+ // Detect Swipe
+ if (pos_change.time < 2000) {
+ swipe = true;
+ }
+
+
+ if (this.options.enable.x && this.options.enable.y) {
+ if (Math.abs(pos_change.x) > Math.abs(pos_change.y)) {
+ swipe_detect.x = true;
+ } else {
+ swipe_detect.y = true;
+ }
+ } else if (this.options.enable.x) {
+ if (Math.abs(pos_change.x) > Math.abs(pos_change.y)) {
+ swipe_detect.x = true;
+ }
+ } else {
+ if (Math.abs(pos_change.y) > Math.abs(pos_change.x)) {
+ swipe_detect.y = true;
+ }
+ }
+
+ // Detect Direction and long swipe
+ if (swipe_detect.x) {
+
+ // Long Swipe
+ if (Math.abs(pos_change.x) > (this._el.drag.offsetWidth/2)) {
+ swipe = true;
+ }
+
+ if (Math.abs(pos_change.x) > 10000) {
+ this.data.direction = "left";
+ if (pos_change.x > 0) {
+ this.data.direction = "right";
+ }
+ }
+ }
+
+ if (swipe_detect.y) {
+
+ // Long Swipe
+ if (Math.abs(pos_change.y) > (this._el.drag.offsetHeight/2)) {
+ swipe = true;
+ }
+
+ if (Math.abs(pos_change.y) > 10000) {
+ this.data.direction = "up";
+ if (pos_change.y > 0) {
+ this.data.direction = "down";
+ }
+ }
+ }
+
+ if (pos_change.time < 1000 ) {
+
+ } else {
+ this._animateMomentum();
+ }
+
+ if (swipe && this.data.direction) {
+ this.fire("swipe_" + this.data.direction, this.data);
+ } else if (this.data.direction) {
+ this.fire("swipe_nodirection", this.data);
+ } else if (this.options.snap) {
+ this.animator.stop();
+
+ this.animator = TL.Animate(this._el.move, {
+ top: this.data.pos.start.y,
+ left: this.data.pos.start.x,
+ duration: this.options.duration,
+ easing: TL.Ease.easeOutStrong
+ });
+ }
+
+ },
+
+
+ _animateMomentum: function() {
+ var pos = {
+ x: this.data.new_pos.x,
+ y: this.data.new_pos.y
+ },
+ animate = {
+ duration: this.options.duration,
+ easing: TL.Ease.easeOutStrong
+ };
+
+ if (this.options.enable.y) {
+ if (this.options.constraint.top || this.options.constraint.bottom) {
+ if (pos.y > this.options.constraint.bottom) {
+ pos.y = this.options.constraint.bottom;
+ } else if (pos.y < this.options.constraint.top) {
+ pos.y = this.options.constraint.top;
+ }
+ }
+ animate.top = Math.floor(pos.y) + "px";
+ }
+
+ if (this.options.enable.x) {
+ if (this.options.constraint.left && pos.x >= this.options.constraint.left) {
+ pos.x = this.options.constraint.left;
+ }
+ if (this.options.constraint.right && pos.x < this.options.constraint.right) {
+ pos.x = this.options.constraint.right;
+ }
+
+ animate.left = Math.floor(pos.x) + "px";
+ }
+
+ this.animator = TL.Animate(this._el.move, animate);
+
+ this.fire("momentum", this.data);
+ }
+});
+
+
+/* **********************************************
+ Begin TL.MenuBar.js
+********************************************** */
+
+/* TL.MenuBar
+ Draggable component to control size
+================================================== */
+
+TL.MenuBar = TL.Class.extend({
+
+ includes: [TL.Events, TL.DomMixins],
+
+ _el: {},
+
+ /* Constructor
+ ================================================== */
+ initialize: function(elem, parent_elem, options) {
+ // DOM ELEMENTS
+ this._el = {
+ parent: {},
+ container: {},
+ button_backtostart: {},
+ button_zoomin: {},
+ button_zoomout: {},
+ arrow: {},
+ line: {},
+ coverbar: {},
+ grip: {}
+ };
+
+ this.collapsed = false;
+
+ if (typeof elem === 'object') {
+ this._el.container = elem;
+ } else {
+ this._el.container = TL.Dom.get(elem);
+ }
+
+ if (parent_elem) {
+ this._el.parent = parent_elem;
+ }
+
+ //Options
+ this.options = {
+ width: 600,
+ height: 600,
+ duration: 1000,
+ ease: TL.Ease.easeInOutQuint,
+ menubar_default_y: 0
+ };
+
+ // Animation
+ this.animator = {};
+
+ // Merge Data and Options
+ TL.Util.mergeData(this.options, options);
+
+ this._initLayout();
+ this._initEvents();
+ },
+
+ /* Public
+ ================================================== */
+ show: function(d) {
+
+ var duration = this.options.duration;
+ if (d) {
+ duration = d;
+ }
+ /*
+ this.animator = TL.Animate(this._el.container, {
+ top: this.options.menubar_default_y + "px",
+ duration: duration,
+ easing: TL.Ease.easeOutStrong
+ });
+ */
+ },
+
+ hide: function(top) {
+ /*
+ this.animator = TL.Animate(this._el.container, {
+ top: top,
+ duration: this.options.duration,
+ easing: TL.Ease.easeOutStrong
+ });
+ */
+ },
+
+ toogleZoomIn: function(show) {
+ if (show) {
+ TL.DomUtil.removeClass(this._el.button_zoomin,'tl-menubar-button-inactive');
+ } else {
+ TL.DomUtil.addClass(this._el.button_zoomin,'tl-menubar-button-inactive');
+ }
+ },
+
+ toogleZoomOut: function(show) {
+ if (show) {
+ TL.DomUtil.removeClass(this._el.button_zoomout,'tl-menubar-button-inactive');
+ } else {
+ TL.DomUtil.addClass(this._el.button_zoomout,'tl-menubar-button-inactive');
+ }
+ },
+
+ setSticky: function(y) {
+ this.options.menubar_default_y = y;
+ },
+
+ /* Color
+ ================================================== */
+ setColor: function(inverted) {
+ if (inverted) {
+ this._el.container.className = 'tl-menubar tl-menubar-inverted';
+ } else {
+ this._el.container.className = 'tl-menubar';
+ }
+ },
+
+ /* Update Display
+ ================================================== */
+ updateDisplay: function(w, h, a, l) {
+ this._updateDisplay(w, h, a, l);
+ },
+
+
+ /* Events
+ ================================================== */
+ _onButtonZoomIn: function(e) {
+ this.fire("zoom_in", e);
+ },
+
+ _onButtonZoomOut: function(e) {
+ this.fire("zoom_out", e);
+ },
+
+ _onButtonBackToStart: function(e) {
+ this.fire("back_to_start", e);
+ },
+
+
+ /* Private Methods
+ ================================================== */
+ _initLayout: function () {
+
+ // Create Layout
+ this._el.button_zoomin = TL.Dom.create('span', 'tl-menubar-button', this._el.container);
+ this._el.button_zoomout = TL.Dom.create('span', 'tl-menubar-button', this._el.container);
+ this._el.button_backtostart = TL.Dom.create('span', 'tl-menubar-button', this._el.container);
+
+ if (TL.Browser.mobile) {
+ this._el.container.setAttribute("ontouchstart"," ");
+ }
+
+ this._el.button_backtostart.innerHTML = "<span class='tl-icon-goback'></span>";
+ this._el.button_zoomin.innerHTML = "<span class='tl-icon-zoom-in'></span>";
+ this._el.button_zoomout.innerHTML = "<span class='tl-icon-zoom-out'></span>";
+
+
+ },
+
+ _initEvents: function () {
+ TL.DomEvent.addListener(this._el.button_backtostart, 'click', this._onButtonBackToStart, this);
+ TL.DomEvent.addListener(this._el.button_zoomin, 'click', this._onButtonZoomIn, this);
+ TL.DomEvent.addListener(this._el.button_zoomout, 'click', this._onButtonZoomOut, this);
+ },
+
+ // Update Display
+ _updateDisplay: function(width, height, animate) {
+
+ if (width) {
+ this.options.width = width;
+ }
+ if (height) {
+ this.options.height = height;
+ }
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Message.js
+********************************************** */
+
+/* TL.Message
+
+================================================== */
+
+TL.Message = TL.Class.extend({
+
+ includes: [TL.Events, TL.DomMixins, TL.I18NMixins],
+
+ _el: {},
+
+ /* Constructor
+ ================================================== */
+ initialize: function(data, options, add_to_container) {
+ // DOM ELEMENTS
+ this._el = {
+ parent: {},
+ container: {},
+ message_container: {},
+ loading_icon: {},
+ message: {}
+ };
+
+ //Options
+ this.options = {
+ width: 600,
+ height: 600,
+ message_class: "tl-message",
+ message_icon_class: "tl-loading-icon"
+ };
+
+ this._add_to_container = add_to_container || {}; // save ref
+
+ // Merge Data and Options
+ TL.Util.mergeData(this.data, data);
+ TL.Util.mergeData(this.options, options);
+
+ this._el.container = TL.Dom.create("div", this.options.message_class);
+
+ if (add_to_container) {
+ add_to_container.appendChild(this._el.container);
+ this._el.parent = add_to_container;
+ }
+
+ // Animation
+ this.animator = {};
+
+ this._initLayout();
+ this._initEvents();
+ },
+
+ /* Public
+ ================================================== */
+ updateMessage: function(t) {
+ this._updateMessage(t);
+ },
+
+
+ /* Update Display
+ ================================================== */
+ updateDisplay: function(w, h) {
+ this._updateDisplay(w, h);
+ },
+
+ _updateMessage: function(t) {
+ if (!t) {
+ this._el.message.innerHTML = this._('loading');
+ } else {
+ this._el.message.innerHTML = t;
+ }
+
+ // Re-add to DOM?
+ if(!this._el.parent.atrributes && this._add_to_container.attributes) {
+ this._add_to_container.appendChild(this._el.container);
+ this._el.parent = this._add_to_container;
+ }
+ },
+
+
+ /* Events
+ ================================================== */
+
+
+ _onMouseClick: function() {
+ this.fire("clicked", this.options);
+ },
+
+ _onRemove: function() {
+ this._el.parent = {};
+ },
+
+
+ /* Private Methods
+ ================================================== */
+ _initLayout: function () {
+
+ // Create Layout
+ this._el.message_container = TL.Dom.create("div", "tl-message-container", this._el.container);
+ this._el.loading_icon = TL.Dom.create("div", this.options.message_icon_class, this._el.message_container);
+ this._el.message = TL.Dom.create("div", "tl-message-content", this._el.message_container);
+
+ this._updateMessage();
+
+ },
+
+ _initEvents: function () {
+ TL.DomEvent.addListener(this._el.container, 'click', this._onMouseClick, this);
+ TL.DomEvent.addListener(this, 'removed', this._onRemove, this);
+ },
+
+ // Update Display
+ _updateDisplay: function(width, height, animate) {
+
+ }
+
+});
+
+/* **********************************************
+ Begin TL.MediaType.js
+********************************************** */
+
+/* TL.MediaType
+ Determines the type of media the url string is.
+ returns an object with .type and .id
+ You can add new media types by adding a regex
+ to match and the media class name to use to
+ render the media
+
+ The image_only parameter indicates that the
+ call only wants an image-based media type
+ that can be resolved to an image URL.
+
+ TODO
+ Allow array so a slideshow can be a mediatype
+================================================== */
+TL.MediaType = function(m, image_only) {
+ var media = {},
+ media_types = [
+ {
+ type: "youtube",
+ name: "YouTube",
+ match_str: "^(https?:)?\/*(www.)?youtube|youtu\.be",
+ cls: TL.Media.YouTube
+ },
+ {
+ type: "vimeo",
+ name: "Vimeo",
+ match_str: "^(https?:)?\/*(player.)?vimeo\.com",
+ cls: TL.Media.Vimeo
+ },
+ {
+ type: "dailymotion",
+ name: "DailyMotion",
+ match_str: "^(https?:)?\/*(www.)?dailymotion\.com",
+ cls: TL.Media.DailyMotion
+ },
+ {
+ type: "vine",
+ name: "Vine",
+ match_str: "^(https?:)?\/*(www.)?vine\.co",
+ cls: TL.Media.Vine
+ },
+ {
+ type: "soundcloud",
+ name: "SoundCloud",
+ match_str: "^(https?:)?\/*(player.)?soundcloud\.com",
+ cls: TL.Media.SoundCloud
+ },
+ {
+ type: "twitter",
+ name: "Twitter",
+ match_str: "^(https?:)?\/*(www.)?twitter\.com",
+ cls: TL.Media.Twitter
+ },
+ {
+ type: "twitterembed",
+ name: "TwitterEmbed",
+ match_str: "<blockquote class=['\"]twitter-tweet['\"]",
+ cls: TL.Media.Twitter
+ },
+ {
+ type: "googlemaps",
+ name: "Google Map",
+ match_str: /google.+?\/maps\/@([-\d.]+),([-\d.]+),((?:[-\d.]+[zmayht],?)*)|google.+?\/maps\/search\/([\w\W]+)\/@([-\d.]+),([-\d.]+),((?:[-\d.]+[zmayht],?)*)|google.+?\/maps\/place\/([\w\W]+)\/@([-\d.]+),([-\d.]+),((?:[-\d.]+[zmayht],?)*)|google.+?\/maps\/dir\/([\w\W]+)\/([\w\W]+)\/@([-\d.]+),([-\d.]+),((?:[-\d.]+[zmayht],?)*)/,
+ cls: TL.Media.GoogleMap
+ },
+ {
+ type: "googleplus",
+ name: "Google+",
+ match_str: "^(https?:)?\/*plus.google",
+ cls: TL.Media.GooglePlus
+ },
+ {
+ type: "flickr",
+ name: "Flickr",
+ match_str: "^(https?:)?\/*(www.)?flickr.com\/photos",
+ cls: TL.Media.Flickr
+ },
+ {
+ type: "flickr",
+ name: "Flickr",
+ match_str: "^(https?:\/\/)?flic.kr\/.*",
+ cls: TL.Media.Flickr
+ },
+ {
+ type: "instagram",
+ name: "Instagram",
+ match_str: /^(https?:)?\/*(www.)?(instagr.am|^(https?:)?\/*(www.)?instagram.com)\/p\//,
+ cls: TL.Media.Instagram
+ },
+ {
+ type: "profile",
+ name: "Profile",
+ match_str: /^(https?:)?\/*(www.)?instagr.am\/[a-zA-Z0-9]{2,}|^(https?:)?\/*(www.)?instagram.com\/[a-zA-Z0-9]{2,}/,
+ cls: TL.Media.Profile
+ },
+ {
+ type: "documentcloud",
+ name: "Document Cloud",
+ match_str: /documentcloud.org\//,
+ cls: TL.Media.DocumentCloud
+ },
+ {
+ type: "image",
+ name: "Image",
+ match_str: /(jpg|jpeg|png|gif|svg)(\?.*)?$/i,
+ cls: TL.Media.Image
+ },
+ {
+ type: "imgur",
+ name: "Imgur",
+ match_str: /^.*imgur.com\/.+$|<blockquote class=['\"]imgur-embed-pub['\"]/i,
+ cls: TL.Media.Imgur
+ },
+ {
+ type: "googledocs",
+ name: "Google Doc",
+ match_str: "^(https?:)?\/*[^.]*.google.com\/[^\/]*\/d\/[^\/]*\/[^\/]*\?usp=sharing|^(https?:)?\/*drive.google.com\/open\?id=[^\&]*\&authuser=0|^(https?:)?\/*drive.google.com\/open\?id=[^\&]*|^(https?:)?\/*[^.]*.googledrive.com\/host\/[^\/]*\/",
+ cls: TL.Media.GoogleDoc
+ },
+ {
+ type: "pdf",
+ name: "PDF",
+ match_str: /^.*\.pdf(\?.*)?(\#.*)?/,
+ cls: TL.Media.PDF
+ },
+ {
+ type: "wikipedia",
+ name: "Wikipedia",
+ match_str: "^(https?:)?\/*(www.)?wikipedia\.org|^(https?:)?\/*([a-z][a-z].)?wikipedia\.org",
+ cls: TL.Media.Wikipedia
+ },
+ {
+ type: "spotify",
+ name: "spotify",
+ match_str: "spotify",
+ cls: TL.Media.Spotify
+ },
+ {
+ type: "iframe",
+ name: "iFrame",
+ match_str: "iframe",
+ cls: TL.Media.IFrame
+ },
+ {
+ type: "storify",
+ name: "Storify",
+ match_str: "storify",
+ cls: TL.Media.Storify
+ },
+ {
+ type: "blockquote",
+ name: "Quote",
+ match_str: "blockquote",
+ cls: TL.Media.Blockquote
+ },
+ // {
+ // type: "website",
+ // name: "Website",
+ // match_str: "https?://",
+ // cls: TL.Media.Website
+ // },
+ {
+ type: "video",
+ name: "Video",
+ match_str: /(mp4)(\?.*)?$/i,
+ cls: TL.Media.Video
+ },
+ {
+ type: "wistia",
+ name: "Wistia",
+ match_str: /https?:\/\/(.+)?(wistia\.com|wi\.st)\/.*/i,
+ cls: TL.Media.Wistia
+ },
+ {
+ type: "audio",
+ name: "Audio",
+ match_str: /(mp3|wav|m4a)(\?.*)?$/i,
+ cls: TL.Media.Audio
+ },
+ {
+ type: "imageblank",
+ name: "Imageblank",
+ match_str: "",
+ cls: TL.Media.Image
+ }
+ ];
+
+ if(image_only) {
+ if (m instanceof Array) {
+ return false;
+ }
+ for (var i = 0; i < media_types.length; i++) {
+ switch(media_types[i].type) {
+ case "flickr":
+ case "image":
+ case "instagram":
+ if (m.url.match(media_types[i].match_str)) {
+ media = media_types[i];
+ return media;
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+ } else {
+ for (var i = 0; i < media_types.length; i++) {
+ if (m instanceof Array) {
+ return media = {
+ type: "slider",
+ cls: TL.Media.Slider
+ };
+ } else if (m.url.match(media_types[i].match_str)) {
+ media = media_types[i];
+ return media;
+ }
+ }
+ }
+ return false;
+}
+
+
+/* **********************************************
+ Begin TL.Media.js
+********************************************** */
+
+/* TL.Media
+ Main media template for media assets.
+ Takes a data object and populates a dom object
+================================================== */
+// TODO add link
+
+TL.Media = TL.Class.extend({
+
+ includes: [TL.Events, TL.I18NMixins],
+
+ _el: {},
+
+ /* Constructor
+ ================================================== */
+ initialize: function(data, options, add_to_container) {
+ // DOM ELEMENTS
+ this._el = {
+ container: {},
+ content_container: {},
+ content: {},
+ content_item: {},
+ content_link: {},
+ caption: null,
+ credit: null,
+ parent: {},
+ link: null
+ };
+
+ // Player (If Needed)
+ this.player = null;
+
+ // Timer (If Needed)
+ this.timer = null;
+ this.load_timer = null;
+
+ // Message
+ this.message = null;
+
+ // Media ID
+ this.media_id = null;
+
+ // State
+ this._state = {
+ loaded: false,
+ show_meta: false,
+ media_loaded: false
+ };
+
+ // Data
+ this.data = {
+ unique_id: null,
+ url: null,
+ credit: null,
+ caption: null,
+ credit_alternate: null,
+ caption_alternate: null,
+ link: null,
+ link_target: null
+ };
+
+ //Options
+ this.options = {
+ api_key_flickr: "f2cc870b4d233dd0a5bfe73fd0d64ef0",
+ api_key_googlemaps: "AIzaSyB9dW8e_iRrATFa8g24qB6BDBGdkrLDZYI",
+ api_key_embedly: "", // ae2da610d1454b66abdf2e6a4c44026d
+ credit_height: 0,
+ caption_height: 0,
+ background: 0 // is background media (for slide)
+ };
+
+ this.animator = {};
+
+ // Merge Data and Options
+ TL.Util.mergeData(this.options, options);
+ TL.Util.mergeData(this.data, data);
+
+ // Don't create DOM elements if this is background media
+ if(!this.options.background) {
+ this._el.container = TL.Dom.create("div", "tl-media");
+
+ if (this.data.unique_id) {
+ this._el.container.id = this.data.unique_id;
+ }
+
+ this._initLayout();
+
+ if (add_to_container) {
+ add_to_container.appendChild(this._el.container);
+ this._el.parent = add_to_container;
+ }
+ }
+ },
+
+ loadMedia: function() {
+ var self = this;
+
+ if (!this._state.loaded) {
+ try {
+ this.load_timer = setTimeout(function() {
+ self.loadingMessage();
+ self._loadMedia();
+ // self._state.loaded = true; handled in onLoaded()
+ self._updateDisplay();
+ }, 1200);
+ } catch (e) {
+ trace("Error loading media for ", this._media);
+ trace(e);
+ }
+ }
+ },
+
+ _updateMessage: function(msg) {
+ if(this.message) {
+ this.message.updateMessage(msg);
+ }
+ },
+
+ loadingMessage: function() {
+ this._updateMessage(this._('loading') + " " + this.options.media_name);
+ },
+
+ errorMessage: function(msg) {
+ if (msg) {
+ msg = this._('error') + ": " + msg;
+ } else {
+ msg = this._('error');
+ }
+ this._updateMessage(msg);
+ },
+
+ updateMediaDisplay: function(layout) {
+ if (this._state.loaded && !this.options.background) {
+
+ if (TL.Browser.mobile) {
+ this._el.content_item.style.maxHeight = (this.options.height/2) + "px";
+ } else {
+ this._el.content_item.style.maxHeight = this.options.height - this.options.credit_height - this.options.caption_height - 30 + "px";
+ }
+
+ //this._el.content_item.style.maxWidth = this.options.width + "px";
+ this._el.container.style.maxWidth = this.options.width + "px";
+ // Fix for max-width issues in Firefox
+ if (TL.Browser.firefox) {
+ if (this._el.content_item.offsetWidth > this._el.content_item.offsetHeight) {
+ //this._el.content_item.style.width = "100%";
+ }
+ }
+
+ this._updateMediaDisplay(layout);
+
+ if (this._state.media_loaded) {
+ if (this._el.credit) {
+ this._el.credit.style.width = this._el.content_item.offsetWidth + "px";
+ }
+ if (this._el.caption) {
+ this._el.caption.style.width = this._el.content_item.offsetWidth + "px";
+ }
+ }
+
+ }
+ },
+
+ /* Media Specific
+ ================================================== */
+ _loadMedia: function() {
+ // All overrides must call this.onLoaded() to set state
+ this.onLoaded();
+ },
+
+ _updateMediaDisplay: function(l) {
+ //this._el.content_item.style.maxHeight = (this.options.height - this.options.credit_height - this.options.caption_height - 16) + "px";
+ if(TL.Browser.firefox) {
+ this._el.content_item.style.maxWidth = this.options.width + "px";
+ this._el.content_item.style.width = "auto";
+ }
+ },
+
+ _getMeta: function() {
+
+ },
+
+ _getImageURL: function(w, h) {
+ // Image-based media types should return <img>-compatible src url
+ return "";
+ },
+
+ /* Public
+ ================================================== */
+ show: function() {
+
+ },
+
+ hide: function() {
+
+ },
+
+ addTo: function(container) {
+ container.appendChild(this._el.container);
+ this.onAdd();
+ },
+
+ removeFrom: function(container) {
+ container.removeChild(this._el.container);
+ this.onRemove();
+ },
+
+ getImageURL: function(w, h) {
+ return this._getImageURL(w, h);
+ },
+
+ // Update Display
+ updateDisplay: function(w, h, l) {
+ this._updateDisplay(w, h, l);
+ },
+
+ stopMedia: function() {
+ this._stopMedia();
+ },
+
+ loadErrorDisplay: function(message) {
+ try {
+ this._el.content.removeChild(this._el.content_item);
+ } catch(e) {
+ // if this._el.content_item isn't a child of this._el then just keep truckin
+ }
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-loaderror", this._el.content);
+ this._el.content_item.innerHTML = "<div class='tl-icon-" + this.options.media_type + "'></div><p>" + message + "</p>";
+
+ // After Loaded
+ this.onLoaded(true);
+ },
+
+ /* Events
+ ================================================== */
+ onLoaded: function(error) {
+ this._state.loaded = true;
+ this.fire("loaded", this.data);
+ if (this.message) {
+ this.message.hide();
+ }
+ if (!(error || this.options.background)) {
+ this.showMeta();
+ }
+ this.updateDisplay();
+ },
+
+ onMediaLoaded: function(e) {
+ this._state.media_loaded = true;
+ this.fire("media_loaded", this.data);
+ if (this._el.credit) {
+ this._el.credit.style.width = this._el.content_item.offsetWidth + "px";
+ }
+ if (this._el.caption) {
+ this._el.caption.style.width = this._el.content_item.offsetWidth + "px";
+ }
+ },
+
+ showMeta: function(credit, caption) {
+ this._state.show_meta = true;
+ // Credit
+ if (this.data.credit && this.data.credit != "") {
+ this._el.credit = TL.Dom.create("div", "tl-credit", this._el.content_container);
+ this._el.credit.innerHTML = this.options.autolink == true ? TL.Util.linkify(this.data.credit) : this.data.credit;
+ this.options.credit_height = this._el.credit.offsetHeight;
+ }
+
+ // Caption
+ if (this.data.caption && this.data.caption != "") {
+ this._el.caption = TL.Dom.create("div", "tl-caption", this._el.content_container);
+ this._el.caption.innerHTML = this.options.autolink == true ? TL.Util.linkify(this.data.caption) : this.data.caption;
+ this.options.caption_height = this._el.caption.offsetHeight;
+ }
+
+ if (!this.data.caption || !this.data.credit) {
+ this.getMeta();
+ }
+
+ },
+
+ getMeta: function() {
+ this._getMeta();
+ },
+
+ updateMeta: function() {
+ if (!this.data.credit && this.data.credit_alternate) {
+ this._el.credit = TL.Dom.create("div", "tl-credit", this._el.content_container);
+ this._el.credit.innerHTML = this.data.credit_alternate;
+ this.options.credit_height = this._el.credit.offsetHeight;
+ }
+
+ if (!this.data.caption && this.data.caption_alternate) {
+ this._el.caption = TL.Dom.create("div", "tl-caption", this._el.content_container);
+ this._el.caption.innerHTML = this.data.caption_alternate;
+ this.options.caption_height = this._el.caption.offsetHeight;
+ }
+
+ this.updateDisplay();
+ },
+
+ onAdd: function() {
+ this.fire("added", this.data);
+ },
+
+ onRemove: function() {
+ this.fire("removed", this.data);
+ },
+
+ /* Private Methods
+ ================================================== */
+ _initLayout: function () {
+
+ // Message
+ this.message = new TL.Message({}, this.options);
+ this.message.addTo(this._el.container);
+
+ // Create Layout
+ this._el.content_container = TL.Dom.create("div", "tl-media-content-container", this._el.container);
+
+ // Link
+ if (this.data.link && this.data.link != "") {
+
+ this._el.link = TL.Dom.create("a", "tl-media-link", this._el.content_container);
+ this._el.link.href = this.data.link;
+ if (this.data.link_target && this.data.link_target != "") {
+ this._el.link.target = this.data.link_target;
+ } else {
+ this._el.link.target = "_blank";
+ }
+
+ this._el.content = TL.Dom.create("div", "tl-media-content", this._el.link);
+
+ } else {
+ this._el.content = TL.Dom.create("div", "tl-media-content", this._el.content_container);
+ }
+
+
+ },
+
+ // Update Display
+ _updateDisplay: function(w, h, l) {
+ if (w) {
+ this.options.width = w;
+
+ }
+ //this._el.container.style.width = this.options.width + "px";
+ if (h) {
+ this.options.height = h;
+ }
+
+ if (l) {
+ this.options.layout = l;
+ }
+
+ if (this._el.credit) {
+ this.options.credit_height = this._el.credit.offsetHeight;
+ }
+ if (this._el.caption) {
+ this.options.caption_height = this._el.caption.offsetHeight + 5;
+ }
+
+ this.updateMediaDisplay(this.options.layout);
+
+ },
+
+ _stopMedia: function() {
+
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Blockquote.js
+********************************************** */
+
+/* TL.Media.Blockquote
+================================================== */
+
+TL.Media.Blockquote = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-blockquote", this._el.content);
+ this._el.content_container.className = "tl-media-content-container tl-media-content-container-text";
+
+ // Get Media ID
+ this.media_id = this.data.url;
+
+ // API Call
+ this._el.content_item.innerHTML = this.media_id;
+
+ // After Loaded
+ this.onLoaded();
+ },
+
+ updateMediaDisplay: function() {
+
+ },
+
+ _updateMediaDisplay: function() {
+
+ }
+
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.DailyMotion.js
+********************************************** */
+
+/* TL.Media.DailyMotion
+================================================== */
+
+TL.Media.DailyMotion = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var api_url,
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-iframe tl-media-dailymotion", this._el.content);
+
+ // Get Media ID
+ if (this.data.url.match("video")) {
+ this.media_id = this.data.url.split("video\/")[1].split(/[?&]/)[0];
+ } else {
+ this.media_id = this.data.url.split("embed\/")[1].split(/[?&]/)[0];
+ }
+
+ // API URL
+ api_url = "https://www.dailymotion.com/embed/video/" + this.media_id+"?api=postMessage";
+
+ // API Call
+ this._el.content_item.innerHTML = "<iframe autostart='false' frameborder='0' width='100%' height='100%' src='" + api_url + "'></iframe>"
+
+ // After Loaded
+ this.onLoaded();
+ },
+
+ // Update Media Display
+ _updateMediaDisplay: function() {
+ this._el.content_item.style.height = TL.Util.ratio.r16_9({w:this._el.content_item.offsetWidth}) + "px";
+ },
+
+ _stopMedia: function() {
+ this._el.content_item.querySelector("iframe").contentWindow.postMessage('{"command":"pause","parameters":[]}', "*");
+
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.DocumentCloud.js
+********************************************** */
+
+/* TL.Media.DocumentCloud
+================================================== */
+
+TL.Media.DocumentCloud = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var self = this;
+
+ // Create Dom elements
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-documentcloud tl-media-shadow", this._el.content);
+ this._el.content_item.id = TL.Util.unique_ID(7)
+
+ // Check url
+ if(this.data.url.match(/\.html$/)) {
+ this.data.url = this._transformURL(this.data.url);
+ } else if(!(this.data.url.match(/.(json|js)$/))) {
+ trace("DOCUMENT CLOUD IN URL BUT INVALID SUFFIX");
+ }
+
+ // Load viewer API
+ TL.Load.js([
+ 'https://assets.documentcloud.org/viewer/loader.js',
+ 'https://assets.documentcloud.org/viewer/viewer.js'],
+ function() {
+ self.createMedia();
+ }
+ );
+ },
+
+ // Viewer API needs js, not html
+ _transformURL: function(url) {
+ return url.replace(/(.*)\.html$/, '$1.js')
+ },
+
+ // Update Media Display
+ _updateMediaDisplay: function() {
+ this._el.content_item.style.height = this.options.height + "px";
+ //this._el.content_item.style.width = this.options.width + "px";
+ },
+
+ createMedia: function() {
+ // DocumentCloud API call
+ DV.load(this.data.url, {
+ container: '#'+this._el.content_item.id,
+ showSidebar: false
+ });
+ this.onLoaded();
+ },
+
+
+
+ /* Events
+ ================================================== */
+
+
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Flickr.js
+********************************************** */
+
+/* TL.Media.Flickr
+
+================================================== */
+
+TL.Media.Flickr = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var api_url,
+ self = this;
+
+ try {
+ // Get Media ID
+ this.establishMediaID();
+
+ // API URL
+ api_url = "https://api.flickr.com/services/rest/?method=flickr.photos.getSizes&api_key=" + this.options.api_key_flickr + "&photo_id=" + this.media_id + "&format=json&jsoncallback=?";
+
+ // API Call
+ TL.getJSON(api_url, function(d) {
+ if (d.stat == "ok") {
+ self.sizes = d.sizes.size; // store sizes info
+
+ if(!self.options.background) {
+ self.createMedia();
+ }
+
+ self.onLoaded();
+ } else {
+ self.loadErrorDisplay(self._("flickr_notfound_err"));
+ }
+ });
+ } catch(e) {
+ self.loadErrorDisplay(self._(e.message_key));
+ }
+ },
+
+ establishMediaID: function() {
+ if (this.data.url.match(/flic.kr\/.+/i)) {
+ var encoded = this.data.url.split('/').slice(-1)[0];
+ this.media_id = TL.Util.base58.decode(encoded);
+ } else {
+ var marker = 'flickr.com/photos/';
+ var idx = this.data.url.indexOf(marker);
+ if (idx == -1) { throw new TL.Error("flickr_invalidurl_err"); }
+ var pos = idx + marker.length;
+ this.media_id = this.data.url.substr(pos).split("/")[1];
+ }
+ },
+
+ createMedia: function() {
+ var self = this;
+
+ // Link
+ this._el.content_link = TL.Dom.create("a", "", this._el.content);
+ this._el.content_link.href = this.data.url;
+ this._el.content_link.target = "_blank";
+
+ // Photo
+ this._el.content_item = TL.Dom.create("img", "tl-media-item tl-media-image tl-media-flickr tl-media-shadow", this._el.content_link);
+
+ if (this.data.alt) {
+ this._el.content_item.alt = this.data.alt;
+ } else if (this.data.caption) {
+ this._el.content_item.alt = TL.Util.unhtmlify(this.data.caption);
+ }
+
+ if (this.data.title) {
+ this._el.content_item.title = this.data.title;
+ } else if (this.data.caption) {
+ this._el.content_item.title = TL.Util.unhtmlify(this.data.caption);
+ }
+
+ // Media Loaded Event
+ this._el.content_item.addEventListener('load', function(e) {
+ self.onMediaLoaded();
+ });
+
+ // Set Image Source
+ this._el.content_item.src = this.getImageURL(this.options.width, this.options.height);
+ },
+
+ getImageURL: function(w, h) {
+ var best_size = this.size_label(h),
+ source = this.sizes[this.sizes.length - 2].source;
+
+ for(var i = 0; i < this.sizes.length; i++) {
+ if (this.sizes[i].label == best_size) {
+ source = this.sizes[i].source;
+ }
+ }
+
+ return source;
+ },
+
+ _getMeta: function() {
+ var self = this,
+ api_url;
+
+ // API URL
+ api_url = "https://api.flickr.com/services/rest/?method=flickr.photos.getInfo&api_key=" + this.options.api_key_flickr + "&photo_id=" + this.media_id + "&format=json&jsoncallback=?";
+
+ // API Call
+ TL.getJSON(api_url, function(d) {
+ self.data.credit_alternate = "<a href='" + self.data.url + "' target='_blank'>" + d.photo.owner.realname + "</a>";
+ self.data.caption_alternate = d.photo.title._content + " " + d.photo.description._content;
+ self.updateMeta();
+ });
+ },
+
+ size_label: function(s) {
+ var _size = "";
+
+ if (s <= 75) {
+ if (s <= 0) {
+ _size = "Large";
+ } else {
+ _size = "Thumbnail";
+ }
+ } else if (s <= 180) {
+ _size = "Small";
+ } else if (s <= 240) {
+ _size = "Small 320";
+ } else if (s <= 375) {
+ _size = "Medium";
+ } else if (s <= 480) {
+ _size = "Medium 640";
+ } else if (s <= 600) {
+ _size = "Large";
+ } else {
+ _size = "Large";
+ }
+
+ return _size;
+ }
+
+
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.GoogleDoc.js
+********************************************** */
+
+/* TL.Media.GoogleDoc
+
+================================================== */
+
+TL.Media.GoogleDoc = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var url,
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-iframe", this._el.content);
+
+ // Get Media ID
+ if (this.data.url.match("open\?id\=")) {
+ this.media_id = this.data.url.split("open\?id\=")[1];
+ if (this.data.url.match("\&authuser\=0")) {
+ url = this.media_id.match("\&authuser\=0")[0];
+ };
+ } else if (this.data.url.match(/file\/d\/([^/]*)\/?/)) {
+ var doc_id = this.data.url.match(/file\/d\/([^/]*)\/?/)[1];
+ url = 'https://drive.google.com/file/d/' + doc_id + '/preview'
+ } else {
+ url = this.data.url;
+ }
+
+ // this URL makes something suitable for an img src but what if it's not an image?
+ // api_url = "http://www.googledrive.com/host/" + this.media_id + "/";
+
+ this._el.content_item.innerHTML = "<iframe class='doc' frameborder='0' width='100%' height='100%' src='" + url + "'></iframe>";
+
+ // After Loaded
+ this.onLoaded();
+ },
+
+ // Update Media Display
+ _updateMediaDisplay: function() {
+ this._el.content_item.style.height = this.options.height + "px";
+ }
+
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.GooglePlus.js
+********************************************** */
+
+/* TL.Media.GooglePlus
+================================================== */
+
+TL.Media.GooglePlus = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var api_url,
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-googleplus", this._el.content);
+
+ // Get Media ID
+ this.media_id = this.data.url;
+
+ // API URL
+ api_url = this.media_id;
+
+ // API Call
+ this._el.content_item.innerHTML = "<iframe frameborder='0' width='100%' height='100%' src='" + api_url + "'></iframe>"
+
+ // After Loaded
+ this.onLoaded();
+ },
+
+ // Update Media Display
+ _updateMediaDisplay: function() {
+ this._el.content_item.style.height = this.options.height + "px";
+ }
+
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.IFrame.js
+********************************************** */
+
+/* TL.Media.IFrame
+================================================== */
+
+TL.Media.IFrame = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var api_url,
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-iframe", this._el.content);
+
+ // Get Media ID
+ this.media_id = this.data.url;
+
+ // API URL
+ api_url = this.media_id;
+
+ // API Call
+ this._el.content_item.innerHTML = api_url;
+
+ // After Loaded
+ this.onLoaded();
+ },
+
+ // Update Media Display
+ _updateMediaDisplay: function() {
+ this._el.content_item.style.height = this.options.height + "px";
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Image.js
+********************************************** */
+
+/* TL.Media.Image
+ Produces image assets.
+ Takes a data object and populates a dom object
+================================================== */
+
+TL.Media.Image = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ // Loading Message
+ this.loadingMessage();
+
+ // Create media?
+ if(!this.options.background) {
+ this.createMedia();
+ }
+
+ // After loaded
+ this.onLoaded();
+ },
+
+ createMedia: function() {
+ var self = this,
+ image_class = "tl-media-item tl-media-image tl-media-shadow";
+
+ if (this.data.url.match(/.png(\?.*)?$/) || this.data.url.match(/.svg(\?.*)?$/)) {
+ image_class = "tl-media-item tl-media-image"
+ }
+
+ // Link
+ if (this.data.link) {
+ this._el.content_link = TL.Dom.create("a", "", this._el.content);
+ this._el.content_link.href = this.data.link;
+ this._el.content_link.target = "_blank";
+ this._el.content_item = TL.Dom.create("img", image_class, this._el.content_link);
+ } else {
+ this._el.content_item = TL.Dom.create("img", image_class, this._el.content);
+ }
+
+ if (this.data.alt) {
+ this._el.content_item.alt = this.data.alt;
+ } else if (this.data.caption) {
+ this._el.content_item.alt = TL.Util.unhtmlify(this.data.caption);
+ }
+
+ if (this.data.title) {
+ this._el.content_item.title = this.data.title;
+ } else if (this.data.caption) {
+ this._el.content_item.title = TL.Util.unhtmlify(this.data.caption);
+ }
+
+ // Media Loaded Event
+ this._el.content_item.addEventListener('load', function(e) {
+ self.onMediaLoaded();
+ });
+
+ this._el.content_item.src = this.getImageURL();
+ },
+
+ getImageURL: function(w, h) {
+ return TL.Util.transformImageURL(this.data.url);
+ },
+
+ _updateMediaDisplay: function(layout) {
+ if(TL.Browser.firefox) {
+ //this._el.content_item.style.maxWidth = (this.options.width/2) - 40 + "px";
+ this._el.content_item.style.width = "auto";
+ }
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Imgur.js
+********************************************** */
+
+/* TL.Media.Flickr
+
+================================================== */
+
+TL.Media.Imgur = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ try {
+ var self = this;
+
+ if (this.data.url.match("<blockquote class=['\"]imgur-embed-pub['\"]")){
+ var found = this.data.url.match(/(imgur\.com)\/(\w+)/);
+ this.media_id = found[2];
+ this.data.url = "http://imgur.com/gallery/" + this.media_id;
+ }
+ else if (this.data.url){
+ this.media_id = this.data.url.split('/').slice(-1)[0];
+ }
+
+ TL.Load.js([
+ 'https://s.imgur.com/min/embed.js'],
+ function(){
+ self.createMedia();
+ }
+ );
+
+ } catch(e) {
+ this.loadErrorDisplay(this._("imgur_invalidurl_err"));
+ }
+ },
+
+ createMedia: function() {
+ var self = this;
+ var api_url = "https://api.imgur.com/oembed.json?url=" + this.data.url;
+
+ // Content div
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-image tl-media-imgur",
+ this._el.content);
+
+ // API Call
+
+ TL.ajax({
+ type: 'GET',
+ url: api_url,
+ dataType: 'json',
+ success: function(data){
+ try {
+ self._el.content_item.innerHTML = data.html;
+ setInterval(function(){
+ if(document.querySelector("blockquote.imgur-embed-pub") == null){
+ clearInterval();
+ }
+ else{
+ imgurEmbed.createIframe();
+ document.getElementById("imageElement").removeAttribute("style");
+ document.getElementById("image").removeAttribute("style");
+ }
+ }, 2000);
+ } catch(e) {
+ }
+ },
+ error: function(xhr, errorType, error) {
+ tc = new TL.TimelineConfig();
+ if (errorType == 'parsererror') {
+ var error = new TL.Error("invalid_url_err");
+ } else {
+ var error = new TL.Error("unknown_read_err", errorType);
+ }
+ self.loadErrorDisplay(self._("imgur_invalidurl_err"));
+ tc.logError(error);
+ }
+ });
+
+ this.onLoaded();
+
+ },
+
+
+
+ _updateMediaDisplay: function() {
+ //this.el.content_item = document.getElementById(this._el.content_item.id);
+ this._el.content_item.style.width = this.options.width + "px";
+ this._el.content_item.style.height = TL.Util.ratio.r16_9({w:this.options.width}) + "px";
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Instagram.js
+********************************************** */
+
+/* TL.Media.Instagram
+
+================================================== */
+
+TL.Media.Instagram = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ // Get Media ID
+ this.media_id = this.data.url.split("\/p\/")[1].split("/")[0];
+
+ if(!this.options.background) {
+ this.createMedia();
+ }
+
+ // After Loaded
+ this.onLoaded();
+ },
+
+ createMedia: function() {
+ var self = this;
+
+ // Link
+ this._el.content_link = TL.Dom.create("a", "", this._el.content);
+ this._el.content_link.href = this.data.url;
+ this._el.content_link.target = "_blank";
+
+ // Photo
+ this._el.content_item = TL.Dom.create("img", "tl-media-item tl-media-image tl-media-instagram tl-media-shadow", this._el.content_link);
+
+ if (this.data.alt) {
+ this._el.content_item.alt = this.data.alt;
+ } else if (this.data.caption) {
+ this._el.content_item.alt = TL.Util.unhtmlify(this.data.caption);
+ }
+
+ if (this.data.title) {
+ this._el.content_item.title = this.data.title;
+ } else if (this.data.caption) {
+ this._el.content_item.title = TL.Util.unhtmlify(this.data.caption);
+ }
+
+ // Media Loaded Event
+ this._el.content_item.addEventListener('load', function(e) {
+ self.onMediaLoaded();
+ });
+
+ this._el.content_item.src = this.getImageURL(this._el.content.offsetWidth);
+ },
+
+ getImageURL: function(w, h) {
+ return "https://instagram.com/p/" + this.media_id + "/media/?size=" + this.sizes(w);
+ },
+
+ _getMeta: function() {
+ var self = this,
+ api_url;
+
+ // API URL
+ api_url = "https://api.instagram.com/oembed?url=https://instagr.am/p/" + this.media_id + "&callback=?";
+
+ // API Call
+ TL.getJSON(api_url, function(d) {
+ self.data.credit_alternate = "<a href='" + d.author_url + "' target='_blank'>" + d.author_name + "</a>";
+ self.data.caption_alternate = d.title;
+ self.updateMeta();
+ });
+ },
+
+ sizes: function(s) {
+ var _size = "";
+ if (s <= 150) {
+ _size = "t";
+ } else if (s <= 306) {
+ _size = "m";
+ } else {
+ _size = "l";
+ }
+
+ return _size;
+ }
+
+
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.GoogleMap.js
+********************************************** */
+
+/* TL.Media.Map
+================================================== */
+
+TL.Media.GoogleMap = TL.Media.extend({
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-map tl-media-shadow", this._el.content);
+
+ // Get Media ID
+ this.media_id = this.data.url;
+
+ // API Call
+ this.mapframe = TL.Dom.create("iframe", "", this._el.content_item);
+ window.stash = this;
+ this.mapframe.width = "100%";
+ this.mapframe.height = "100%";
+ this.mapframe.frameBorder = "0";
+ this.mapframe.src = this.makeGoogleMapsEmbedURL(this.media_id, this.options.api_key_googlemaps);
+
+
+ // After Loaded
+ this.onLoaded();
+ },
+
+ _updateMediaDisplay: function() {
+ if (this._state.loaded) {
+ var dimensions = TL.Util.ratio.square({w:this._el.content_item.offsetWidth});
+ this._el.content_item.style.height = dimensions.h + "px";
+ }
+ },
+
+ makeGoogleMapsEmbedURL: function(url,api_key) {
+ // Test with https://docs.google.com/spreadsheets/d/1zCpvtRdftlR5fBPppmy_-SkGIo7RMwoPUiGFZDAXbTc/edit
+ var Streetview = false;
+
+ function determineMapMode(url){
+ function parseDisplayMode(display_mode, param_string) {
+ // Set the zoom param
+ if (display_mode.slice(-1) == "z") {
+ param_string["zoom"] = display_mode;
+ // Set the maptype to something other than "roadmap"
+ } else if (display_mode.slice(-1) == "m") {
+ // TODO: make this somehow interpret the correct zoom level
+ // until then fake it by using Google's default zoom level
+ param_string["zoom"] = 14;
+ param_string["maptype"] = "satellite";
+ // Set all the fun streetview params
+ } else if (display_mode.slice(-1) == "t") {
+ Streetview = true;
+ // streetview uses "location" instead of "center"
+ // "place" mode doesn't have the center param, so we may need to grab that now
+ if (mapmode == "place") {
+ var center = url.match(regexes["place"])[3] + "," + url.match(regexes["place"])[4];
+ } else {
+ var center = param_string["center"];
+ delete param_string["center"];
+ }
+ // Clear out all the other params -- this is so hacky
+ param_string = {};
+ param_string["location"] = center;
+ streetview_params = display_mode.split(",");
+ for (param in param_defs["streetview"]) {
+ var i = parseInt(param) + 1;
+ if (param_defs["streetview"][param] == "pitch" && streetview_params[i] == "90t"){
+ // Although 90deg is the horizontal default in the URL, 0 is horizontal default for embed URL. WHY??
+ // https://developers.google.com/maps/documentation/javascript/streetview
+ param_string[param_defs["streetview"][param]] = 0;
+ } else {
+ param_string[param_defs["streetview"][param]] = streetview_params[i].slice(0,-1);
+ }
+ }
+
+ }
+ return param_string;
+ }
+ function determineMapModeURL(mapmode, match) {
+ var param_string = {};
+ var url_root = match[1], display_mode = match[match.length - 1];
+ for (param in param_defs[mapmode]) {
+ // skip first 2 matches, because they reflect the URL and not params
+ var i = parseInt(param)+2;
+ if (param_defs[mapmode][param] == "center") {
+ param_string[param_defs[mapmode][param]] = match[i] + "," + match[++i];
+ } else {
+ param_string[param_defs[mapmode][param]] = match[i];
+ }
+ }
+
+ param_string = parseDisplayMode(display_mode, param_string);
+ param_string["key"] = api_key;
+ if (Streetview == true) {
+ mapmode = "streetview";
+ } else {
+ }
+ return (url_root + "/embed/v1/" + mapmode + TL.Util.getParamString(param_string));
+ }
+
+
+ mapmode = "view";
+ if (url.match(regexes["place"])) {
+ mapmode = "place";
+ } else if (url.match(regexes["directions"])) {
+ mapmode = "directions";
+ } else if (url.match(regexes["search"])) {
+ mapmode = "search";
+ }
+ return determineMapModeURL(mapmode, url.match(regexes[mapmode]));
+
+ }
+
+ // These must be in the order they appear in the original URL
+ // "key" param not included since it's not in the URL structure
+ // Streetview "location" param not included since it's captured as "center"
+ // Place "center" param ...um...
+ var param_defs = {
+ "view": ["center"],
+ "place": ["q", "center"],
+ "directions": ["origin", "destination", "center"],
+ "search": ["q", "center"],
+ "streetview": ["fov", "heading", "pitch"]
+ };
+ // Set up regex parts to make updating these easier if Google changes them
+ var root_url_regex = /(https:\/\/.+google.+?\/maps)/;
+ var coords_regex = /@([-\d.]+),([-\d.]+)/;
+ var address_regex = /([\w\W]+)/;
+
+ // Data doesn't seem to get used for anything
+ var data_regex = /data=[\S]*/;
+
+ // Capture the parameters that determine what map tiles to use
+ // In roadmap view, mode URLs include zoom paramater (e.g. "14z")
+ // In satellite (or "earth") view, URLs include a distance parameter (e.g. "84511m")
+ // In streetview, URLs include paramaters like "3a,75y,49.76h,90t" -- see http://stackoverflow.com/a/22988073
+ var display_mode_regex = /,((?:[-\d.]+[zmayht],?)*)/;
+
+ var regexes = {
+ view: new RegExp(root_url_regex.source + "/" + coords_regex.source + display_mode_regex.source),
+ place: new RegExp(root_url_regex.source + "/place/" + address_regex.source + "/" + coords_regex.source + display_mode_regex.source),
+ directions: new RegExp(root_url_regex.source + "/dir/" + address_regex.source + "/" + address_regex.source + "/" + coords_regex.source + display_mode_regex.source),
+ search: new RegExp(root_url_regex.source + "/search/" + address_regex.source + "/" + coords_regex.source + display_mode_regex.source)
+ };
+ return determineMapMode(url);
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.PDF.js
+********************************************** */
+
+/* TL.Media.PDF
+ * Chrome and Firefox on both OSes and Safari all support PDFs as iframe src.
+ * This prompts for a download on IE10/11. We should investigate using
+ * https://mozilla.github.io/pdf.js/ to support showing PDFs on IE.
+================================================== */
+
+TL.Media.PDF = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var url = TL.Util.transformImageURL(this.data.url),
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-iframe", this._el.content);
+ var markup = "";
+ // not assigning media_id attribute. Seems like a holdover which is no longer used.
+ if (TL.Browser.ie || TL.Browser.edge || url.match(/dl.dropboxusercontent.com/)) {
+ markup = "<iframe class='doc' frameborder='0' width='100%' height='100%' src='//docs.google.com/viewer?url=" + url + "&amp;embedded=true'></iframe>";
+ } else {
+ markup = "<iframe class='doc' frameborder='0' width='100%' height='100%' src='" + url + "'></iframe>"
+ }
+ this._el.content_item.innerHTML = markup
+ this.onLoaded();
+ },
+
+ // Update Media Display
+ _updateMediaDisplay: function() {
+ this._el.content_item.style.height = this.options.height + "px";
+ }
+
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Profile.js
+********************************************** */
+
+/* TL.Media.Profile
+
+================================================== */
+
+TL.Media.Profile = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+
+ this._el.content_item = TL.Dom.create("img", "tl-media-item tl-media-image tl-media-profile tl-media-shadow", this._el.content);
+ this._el.content_item.src = this.data.url;
+
+ this.onLoaded();
+ },
+
+ _updateMediaDisplay: function(layout) {
+
+
+ if(TL.Browser.firefox) {
+ this._el.content_item.style.maxWidth = (this.options.width/2) - 40 + "px";
+ }
+ }
+
+});
+
+/* **********************************************
+ Begin TL.Media.Slider.js
+********************************************** */
+
+/* TL.Media.SLider
+ Produces a Slider
+ Takes a data object and populates a dom object
+ TODO
+ Placeholder
+================================================== */
+
+TL.Media.Slider = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+
+ this._el.content_item = TL.Dom.create("img", "tl-media-item tl-media-image", this._el.content);
+ this._el.content_item.src = this.data.url;
+
+ this.onLoaded();
+ }
+
+});
+
+/* **********************************************
+ Begin TL.Media.SoundCloud.js
+********************************************** */
+
+/* TL.Media.SoundCloud
+================================================== */
+
+var soundCoudCreated = false;
+
+TL.Media.SoundCloud = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var api_url,
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-iframe tl-media-soundcloud tl-media-shadow", this._el.content);
+
+ // Get Media ID
+ this.media_id = this.data.url;
+
+ // API URL
+ api_url = "https://soundcloud.com/oembed?url=" + this.media_id + "&format=js&callback=?"
+
+ // API Call
+ TL.getJSON(api_url, function(d) {
+ TL.Load.js("https://w.soundcloud.com/player/api.js", function() {//load soundcloud api for pausing.
+ self.createMedia(d);
+ });
+ });
+
+ },
+
+ createMedia: function(d) {
+ this._el.content_item.innerHTML = d.html;
+
+ this.soundCloudCreated = true;
+
+ self.widget = SC.Widget(this._el.content_item.querySelector("iframe"));//create widget for api use
+
+ // After Loaded
+ this.onLoaded();
+ },
+
+ _stopMedia: function() {
+ if (this.soundCloudCreated)
+ {
+ self.widget.pause();
+ }
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Spotify.js
+********************************************** */
+
+/* TL.Media.Spotify
+================================================== */
+
+TL.Media.Spotify = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var api_url,
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-iframe tl-media-spotify", this._el.content);
+
+ // Get Media ID
+ if (this.data.url.match(/^spotify:track/) || this.data.url.match(/^spotify:album/) || this.data.url.match(/^spotify:user:.+:playlist:/)) {
+ this.media_id = this.data.url;
+ }
+
+ if (this.data.url.match(/spotify\.com\/track\/(.+)/)) {
+ this.media_id = "spotify:track:" + this.data.url.match(/spotify\.com\/track\/(.+)/)[1];
+ } else if (this.data.url.match(/spotify\.com\/album\/(.+)/)) {
+ this.media_id = "spotify:album:" + this.data.url.match(/spotify\.com\/album\/(.+)/)[1];
+ } else if (this.data.url.match(/spotify\.com\/user\/(.+?)\/playlist\/(.+)/)) {
+ var user = this.data.url.match(/spotify\.com\/user\/(.+?)\/playlist\/(.+)/)[1];
+ var playlist = this.data.url.match(/spotify\.com\/user\/(.+?)\/playlist\/(.+)/)[2];
+ this.media_id = "spotify:user:" + user + ":playlist:" + playlist;
+ } else if (this.data.url.match(/spotify\.com\/artist\/(.+)/)) {
+ var artist = this.data.url.match(/spotify\.com\/artist\/(.+)/)[1];
+ this.media_id = "spotify:artist:" + artist;
+ }
+
+
+ if (this.media_id) {
+ // API URL
+ api_url = "https://embed.spotify.com/?uri=" + this.media_id + "&theme=white&view=coverart";
+
+ this.player = TL.Dom.create("iframe", "tl-media-shadow", this._el.content_item);
+ this.player.width = "100%";
+ this.player.height = "100%";
+ this.player.frameBorder = "0";
+ this.player.src = api_url;
+
+ // After Loaded
+ this.onLoaded();
+
+ } else {
+ this.loadErrorDisplay(this._('spotify_invalid_url'));
+ }
+ },
+
+ // Update Media Display
+
+ _updateMediaDisplay: function(l) {
+ var _height = this.options.height,
+ _player_height = 0,
+ _player_width = 0;
+
+ if (TL.Browser.mobile) {
+ _height = (this.options.height/2);
+ } else {
+ _height = this.options.height - this.options.credit_height - this.options.caption_height - 30;
+ }
+
+ this._el.content_item.style.maxHeight = "none";
+ trace(_height);
+ trace(this.options.width)
+ if (_height > this.options.width) {
+ trace("height is greater")
+ _player_height = this.options.width + 80 + "px";
+ _player_width = this.options.width + "px";
+ } else {
+ trace("width is greater")
+ trace(this.options.width)
+ _player_height = _height + "px";
+ _player_width = _height - 80 + "px";
+ }
+
+
+ this.player.style.width = _player_width;
+ this.player.style.height = _player_height;
+
+ if (this._el.credit) {
+ this._el.credit.style.width = _player_width;
+ }
+ if (this._el.caption) {
+ this._el.caption.style.width = _player_width;
+ }
+ },
+
+
+ _stopMedia: function() {
+ // Need spotify stop code
+
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Storify.js
+********************************************** */
+
+/* TL.Media.Storify
+================================================== */
+
+TL.Media.Storify = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var content;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-iframe tl-media-storify", this._el.content);
+
+ // Get Media ID
+ this.media_id = this.data.url;
+
+ // Content
+ content = "<iframe frameborder='0' width='100%' height='100%' src='" + this.media_id + "/embed'></iframe>";
+ content += "<script src='" + this.media_id + ".js'></script>";
+
+ // API Call
+ this._el.content_item.innerHTML = content;
+
+ // After Loaded
+ this.onLoaded();
+ },
+
+ // Update Media Display
+ _updateMediaDisplay: function() {
+ this._el.content_item.style.height = this.options.height + "px";
+ }
+
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Text.js
+********************************************** */
+
+TL.Media.Text = TL.Class.extend({
+
+ includes: [TL.Events],
+
+ // DOM ELEMENTS
+ _el: {
+ container: {},
+ content_container: {},
+ content: {},
+ headline: {},
+ date: {}
+ },
+
+ // Data
+ data: {
+ unique_id: "",
+ headline: "headline",
+ text: "text"
+ },
+
+ // Options
+ options: {
+ title: false
+ },
+
+ /* Constructor
+ ================================================== */
+ initialize: function(data, options, add_to_container) {
+
+ TL.Util.setData(this, data);
+
+ // Merge Options
+ TL.Util.mergeData(this.options, options);
+
+ this._el.container = TL.Dom.create("div", "tl-text");
+ this._el.container.id = this.data.unique_id;
+
+ this._initLayout();
+
+ if (add_to_container) {
+ add_to_container.appendChild(this._el.container);
+ };
+
+ },
+
+ /* Adding, Hiding, Showing etc
+ ================================================== */
+ show: function() {
+
+ },
+
+ hide: function() {
+
+ },
+
+ addTo: function(container) {
+ container.appendChild(this._el.container);
+ //this.onAdd();
+ },
+
+ removeFrom: function(container) {
+ container.removeChild(this._el.container);
+ },
+
+ headlineHeight: function() {
+ return this._el.headline.offsetHeight + 40;
+ },
+
+ addDateText: function(str) {
+ this._el.date.innerHTML = str;
+ },
+
+ /* Events
+ ================================================== */
+ onLoaded: function() {
+ this.fire("loaded", this.data);
+ },
+
+ onAdd: function() {
+ this.fire("added", this.data);
+ },
+
+ onRemove: function() {
+ this.fire("removed", this.data);
+ },
+
+ /* Private Methods
+ ================================================== */
+ _initLayout: function () {
+
+ // Create Layout
+ this._el.content_container = TL.Dom.create("div", "tl-text-content-container", this._el.container);
+
+ // Date
+ this._el.date = TL.Dom.create("h3", "tl-headline-date", this._el.content_container);
+
+ // Headline
+ if (this.data.headline != "") {
+ var headline_class = "tl-headline";
+ if (this.options.title) {
+ headline_class = "tl-headline tl-headline-title";
+ }
+ this._el.headline = TL.Dom.create("h2", headline_class, this._el.content_container);
+ this._el.headline.innerHTML = this.data.headline;
+ }
+
+ // Text
+ if (this.data.text != "") {
+ var text_content = "";
+
+ text_content += TL.Util.htmlify(this.options.autolink == true ? TL.Util.linkify(this.data.text) : this.data.text);
+ trace(this.data.text);
+ this._el.content = TL.Dom.create("div", "tl-text-content", this._el.content_container);
+ this._el.content.innerHTML = text_content;
+ trace(text_content);
+ trace(this._el.content)
+ }
+
+ // Fire event that the slide is loaded
+ this.onLoaded();
+
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Twitter.js
+********************************************** */
+
+/* TL.Media.Twitter
+ Produces Twitter Display
+================================================== */
+
+TL.Media.Twitter = TL.Media.extend({
+
+ includes: [TL.Events],
+
+
+
+ /* Load the media
+ ================================================== */
+
+ _loadMedia: function() {
+ var api_url,
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-twitter", this._el.content);
+ this._el.content_container.className = "tl-media-content-container tl-media-content-container-text";
+
+ // Get Media ID
+ if(this.data.url.match("^(https?:)?\/*(www.)?twitter\.com"))
+ {
+ if (this.data.url.match("status\/")) {
+ this.media_id = this.data.url.split("status\/")[1];
+ } else if (this.data.url.match("statuses\/")) {
+ this.media_id = this.data.url.split("statuses\/")[1];
+ } else {
+ this.media_id = "";
+ }
+ }
+
+ else if(this.data.url.match("<blockquote class=['\"]twitter-tweet['\"]")) {
+
+ var found = this.data.url.match(/(status|statuses)\/(\d+)/);
+ if (found && found.length > 2) {
+ this.media_id = found[2];
+ } else {
+ self.loadErrorDisplay(self._("twitterembed_invalidurl_err"));
+ return;
+ }
+ }
+
+ // API URL
+ api_url = "https://api.twitter.com/1/statuses/oembed.json?id=" + this.media_id + "&omit_script=true&include_entities=true&callback=?";
+
+ // API Call
+ TL.ajax({
+ type: 'GET',
+ url: api_url,
+ dataType: 'json', //json data type
+ success: function(d){
+ self.createMedia(d);
+ },
+ error:function(xhr, type){
+ var error_text = "";
+ error_text += self._("twitter_load_err") + "<br/>" + self.media_id + "<br/>" + type;
+ self.loadErrorDisplay(error_text);
+ }
+ });
+
+ },
+
+ createMedia: function(d) {
+ trace("create_media")
+ var tweet = "",
+ tweet_text = "",
+ tweetuser = "",
+ tweet_status_temp = "",
+ tweet_status_url = "",
+ tweet_status_date = "",
+ self = this;
+
+ // TWEET CONTENT
+ tweet_text = d.html.split("<\/p>\&mdash;")[0] + "</p></blockquote>";
+ tweetuser = d.author_url.split("twitter.com\/")[1];
+ tweet_status_temp = d.html.split("<\/p>\&mdash;")[1].split("<a href=\"")[1];
+ tweet_status_url = tweet_status_temp.split("\"\>")[0];
+ tweet_status_date = tweet_status_temp.split("\"\>")[1].split("<\/a>")[0];
+
+ // Open links in new window
+ tweet_text = tweet_text.replace(/<a href/ig, '<a target="_blank" href');
+
+ if (tweet_text.includes("pic.twitter.com")) {
+
+ TL.Load.js('https://platform.twitter.com/widgets.js', function() {
+ twttr.widgets.createTweet(self.media_id, self._el.content_item,
+ {
+ conversation : 'none', // or all
+ linkColor : '#cc0000', // default is blue
+ theme : 'light' // or dark
+ })
+ });
+
+ this.onLoaded();
+
+ } else {
+
+ // TWEET CONTENT
+ tweet += tweet_text;
+
+ // TWEET AUTHOR
+ tweet += "<div class='vcard'>";
+ tweet += "<a href='" + tweet_status_url + "' class='twitter-date' target='_blank'>" + tweet_status_date + "</a>";
+ tweet += "<img src='" + "' class='tl-media-item tl-media-image' target='_blank'>" + "</a>";
+ tweet += "<div class='author'>";
+ tweet += "<a class='screen-name url' href='" + d.author_url + "' target='_blank'>";
+ tweet += "<span class='avatar'></span>";
+ tweet += "<span class='fn'>" + d.author_name + " <span class='tl-icon-twitter'></span></span>";
+ tweet += "<span class='nickname'>@" + tweetuser + "<span class='thumbnail-inline'></span></span>";
+ tweet += "</a>";
+ tweet += "</div>";
+ tweet += "</div>";
+
+
+ // Add to DOM
+ this._el.content_item.innerHTML = tweet;
+
+ // After Loaded
+ this.onLoaded();
+ }
+ },
+
+
+ updateMediaDisplay: function() {
+
+ },
+
+ _updateMediaDisplay: function() {
+
+ },
+
+
+
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.TwitterEmbed.js
+********************************************** */
+
+/* TL.Media.TwitterEmbed
+ Produces Twitter Display
+================================================== */
+
+var mediaID;
+
+TL.Media.TwitterEmbed = TL.Media.extend({
+ includes: [TL.Events],
+
+
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var api_url,
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-twitter", this._el.content);
+ this._el.content_container.className = "tl-media-content-container tl-media-content-container-text";
+
+ // Get Media ID
+ var found = this.data.url.match(/(status|statuses)\/(\d+)/);
+ if (found && found.length > 2) {
+ this.media_id = found[2];
+ } else {
+ self.loadErrorDisplay(self._("twitterembed_invalidurl_err"));
+ return;
+ }
+
+ // API URL
+ api_url = "https://api.twitter.com/1/statuses/oembed.json?id=" + this.media_id + "&omit_script=true&include_entities=true&callback=?";
+
+ window.twttr = (function(d, s, id) {
+ var js, fjs = d.getElementsByTagName(s)[0],
+ t = window.twttr || {};
+ if (d.getElementById(id)) return t;
+ js = d.createElement(s);
+ js.id = id;
+ js.src = "https://platform.twitter.com/widgets.js";
+ fjs.parentNode.insertBefore(js, fjs);
+
+ t._e = [];
+ t.ready = function(f) {
+ t._e.push(f);
+ };
+
+ return t;
+ }(document, "script", "twitter-wjs"));
+
+ mediaID = this.media_id;
+
+ // API Call
+ TL.ajax({
+ type: 'GET',
+ url: api_url,
+ dataType: 'json', //json data type
+ success: function(d){
+ self.createMedia(d);
+ },
+ error:function(xhr, type){
+ var error_text = "";
+ error_text += self._("twitter_load_err") + "<br/>" + self.media_id + "<br/>" + type;
+ self.loadErrorDisplay(error_text);
+ }
+ });
+
+ },
+
+ createMedia: function(d) {
+ trace("create_media")
+ var tweet = "",
+ tweet_text = "",
+ tweetuser = "",
+ tweet_status_temp = "",
+ tweet_status_url = "",
+ tweet_status_date = "";
+
+ // TWEET CONTENT
+ tweet_text = d.html.split("<\/p>\&mdash;")[0] + "</p></blockquote>";
+ console.log(tweet_text);
+ tweetuser = d.author_url.split("twitter.com\/")[1];
+ tweet_status_temp = d.html.split("<\/p>\&mdash;")[1].split("<a href=\"")[1];
+ tweet_status_url = tweet_status_temp.split("\"\>")[0];
+ tweet_status_date = tweet_status_temp.split("\"\>")[1].split("<\/a>")[0];
+
+ // Open links in new window
+ tweet_text = tweet_text.replace(/<a href/ig, '<a target="_blank" href');
+
+ if (tweet_text.includes("pic.twitter.com")) {
+ twttr.ready(
+ function(evt) {
+ tweet = document.getElementsByClassName("tl-media-twitter")[0];
+ var id = String(mediaID);
+ twttr.widgets.createTweet(id, tweet,
+ {
+ conversation : 'none', // or all
+ linkColor : '#cc0000', // default is blue
+ theme : 'light' // or dark
+ })
+ .then(function (evt) {
+ this.onLoaded();
+ });
+ }
+ );
+ this._el.content_item.innerHTML = tweet;
+ this.onLoaded();
+ } else{
+ // TWEET CONTENT
+ tweet += tweet_text;
+
+ // TWEET AUTHOR
+ tweet += "<div class='vcard'>";
+ tweet += "<a href='" + tweet_status_url + "' class='twitter-date' target='_blank'>" + tweet_status_date + "</a>";
+ tweet += "<div class='author'>";
+ tweet += "<a class='screen-name url' href='" + d.author_url + "' target='_blank'>";
+ tweet += "<span class='avatar'></span>";
+ tweet += "<span class='fn'>" + d.author_name + " <span class='tl-icon-twitter'></span></span>";
+ tweet += "<span class='nickname'>@" + tweetuser + "<span class='thumbnail-inline'></span></span>";
+ tweet += "</a>";
+ tweet += "</div>";
+ tweet += "</div>";
+
+
+ // Add to DOM
+ this._el.content_item.innerHTML = tweet;
+
+ // After Loaded
+ this.onLoaded();
+ }
+
+ },
+
+ updateMediaDisplay: function() {
+
+ },
+
+ _updateMediaDisplay: function() {
+
+ }
+
+
+
+});
+
+/* **********************************************
+ Begin TL.Media.Vimeo.js
+********************************************** */
+
+/* TL.Media.Vimeo
+================================================== */
+
+TL.Media.Vimeo = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var api_url,
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-iframe tl-media-vimeo tl-media-shadow", this._el.content);
+
+ // Get Media ID
+ this.media_id = this.data.url.split(/video\/|\/\/vimeo\.com\//)[1].split(/[?&]/)[0];
+ var start_time = null;
+
+ // Get start time
+ if (this.data.url.match(/#t=([^&]+).*/)) {
+ start_time = this.data.url.match(/#t=([^&]+).*/)[1];
+ }
+
+ // API URL
+ api_url = "https://player.vimeo.com/video/" + this.media_id + "?api=1&title=0&amp;byline=0&amp;portrait=0&amp;color=ffffff";
+ if (start_time) {
+ api_url = api_url += '&amp;#t=' + start_time;
+ }
+
+ this.player = TL.Dom.create("iframe", "", this._el.content_item);
+
+ // Media Loaded Event
+ this.player.addEventListener('load', function(e) {
+ self.onMediaLoaded();
+ });
+
+ this.player.width = "100%";
+ this.player.height = "100%";
+ this.player.frameBorder = "0";
+ this.player.src = api_url;
+
+ this.player.setAttribute('allowfullscreen', '');
+ this.player.setAttribute('webkitallowfullscreen', '');
+ this.player.setAttribute('mozallowfullscreen', '');
+
+ // After Loaded
+ this.onLoaded();
+ },
+
+ // Update Media Display
+ _updateMediaDisplay: function() {
+ this._el.content_item.style.height = TL.Util.ratio.r16_9({w:this._el.content_item.offsetWidth}) + "px";
+ },
+
+ _stopMedia: function() {
+
+ try {
+ this.player.contentWindow.postMessage(JSON.stringify({method: "pause"}), "https://player.vimeo.com");
+ }
+ catch(err) {
+ trace(err);
+ }
+ }
+});
+
+
+/* **********************************************
+ Begin TL.Media.Vine.js
+********************************************** */
+
+/* TL.Media.Vine
+
+================================================== */
+
+TL.Media.Vine = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var api_url,
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-iframe tl-media-vine tl-media-shadow", this._el.content);
+
+ // Get Media ID
+ this.media_id = this.data.url.split("vine.co/v/")[1];
+
+ // API URL
+ api_url = "https://vine.co/v/" + this.media_id + "/embed/simple";
+
+ // API Call
+ this._el.content_item.innerHTML = "<iframe frameborder='0' width='100%' height='100%' src='" + api_url + "'></iframe><script async src='https://platform.vine.co/static/scripts/embed.js' charset='utf-8'></script>"
+
+ // After Loaded
+ this.onLoaded();
+ },
+
+ // Update Media Display
+ _updateMediaDisplay: function() {
+ var size = TL.Util.ratio.square({w:this._el.content_item.offsetWidth , h:this.options.height});
+ this._el.content_item.style.height = size.h + "px";
+ },
+
+ _stopMedia: function() {
+ this._el.content_item.querySelector("iframe").contentWindow.postMessage('pause', '*');
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Website.js
+********************************************** */
+
+/* TL.Media.Website
+ Uses Embedly
+ http://embed.ly/docs/api/extract/endpoints/1/extract
+================================================== */
+
+TL.Media.Website = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var self = this;
+
+ // Get Media ID
+ this.media_id = this.data.url.replace(/.*?:\/\//g, "");
+
+ if (this.options.api_key_embedly) {
+ // API URL
+ api_url = "https://api.embed.ly/1/extract?key=" + this.options.api_key_embedly + "&url=" + this.media_id + "&callback=?";
+
+ // API Call
+ TL.getJSON(api_url, function(d) {
+ self.createMedia(d);
+ });
+ } else {
+ this.createCardContent();
+ }
+ },
+
+ createCardContent: function() {
+ (function(w, d){
+ var id='embedly-platform', n = 'script';
+ if (!d.getElementById(id)){
+ w.embedly = w.embedly || function() {(w.embedly.q = w.embedly.q || []).push(arguments);};
+ var e = d.createElement(n); e.id = id; e.async=1;
+ e.src = ('https:' === document.location.protocol ? 'https' : 'http') + '://cdn.embedly.com/widgets/platform.js';
+ var s = d.getElementsByTagName(n)[0];
+ s.parentNode.insertBefore(e, s);
+ }
+ })(window, document);
+
+ var content = "<a href=\"" + this.data.url + "\" class=\"embedly-card\">" + this.data.url + "</a>";
+ this._setContent(content);
+
+ },
+ createMedia: function(d) { // this costs API credits...
+ var content = "";
+
+
+ content += "<h4><a href='" + this.data.url + "' target='_blank'>" + d.title + "</a></h4>";
+ if (d.images) {
+ if (d.images[0]) {
+ trace(d.images[0].url);
+ content += "<img src='" + d.images[0].url + "' />";
+ }
+ }
+ if (d.favicon_url) {
+ content += "<img class='tl-media-website-icon' src='" + d.favicon_url + "' />";
+ }
+ content += "<span class='tl-media-website-description'>" + d.provider_name + "</span><br/>";
+ content += "<p>" + d.description + "</p>";
+
+ this._setContent(content);
+ },
+
+ _setContent: function(content) {
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-website", this._el.content);
+ this._el.content_container.className = "tl-media-content-container tl-media-content-container-text";
+ this._el.content_item.innerHTML = content;
+
+ // After Loaded
+ this.onLoaded();
+
+ },
+
+ updateMediaDisplay: function() {
+
+ },
+
+ _updateMediaDisplay: function() {
+
+ }
+
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Wikipedia.js
+********************************************** */
+
+/* TL.Media.Wikipedia
+================================================== */
+
+TL.Media.Wikipedia = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var api_url,
+ api_language,
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-wikipedia", this._el.content);
+ this._el.content_container.className = "tl-media-content-container tl-media-content-container-text";
+
+ // Get Media ID
+ this.media_id = this.data.url.split("wiki\/")[1].split("#")[0].replace("_", " ");
+ this.media_id = this.media_id.replace(" ", "%20");
+ api_language = this.data.url.split("//")[1].split(".wikipedia")[0];
+
+ // API URL
+ api_url = "https://" + api_language + ".wikipedia.org/w/api.php?action=query&prop=extracts|pageimages&redirects=&titles=" + this.media_id + "&exintro=1&format=json&callback=?";
+
+ // API Call
+ TL.ajax({
+ type: 'GET',
+ url: api_url,
+ dataType: 'json', //json data type
+
+ success: function(d){
+ self.createMedia(d);
+ },
+ error:function(xhr, type){
+ var error_text = "";
+ error_text += self._("wikipedia_load_err") + "<br/>" + self.media_id + "<br/>" + type;
+ self.loadErrorDisplay(error_text);
+ }
+ });
+
+ },
+
+ createMedia: function(d) {
+ var wiki = "";
+
+ if (d.query) {
+ var content = "",
+ wiki = {
+ entry: {},
+ title: "",
+ text: "",
+ extract: "",
+ paragraphs: 1,
+ page_image: "",
+ text_array: []
+ };
+
+ wiki.entry = TL.Util.getObjectAttributeByIndex(d.query.pages, 0);
+ wiki.extract = wiki.entry.extract;
+ wiki.title = wiki.entry.title;
+ wiki.page_image = wiki.entry.thumbnail;
+
+ if (wiki.extract.match("<p>")) {
+ wiki.text_array = wiki.extract.split("<p>");
+ } else {
+ wiki.text_array.push(wiki.extract);
+ }
+
+ for(var i = 0; i < wiki.text_array.length; i++) {
+ if (i+1 <= wiki.paragraphs && i+1 < wiki.text_array.length) {
+ wiki.text += "<p>" + wiki.text_array[i+1];
+ }
+ }
+
+
+ content += "<span class='tl-icon-wikipedia'></span>";
+ content += "<div class='tl-wikipedia-title'><h4><a href='" + this.data.url + "' target='_blank'>" + wiki.title + "</a></h4>";
+ content += "<span class='tl-wikipedia-source'>" + this._('wikipedia') + "</span></div>";
+
+ if (wiki.page_image) {
+ //content += "<img class='tl-wikipedia-pageimage' src='" + wiki.page_image.source +"'>";
+ }
+
+ content += wiki.text;
+
+ if (wiki.extract.match("REDIRECT")) {
+
+ } else {
+ // Add to DOM
+ this._el.content_item.innerHTML = content;
+ // After Loaded
+ this.onLoaded();
+ }
+
+
+ }
+
+ },
+
+ updateMediaDisplay: function() {
+
+ },
+
+ _updateMediaDisplay: function() {
+
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Wistia.js
+********************************************** */
+
+/* TL.Media.Wistia
+================================================== */
+
+TL.Media.Wistia = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var api_url,
+ self = this;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-iframe tl-media-wistia tl-media-shadow", this._el.content);
+
+ // Get Media ID
+ this.media_id = this.data.url.split(/https?:\/\/(.+)?(wistia\.com|wi\.st)\/medias\/(.*)/)[3];
+
+ // API URL
+ api_url = "https://fast.wistia.com/embed/iframe/" + this.media_id + "?version=v1&controlsVisibleOnLoad=true&playerColor=aae3d8";
+
+ this.player = TL.Dom.create("iframe", "", this._el.content_item);
+
+ // Media Loaded Event
+ this.player.addEventListener('load', function(e) {
+ self.onMediaLoaded();
+ });
+
+ this.player.width = "100%";
+ this.player.height = "100%";
+ this.player.frameBorder = "0";
+ this.player.src = api_url;
+
+ this.player.setAttribute('allowfullscreen', '');
+ this.player.setAttribute('webkitallowfullscreen', '');
+ this.player.setAttribute('mozallowfullscreen', '');
+
+ // After Loaded
+ this.onLoaded();
+ },
+
+ // Update Media Display
+ _updateMediaDisplay: function() {
+ this._el.content_item.style.height = TL.Util.ratio.r16_9({w:this._el.content_item.offsetWidth}) + "px";
+ },
+
+ _stopMedia: function() {
+ try {
+ this.player.contentWindow.postMessage(JSON.stringify({method: "pause"}), "https://player.vimeo.com");
+ }
+ catch(err) {
+ trace(err);
+ }
+ }
+});
+
+
+/* **********************************************
+ Begin TL.Media.YouTube.js
+********************************************** */
+
+/* TL.Media.YouTube
+================================================== */
+
+TL.Media.YouTube = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ var self = this,
+ url_vars;
+
+ this.youtube_loaded = false;
+
+ // Create Dom element
+ this._el.content_item = TL.Dom.create("div", "tl-media-item tl-media-youtube tl-media-shadow", this._el.content);
+ this._el.content_item.id = TL.Util.unique_ID(7)
+
+ // URL Vars
+ url_vars = TL.Util.getUrlVars(this.data.url);
+
+ // Get Media ID
+ this.media_id = {};
+
+ if (this.data.url.match('v=')) {
+ this.media_id.id = url_vars["v"];
+ } else if (this.data.url.match('\/embed\/')) {
+ this.media_id.id = this.data.url.split("embed\/")[1].split(/[?&]/)[0];
+ } else if (this.data.url.match(/v\/|v=|youtu\.be\//)){
+ this.media_id.id = this.data.url.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0];
+ } else {
+ trace("YOUTUBE IN URL BUT NOT A VALID VIDEO");
+ }
+
+ // Get start second
+ if (this.data.url.match("start=")) {
+ this.media_id.start = parseInt(this.data.url.split("start=")[1], 10);
+ }
+ else if (this.data.url.match("t=")) {
+ this.media_id.start = parseInt(this.data.url.split("t=")[1], 10);
+ }
+
+ //Get end second
+ if (this.data.url.match("end=")) {
+ this.media_id.end = parseInt(this.data.url.split("end=")[1], 10);
+ }
+
+ this.media_id.hd = Boolean(typeof(url_vars["hd"]) != 'undefined');
+
+
+ // API Call
+ TL.Load.js('https://www.youtube.com/iframe_api', function() {
+ self.createMedia();
+ });
+
+ },
+
+ // Update Media Display
+ _updateMediaDisplay: function() {
+ //this.el.content_item = document.getElementById(this._el.content_item.id);
+ this._el.content_item.style.height = TL.Util.ratio.r16_9({w:this.options.width}) + "px";
+ this._el.content_item.style.width = this.options.width + "px";
+ },
+
+ _stopMedia: function() {
+ if (this.youtube_loaded) {
+ try {
+ if(this.player.getPlayerState() == YT.PlayerState.PLAYING) {
+ this.player.pauseVideo();
+ }
+ }
+ catch(err) {
+ trace(err);
+ }
+
+ }
+ },
+ createMedia: function() {
+ var self = this;
+
+ clearTimeout(this.timer);
+
+ if(typeof YT != 'undefined' && typeof YT.Player != 'undefined') {
+ // Create Player
+ this.player = new YT.Player(this._el.content_item.id, {
+ playerVars: {
+ enablejsapi: 1,
+ color: 'white',
+ controls: 1,
+ start: this.media_id.start,
+ end: this.media_id.end,
+ fs: 1
+ },
+ videoId: this.media_id.id,
+ events: {
+ onReady: function() {
+ self.onPlayerReady();
+ // After Loaded
+ self.onLoaded();
+ },
+ 'onStateChange': self.onStateChange
+ }
+ });
+ } else {
+ this.timer = setTimeout(function() {
+ self.createMedia();
+ }, 1000);
+ }
+ },
+
+ /* Events
+ ================================================== */
+ onPlayerReady: function(e) {
+ this.youtube_loaded = true;
+ this._el.content_item = document.getElementById(this._el.content_item.id);
+ this.onMediaLoaded();
+
+ },
+
+ onStateChange: function(e) {
+ if(e.data == YT.PlayerState.ENDED) {
+ e.target.seekTo(0);
+ e.target.pauseVideo();
+ }
+ }
+
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Audio.js
+********************************************** */
+
+/* TL.Media.Audio
+ Produces audio assets.
+ Takes a data object and populates a dom object
+================================================== */
+
+TL.Media.Audio = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ // Loading Message
+ this.loadingMessage();
+
+ // Create media?
+ if(!this.options.background) {
+ this.createMedia();
+ }
+
+ // After loaded
+ this.onLoaded();
+ },
+
+ createMedia: function() {
+ var self = this,
+ audio_class = "tl-media-item tl-media-audio tl-media-shadow";
+
+ // Link
+ if (this.data.link) {
+ this._el.content_link = TL.Dom.create("a", "", this._el.content);
+ this._el.content_link.href = this.data.link;
+ this._el.content_link.target = "_blank";
+ this._el.content_item = TL.Dom.create("audio", audio_class, this._el.content_link);
+ } else {
+ this._el.content_item = TL.Dom.create("audio", audio_class, this._el.content);
+ }
+
+ this._el.content_item.controls = true;
+ this._el.source_item = TL.Dom.create("source", "", this._el.content_item);
+
+ // Media Loaded Event
+ this._el.content_item.addEventListener('load', function(e) {
+ self.onMediaLoaded();
+ });
+
+ this._el.source_item.src = this.data.url;
+ this._el.source_item.type = this._getType(this.data.url, this.data.mediatype.match_str);
+ this._el.content_item.innerHTML += "Your browser doesn't support HTML5 audio with " + this._el.source_item.type;
+ },
+
+ _updateMediaDisplay: function(layout) {
+ if(TL.Browser.firefox) {
+ this._el.content_item.style.width = "auto";
+ }
+ },
+
+ _getType: function(url, reg) {
+ var ext = url.match(reg);
+ var type = "audio/"
+ switch(ext[1]) {
+ case "mp3":
+ type += "mpeg";
+ break;
+ case "wav":
+ type += "wav";
+ break;
+ case "m4a":
+ type += "mp4";
+ break;
+ default:
+ type = "audio";
+ break;
+ }
+ return type
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Media.Video.js
+********************************************** */
+
+/* TL.Media.Video
+ Produces video assets.
+ Takes a data object and populates a dom object
+================================================== */
+
+TL.Media.Video = TL.Media.extend({
+
+ includes: [TL.Events],
+
+ /* Load the media
+ ================================================== */
+ _loadMedia: function() {
+ // Loading Message
+ this.loadingMessage();
+
+ // Create media?
+ if(!this.options.background) {
+ this.createMedia();
+ }
+
+ // After loaded
+ this.onLoaded();
+ },
+
+ createMedia: function() {
+ var self = this,
+ video_class = "tl-media-item tl-media-video tl-media-shadow";
+
+ // Link
+ if (this.data.link) {
+ this._el.content_link = TL.Dom.create("a", "", this._el.content);
+ this._el.content_link.href = this.data.link;
+ this._el.content_link.target = "_blank";
+ this._el.content_item = TL.Dom.create("video", video_class, this._el.content_link);
+ } else {
+ this._el.content_item = TL.Dom.create("video", video_class, this._el.content);
+ }
+
+ this._el.content_item.controls = true;
+ this._el.source_item = TL.Dom.create("source", "", this._el.content_item);
+
+ // Media Loaded Event
+ this._el.content_item.addEventListener('load', function(e) {
+ self.onMediaLoaded();
+ });
+
+ this._el.source_item.src = this.data.url;
+ this._el.source_item.type = this._getType(this.data.url, this.data.mediatype.match_str);
+ this._el.content_item.innerHTML += "Your browser doesn't support HTML5 video with " + this._el.source_item.type;
+ },
+
+ _updateMediaDisplay: function(layout) {
+ if(TL.Browser.firefox) {
+ this._el.content_item.style.width = "auto";
+ }
+ },
+
+ _getType: function(url, reg) {
+ var ext = url.match(reg);
+ var type = "video/"
+ switch(ext[1]) {
+ case "mp4":
+ type += "mp4";
+ break;
+ default:
+ type = "video";
+ break;
+ }
+ return type
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.Slide.js
+********************************************** */
+
+/* TL.Slide
+ Creates a slide. Takes a data object and
+ populates the slide with content.
+================================================== */
+
+TL.Slide = TL.Class.extend({
+
+ includes: [TL.Events, TL.DomMixins, TL.I18NMixins],
+
+ _el: {},
+
+ /* Constructor
+ ================================================== */
+ initialize: function(data, options, title_slide) {
+ // DOM Elements
+ this._el = {
+ container: {},
+ scroll_container: {},
+ background: {},
+ content_container: {},
+ content: {}
+ };
+
+ // Components
+ this._media = null;
+ this._mediaclass = {};
+ this._text = {};
+ this._background_media = null;
+
+ // State
+ this._state = {
+ loaded: false
+ };
+
+ this.has = {
+ headline: false,
+ text: false,
+ media: false,
+ title: false,
+ background: {
+ image: false,
+ color: false,
+ color_value :""
+ }
+ }
+
+ this.has.title = title_slide;
+
+ // Data
+ this.data = {
+ unique_id: null,
+ background: null,
+ start_date: null,
+ end_date: null,
+ location: null,
+ text: null,
+ media: null,
+ autolink: true
+ };
+
+ // Options
+ this.options = {
+ // animation
+ duration: 1000,
+ slide_padding_lr: 40,
+ ease: TL.Ease.easeInSpline,
+ width: 600,
+ height: 600,
+ skinny_size: 650,
+ media_name: ""
+ };
+
+ // Actively Displaying
+ this.active = false;
+
+ // Animation Object
+ this.animator = {};
+
+ // Merge Data and Options
+ TL.Util.mergeData(this.options, options);
+ TL.Util.mergeData(this.data, data);
+
+ this._initLayout();
+ this._initEvents();
+
+
+ },
+
+ /* Adding, Hiding, Showing etc
+ ================================================== */
+ show: function() {
+ this.animator = TL.Animate(this._el.slider_container, {
+ left: -(this._el.container.offsetWidth * n) + "px",
+ duration: this.options.duration,
+ easing: this.options.ease
+ });
+ },
+
+ hide: function() {
+
+ },
+
+ setActive: function(is_active) {
+ this.active = is_active;
+
+ if (this.active) {
+ if (this.data.background) {
+ this.fire("background_change", this.has.background);
+ }
+ this.loadMedia();
+ } else {
+ this.stopMedia();
+ }
+ },
+
+ addTo: function(container) {
+ container.appendChild(this._el.container);
+ //this.onAdd();
+ },
+
+ removeFrom: function(container) {
+ container.removeChild(this._el.container);
+ },
+
+ updateDisplay: function(w, h, l) {
+ this._updateDisplay(w, h, l);
+ },
+
+ loadMedia: function() {
+ var self = this;
+
+ if (this._media && !this._state.loaded) {
+ this._media.loadMedia();
+ this._state.loaded = true;
+ }
+
+ if(this._background_media && !this._background_media._state.loaded) {
+ this._background_media.on("loaded", function() {
+ self._updateBackgroundDisplay();
+ });
+ this._background_media.loadMedia();
+ }
+ },
+
+ stopMedia: function() {
+ if (this._media && this._state.loaded) {
+ this._media.stopMedia();
+ }
+ },
+
+ getBackground: function() {
+ return this.has.background;
+ },
+
+ scrollToTop: function() {
+ this._el.container.scrollTop = 0;
+ },
+
+ getFormattedDate: function() {
+
+ if (TL.Util.trim(this.data.display_date).length > 0) {
+ return this.data.display_date;
+ }
+ var date_text = "";
+
+ if(!this.has.title) {
+ if (this.data.end_date) {
+ date_text = " &mdash; " + this.data.end_date.getDisplayDate(this.getLanguage());
+ }
+ if (this.data.start_date) {
+ date_text = this.data.start_date.getDisplayDate(this.getLanguage()) + date_text;
+ }
+ }
+ return date_text;
+ },
+
+ /* Events
+ ================================================== */
+
+
+ /* Private Methods
+ ================================================== */
+ _initLayout: function () {
+ // Create Layout
+ this._el.container = TL.Dom.create("div", "tl-slide");
+
+ if (this.has.title) {
+ this._el.container.className = "tl-slide tl-slide-titleslide";
+ }
+
+ if (this.data.unique_id) {
+ this._el.container.id = this.data.unique_id;
+ }
+ this._el.scroll_container = TL.Dom.create("div", "tl-slide-scrollable-container", this._el.container);
+ this._el.content_container = TL.Dom.create("div", "tl-slide-content-container", this._el.scroll_container);
+ this._el.content = TL.Dom.create("div", "tl-slide-content", this._el.content_container);
+ this._el.background = TL.Dom.create("div", "tl-slide-background", this._el.container);
+ // Style Slide Background
+ if (this.data.background) {
+ if (this.data.background.url) {
+ var media_type = TL.MediaType(this.data.background, true);
+ if(media_type) {
+ this._background_media = new media_type.cls(this.data.background, {background: 1});
+
+ this.has.background.image = true;
+ this._el.container.className += ' tl-full-image-background';
+ this.has.background.color_value = "#000";
+ this._el.background.style.display = "block";
+ }
+ }
+ if (this.data.background.color) {
+ this.has.background.color = true;
+ this._el.container.className += ' tl-full-color-background';
+ this.has.background.color_value = this.data.background.color;
+ //this._el.container.style.backgroundColor = this.data.background.color;
+ //this._el.background.style.backgroundColor = this.data.background.color;
+ //this._el.background.style.display = "block";
+ }
+ if (this.data.background.text_background) {
+ this._el.container.className += ' tl-text-background';
+ }
+
+ }
+
+
+
+ // Determine Assets for layout and loading
+ if (this.data.media && this.data.media.url && this.data.media.url != "") {
+ this.has.media = true;
+ }
+ if (this.data.text && this.data.text.text) {
+ this.has.text = true;
+ }
+ if (this.data.text && this.data.text.headline) {
+ this.has.headline = true;
+ }
+
+ // Create Media
+ if (this.has.media) {
+ // Determine the media type
+ this.data.media.mediatype = TL.MediaType(this.data.media);
+ this.options.media_name = this.data.media.mediatype.name;
+ this.options.media_type = this.data.media.mediatype.type;
+ this.options.autolink = this.data.autolink;
+
+ // Create a media object using the matched class name
+ this._media = new this.data.media.mediatype.cls(this.data.media, this.options);
+ }
+
+ // Create Text
+ if (this.has.text || this.has.headline) {
+ this._text = new TL.Media.Text(this.data.text, {title:this.has.title,language: this.options.language, autolink: this.data.autolink });
+ this._text.addDateText(this.getFormattedDate());
+ }
+
+
+
+ // Add to DOM
+ if (!this.has.text && !this.has.headline && this.has.media) {
+ TL.DomUtil.addClass(this._el.container, 'tl-slide-media-only');
+ this._media.addTo(this._el.content);
+ } else if (this.has.headline && this.has.media && !this.has.text) {
+ TL.DomUtil.addClass(this._el.container, 'tl-slide-media-only');
+ this._text.addTo(this._el.content);
+ this._media.addTo(this._el.content);
+ } else if (this.has.text && this.has.media) {
+ this._media.addTo(this._el.content);
+ this._text.addTo(this._el.content);
+ } else if (this.has.text || this.has.headline) {
+ TL.DomUtil.addClass(this._el.container, 'tl-slide-text-only');
+ this._text.addTo(this._el.content);
+ }
+
+ // Fire event that the slide is loaded
+ this.onLoaded();
+
+ },
+
+ _initEvents: function() {
+
+ },
+
+ // Update Display
+ _updateDisplay: function(width, height, layout) {
+ var content_width,
+ content_padding_left = this.options.slide_padding_lr,
+ content_padding_right = this.options.slide_padding_lr;
+
+ if (width) {
+ this.options.width = width;
+ } else {
+ this.options.width = this._el.container.offsetWidth;
+ }
+
+ content_width = this.options.width - (this.options.slide_padding_lr * 2);
+
+ if(TL.Browser.mobile && (this.options.width <= this.options.skinny_size)) {
+ content_padding_left = 0;
+ content_padding_right = 0;
+ content_width = this.options.width;
+ } else if (layout == "landscape") {
+
+ } else if (this.options.width <= this.options.skinny_size) {
+ content_padding_left = 50;
+ content_padding_right = 50;
+ content_width = this.options.width - content_padding_left - content_padding_right;
+ } else {
+
+ }
+
+ this._el.content.style.paddingLeft = content_padding_left + "px";
+ this._el.content.style.paddingRight = content_padding_right + "px";
+ this._el.content.style.width = content_width + "px";
+
+ if (height) {
+ this.options.height = height;
+ //this._el.scroll_container.style.height = this.options.height + "px";
+
+ } else {
+ this.options.height = this._el.container.offsetHeight;
+ }
+
+ if (this._media) {
+
+ if (!this.has.text && this.has.headline) {
+ this._media.updateDisplay(content_width, (this.options.height - this._text.headlineHeight()), layout);
+ } else if (!this.has.text && !this.has.headline) {
+ this._media.updateDisplay(content_width, this.options.height, layout);
+ } else if (this.options.width <= this.options.skinny_size) {
+ this._media.updateDisplay(content_width, this.options.height, layout);
+ } else {
+ this._media.updateDisplay(content_width/2, this.options.height, layout);
+ }
+ }
+
+ this._updateBackgroundDisplay();
+ },
+
+ _updateBackgroundDisplay: function() {
+ if(this._background_media && this._background_media._state.loaded) {
+ this._el.background.style.backgroundImage = "url('" + this._background_media.getImageURL(this.options.width, this.options.height) + "')";
+ }
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.SlideNav.js
+********************************************** */
+
+/* TL.SlideNav
+ encapsulate DOM display/events for the
+ 'next' and 'previous' buttons on a slide.
+================================================== */
+// TODO null out data
+
+TL.SlideNav = TL.Class.extend({
+
+ includes: [TL.Events, TL.DomMixins],
+
+ _el: {},
+
+ /* Constructor
+ ================================================== */
+ initialize: function(data, options, add_to_container) {
+ // DOM ELEMENTS
+ this._el = {
+ container: {},
+ content_container: {},
+ icon: {},
+ title: {},
+ description: {}
+ };
+
+ // Media Type
+ this.mediatype = {};
+
+ // Data
+ this.data = {
+ title: "Navigation",
+ description: "Description",
+ date: "Date"
+ };
+
+ //Options
+ this.options = {
+ direction: "previous"
+ };
+
+ this.animator = null;
+
+ // Merge Data and Options
+ TL.Util.mergeData(this.options, options);
+ TL.Util.mergeData(this.data, data);
+
+
+ this._el.container = TL.Dom.create("div", "tl-slidenav-" + this.options.direction);
+
+ if (TL.Browser.mobile) {
+ this._el.container.setAttribute("ontouchstart"," ");
+ }
+
+ this._initLayout();
+ this._initEvents();
+
+ if (add_to_container) {
+ add_to_container.appendChild(this._el.container);
+ };
+
+ },
+
+ /* Update Content
+ ================================================== */
+ update: function(slide) {
+ var d = {
+ title: "",
+ description: "",
+ date: slide.getFormattedDate()
+ };
+
+ if (slide.data.text) {
+ if (slide.data.text.headline) {
+ d.title = slide.data.text.headline;
+ }
+ }
+
+ this._update(d);
+ },
+
+ /* Color
+ ================================================== */
+ setColor: function(inverted) {
+ if (inverted) {
+ this._el.content_container.className = 'tl-slidenav-content-container tl-slidenav-inverted';
+ } else {
+ this._el.content_container.className = 'tl-slidenav-content-container';
+ }
+ },
+
+ /* Events
+ ================================================== */
+ _onMouseClick: function() {
+ this.fire("clicked", this.options);
+ },
+
+ /* Private Methods
+ ================================================== */
+ _update: function(d) {
+ // update data
+ this.data = TL.Util.mergeData(this.data, d);
+
+ // Title
+ this._el.title.innerHTML = TL.Util.unlinkify(this.data.title);
+
+ // Date
+ this._el.description.innerHTML = TL.Util.unlinkify(this.data.date);
+ },
+
+ _initLayout: function () {
+
+ // Create Layout
+ this._el.content_container = TL.Dom.create("div", "tl-slidenav-content-container", this._el.container);
+ this._el.icon = TL.Dom.create("div", "tl-slidenav-icon", this._el.content_container);
+ this._el.title = TL.Dom.create("div", "tl-slidenav-title", this._el.content_container);
+ this._el.description = TL.Dom.create("div", "tl-slidenav-description", this._el.content_container);
+
+ this._el.icon.innerHTML = "&nbsp;"
+
+ this._update();
+ },
+
+ _initEvents: function () {
+ TL.DomEvent.addListener(this._el.container, 'click', this._onMouseClick, this);
+ }
+
+
+});
+
+/* **********************************************
+ Begin TL.StorySlider.js
+********************************************** */
+
+/* StorySlider
+ is the central class of the API - it is used to create a StorySlider
+
+ Events:
+ nav_next
+ nav_previous
+ slideDisplayUpdate
+ loaded
+ slideAdded
+ slideLoaded
+ slideRemoved
+
+
+================================================== */
+
+TL.StorySlider = TL.Class.extend({
+
+ includes: [TL.Events, TL.I18NMixins],
+
+ /* Private Methods
+ ================================================== */
+ initialize: function (elem, data, options, init) {
+
+ // DOM ELEMENTS
+ this._el = {
+ container: {},
+ background: {},
+ slider_container_mask: {},
+ slider_container: {},
+ slider_item_container: {}
+ };
+
+ this._nav = {};
+ this._nav.previous = {};
+ this._nav.next = {};
+
+ // Slide Spacing
+ this.slide_spacing = 0;
+
+ // Slides Array
+ this._slides = [];
+
+ // Swipe Object
+ this._swipable;
+
+ // Preload Timer
+ this.preloadTimer;
+
+ // Message
+ this._message;
+
+ // Current Slide
+ this.current_id = '';
+
+ // Data Object
+ this.data = {};
+
+ this.options = {
+ id: "",
+ layout: "portrait",
+ width: 600,
+ height: 600,
+ default_bg_color: {r:255, g:255, b:255},
+ slide_padding_lr: 40, // padding on slide of slide
+ start_at_slide: 1,
+ slide_default_fade: "0%", // landscape fade
+ // animation
+ duration: 1000,
+ ease: TL.Ease.easeInOutQuint,
+ // interaction
+ dragging: true,
+ trackResize: true
+ };
+
+ // Main element ID
+ if (typeof elem === 'object') {
+ this._el.container = elem;
+ this.options.id = TL.Util.unique_ID(6, "tl");
+ } else {
+ this.options.id = elem;
+ this._el.container = TL.Dom.get(elem);
+ }
+
+ if (!this._el.container.id) {
+ this._el.container.id = this.options.id;
+ }
+
+ // Animation Object
+ this.animator = null;
+
+ // Merge Data and Options
+ TL.Util.mergeData(this.options, options);
+ TL.Util.mergeData(this.data, data);
+
+ if (init) {
+ this.init();
+ }
+ },
+
+ init: function() {
+ this._initLayout();
+ this._initEvents();
+ this._initData();
+ this._updateDisplay();
+
+ // Go to initial slide
+ this.goTo(this.options.start_at_slide);
+
+ this._onLoaded();
+ },
+
+ /* Slides
+ ================================================== */
+ _addSlide:function(slide) {
+ slide.addTo(this._el.slider_item_container);
+ slide.on('added', this._onSlideAdded, this);
+ slide.on('background_change', this._onBackgroundChange, this);
+ },
+
+ _createSlide: function(d, title_slide, n) {
+ var slide = new TL.Slide(d, this.options, title_slide);
+ this._addSlide(slide);
+ if(n < 0) {
+ this._slides.push(slide);
+ } else {
+ this._slides.splice(n, 0, slide);
+ }
+ },
+
+ _createSlides: function(array) {
+ for (var i = 0; i < array.length; i++) {
+ if (array[i].unique_id == "") {
+ array[i].unique_id = TL.Util.unique_ID(6, "tl-slide");
+ }
+ this._createSlide(array[i], false, -1);
+ }
+ },
+
+ _removeSlide: function(slide) {
+ slide.removeFrom(this._el.slider_item_container);
+ slide.off('added', this._onSlideRemoved, this);
+ slide.off('background_change', this._onBackgroundChange);
+ },
+
+ _destroySlide: function(n) {
+ this._removeSlide(this._slides[n]);
+ this._slides.splice(n, 1);
+ },
+
+ _findSlideIndex: function(n) {
+ var _n = n;
+ if (typeof n == 'string' || n instanceof String) {
+ _n = TL.Util.findArrayNumberByUniqueID(n, this._slides, "unique_id");
+ }
+ return _n;
+ },
+
+ /* Public
+ ================================================== */
+ updateDisplay: function(w, h, a, l) {
+ this._updateDisplay(w, h, a, l);
+ },
+
+ // Create a slide
+ createSlide: function(d, n) {
+ this._createSlide(d, false, n);
+ },
+
+ // Create Many Slides from an array
+ createSlides: function(array) {
+ this._createSlides(array);
+ },
+
+ // Destroy slide by index
+ destroySlide: function(n) {
+ this._destroySlide(n);
+ },
+
+ // Destroy slide by id
+ destroySlideId: function(id) {
+ this.destroySlide(this._findSlideIndex(id));
+ },
+
+ /* Navigation
+ ================================================== */
+ goTo: function(n, fast, displayupdate) {
+ n = parseInt(n);
+ if (isNaN(n)) n = 0;
+
+ var self = this;
+
+ this.changeBackground({color_value:"", image:false});
+
+ // Clear Preloader Timer
+ if (this.preloadTimer) {
+ clearTimeout(this.preloadTimer);
+ }
+
+ // Set Slide Active State
+ for (var i = 0; i < this._slides.length; i++) {
+ this._slides[i].setActive(false);
+ }
+
+ if (n < this._slides.length && n >= 0) {
+ this.current_id = this._slides[n].data.unique_id;
+
+ // Stop animation
+ if (this.animator) {
+ this.animator.stop();
+ }
+ if (this._swipable) {
+ this._swipable.stopMomentum();
+ }
+
+ if (fast) {
+ this._el.slider_container.style.left = -(this.slide_spacing * n) + "px";
+ this._onSlideChange(displayupdate);
+ } else {
+ this.animator = TL.Animate(this._el.slider_container, {
+ left: -(this.slide_spacing * n) + "px",
+ duration: this.options.duration,
+ easing: this.options.ease,
+ complete: this._onSlideChange(displayupdate)
+ });
+ }
+
+ // Set Slide Active State
+ this._slides[n].setActive(true);
+
+ // Update Navigation and Info
+ if (this._slides[n + 1]) {
+ this.showNav(this._nav.next, true);
+ this._nav.next.update(this._slides[n + 1]);
+ } else {
+ this.showNav(this._nav.next, false);
+ }
+ if (this._slides[n - 1]) {
+ this.showNav(this._nav.previous, true);
+ this._nav.previous.update(this._slides[n - 1]);
+ } else {
+ this.showNav(this._nav.previous, false);
+ }
+
+ // Preload Slides
+ this.preloadTimer = setTimeout(function() {
+ self.preloadSlides(n);
+ }, this.options.duration);
+ }
+ },
+
+ goToId: function(id, fast, displayupdate) {
+ this.goTo(this._findSlideIndex(id), fast, displayupdate);
+ },
+
+ preloadSlides: function(n) {
+ if (this._slides[n + 1]) {
+ this._slides[n + 1].loadMedia();
+ this._slides[n + 1].scrollToTop();
+ }
+ if (this._slides[n + 2]) {
+ this._slides[n + 2].loadMedia();
+ this._slides[n + 2].scrollToTop();
+ }
+ if (this._slides[n - 1]) {
+ this._slides[n - 1].loadMedia();
+ this._slides[n - 1].scrollToTop();
+ }
+ if (this._slides[n - 2]) {
+ this._slides[n - 2].loadMedia();
+ this._slides[n - 2].scrollToTop();
+ }
+ },
+
+ next: function() {
+ var n = this._findSlideIndex(this.current_id);
+ if ((n + 1) < (this._slides.length)) {
+ this.goTo(n + 1);
+ } else {
+ this.goTo(n);
+ }
+ },
+
+ previous: function() {
+ var n = this._findSlideIndex(this.current_id);
+ if (n - 1 >= 0) {
+ this.goTo(n - 1);
+ } else {
+ this.goTo(n);
+ }
+ },
+
+ showNav: function(nav_obj, show) {
+
+ if (this.options.width <= 500 && TL.Browser.mobile) {
+
+ } else {
+ if (show) {
+ nav_obj.show();
+ } else {
+ nav_obj.hide();
+ }
+
+ }
+ },
+
+
+
+ changeBackground: function(bg) {
+ var bg_color = {r:256, g:256, b:256},
+ bg_color_rgb;
+
+ if (bg.color_value && bg.color_value != "") {
+ bg_color = TL.Util.hexToRgb(bg.color_value);
+ if (!bg_color) {
+ trace("Invalid color value " + bg.color_value);
+ bg_color = this.options.default_bg_color;
+ }
+ } else {
+ bg_color = this.options.default_bg_color;
+ bg.color_value = "rgb(" + bg_color.r + " , " + bg_color.g + ", " + bg_color.b + ")";
+ }
+
+ bg_color_rgb = bg_color.r + "," + bg_color.g + "," + bg_color.b;
+ this._el.background.style.backgroundImage = "none";
+
+
+ if (bg.color_value) {
+ this._el.background.style.backgroundColor = bg.color_value;
+ } else {
+ this._el.background.style.backgroundColor = "transparent";
+ }
+
+ if (bg_color.r < 255 || bg_color.g < 255 || bg_color.b < 255 || bg.image) {
+ this._nav.next.setColor(true);
+ this._nav.previous.setColor(true);
+ } else {
+ this._nav.next.setColor(false);
+ this._nav.previous.setColor(false);
+ }
+ },
+ /* Private Methods
+ ================================================== */
+
+ // Update Display
+ _updateDisplay: function(width, height, animate, layout) {
+ var nav_pos, _layout;
+
+ if(typeof layout === 'undefined'){
+ _layout = this.options.layout;
+ } else {
+ _layout = layout;
+ }
+
+ this.options.layout = _layout;
+
+ this.slide_spacing = this.options.width*2;
+
+ if (width) {
+ this.options.width = width;
+ } else {
+ this.options.width = this._el.container.offsetWidth;
+ }
+
+ if (height) {
+ this.options.height = height;
+ } else {
+ this.options.height = this._el.container.offsetHeight;
+ }
+
+ //this._el.container.style.height = this.options.height;
+
+ // position navigation
+ nav_pos = (this.options.height/2);
+ this._nav.next.setPosition({top:nav_pos});
+ this._nav.previous.setPosition({top:nav_pos});
+
+
+ // Position slides
+ for (var i = 0; i < this._slides.length; i++) {
+ this._slides[i].updateDisplay(this.options.width, this.options.height, _layout);
+ this._slides[i].setPosition({left:(this.slide_spacing * i), top:0});
+
+ };
+
+ // Go to the current slide
+ this.goToId(this.current_id, true, true);
+ },
+
+ // Reposition and redraw slides
+ _updateDrawSlides: function() {
+ var _layout = this.options.layout;
+
+ for (var i = 0; i < this._slides.length; i++) {
+ this._slides[i].updateDisplay(this.options.width, this.options.height, _layout);
+ this._slides[i].setPosition({left:(this.slide_spacing * i), top:0});
+ };
+
+ this.goToId(this.current_id, true, false);
+ },
+
+
+ /* Init
+ ================================================== */
+ _initLayout: function () {
+
+ TL.DomUtil.addClass(this._el.container, 'tl-storyslider');
+
+ // Create Layout
+ this._el.slider_container_mask = TL.Dom.create('div', 'tl-slider-container-mask', this._el.container);
+ this._el.background = TL.Dom.create('div', 'tl-slider-background tl-animate', this._el.container);
+ this._el.slider_container = TL.Dom.create('div', 'tl-slider-container tlanimate', this._el.slider_container_mask);
+ this._el.slider_item_container = TL.Dom.create('div', 'tl-slider-item-container', this._el.slider_container);
+
+
+ // Update Size
+ this.options.width = this._el.container.offsetWidth;
+ this.options.height = this._el.container.offsetHeight;
+
+ // Create Navigation
+ this._nav.previous = new TL.SlideNav({title: "Previous", description: "description"}, {direction:"previous"});
+ this._nav.next = new TL.SlideNav({title: "Next",description: "description"}, {direction:"next"});
+
+ // add the navigation to the dom
+ this._nav.next.addTo(this._el.container);
+ this._nav.previous.addTo(this._el.container);
+
+
+
+ this._el.slider_container.style.left="0px";
+
+ if (TL.Browser.touch) {
+ //this._el.slider_touch_mask = TL.Dom.create('div', 'tl-slider-touch-mask', this._el.slider_container_mask);
+ this._swipable = new TL.Swipable(this._el.slider_container_mask, this._el.slider_container, {
+ enable: {x:true, y:false},
+ snap: true
+ });
+ this._swipable.enable();
+
+ // Message
+ this._message = new TL.Message({}, {
+ message_class: "tl-message-full",
+ message_icon_class: "tl-icon-swipe-left"
+ });
+ this._message.updateMessage(this._("swipe_to_navigate"));
+ this._message.addTo(this._el.container);
+ }
+
+ },
+
+ _initEvents: function () {
+ this._nav.next.on('clicked', this._onNavigation, this);
+ this._nav.previous.on('clicked', this._onNavigation, this);
+
+ if (this._message) {
+ this._message.on('clicked', this._onMessageClick, this);
+ }
+
+ if (this._swipable) {
+ this._swipable.on('swipe_left', this._onNavigation, this);
+ this._swipable.on('swipe_right', this._onNavigation, this);
+ this._swipable.on('swipe_nodirection', this._onSwipeNoDirection, this);
+ }
+
+
+ },
+
+ _initData: function() {
+ if(this.data.title) {
+ this._createSlide(this.data.title, true, -1);
+ }
+ this._createSlides(this.data.events);
+ },
+
+ /* Events
+ ================================================== */
+ _onBackgroundChange: function(e) {
+ var n = this._findSlideIndex(this.current_id);
+ var slide_background = this._slides[n].getBackground();
+ this.changeBackground(e);
+ this.fire("colorchange", slide_background);
+ },
+
+ _onMessageClick: function(e) {
+ this._message.hide();
+ },
+
+ _onSwipeNoDirection: function(e) {
+ this.goToId(this.current_id);
+ },
+
+ _onNavigation: function(e) {
+
+ if (e.direction == "next" || e.direction == "left") {
+ this.next();
+ } else if (e.direction == "previous" || e.direction == "right") {
+ this.previous();
+ }
+ this.fire("nav_" + e.direction, this.data);
+ },
+
+ _onSlideAdded: function(e) {
+ trace("slideadded")
+ this.fire("slideAdded", this.data);
+ },
+
+ _onSlideRemoved: function(e) {
+ this.fire("slideRemoved", this.data);
+ },
+
+ _onSlideChange: function(displayupdate) {
+ if (!displayupdate) {
+ this.fire("change", {unique_id: this.current_id});
+ }
+ },
+
+ _onMouseClick: function(e) {
+
+ },
+
+ _fireMouseEvent: function (e) {
+ if (!this._loaded) {
+ return;
+ }
+
+ var type = e.type;
+ type = (type === 'mouseenter' ? 'mouseover' : (type === 'mouseleave' ? 'mouseout' : type));
+
+ if (!this.hasEventListeners(type)) {
+ return;
+ }
+
+ if (type === 'contextmenu') {
+ TL.DomEvent.preventDefault(e);
+ }
+
+ this.fire(type, {
+ latlng: "something", //this.mouseEventToLatLng(e),
+ layerPoint: "something else" //this.mouseEventToLayerPoint(e)
+ });
+ },
+
+ _onLoaded: function() {
+ this.fire("loaded", this.data);
+ }
+
+
+});
+
+
+/* **********************************************
+ Begin TL.TimeNav.js
+********************************************** */
+
+/* TL.TimeNav
+
+================================================== */
+
+TL.TimeNav = TL.Class.extend({
+
+ includes: [TL.Events, TL.DomMixins],
+
+ _el: {},
+
+ /* Constructor
+ ================================================== */
+ initialize: function (elem, timeline_config, options, init) {
+ // DOM ELEMENTS
+ this._el = {
+ parent: {},
+ container: {},
+ slider: {},
+ slider_background: {},
+ line: {},
+ marker_container_mask: {},
+ marker_container: {},
+ marker_item_container: {},
+ timeaxis: {},
+ timeaxis_background: {},
+ attribution: {}
+ };
+
+ this.collapsed = false;
+
+ if (typeof elem === 'object') {
+ this._el.container = elem;
+ } else {
+ this._el.container = TL.Dom.get(elem);
+ }
+
+ this.config = timeline_config;
+
+ //Options
+ this.options = {
+ width: 600,
+ height: 600,
+ duration: 1000,
+ ease: TL.Ease.easeInOutQuint,
+ has_groups: false,
+ optimal_tick_width: 50,
+ scale_factor: 2, // How many screen widths wide should the timeline be
+ marker_padding: 5,
+ timenav_height_min: 150, // Minimum timenav height
+ marker_height_min: 30, // Minimum Marker Height
+ marker_width_min: 100, // Minimum Marker Width
+ zoom_sequence: [0.5, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] // Array of Fibonacci numbers for TimeNav zoom levels http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibtable.html
+ };
+
+ // Animation
+ this.animator = null;
+
+ // Ready state
+ this.ready = false;
+
+ // Markers Array
+ this._markers = [];
+
+ // Eras Array
+ this._eras = [];
+ this.has_eras = false;
+
+ // Groups Array
+ this._groups = [];
+
+ // Row Height
+ this._calculated_row_height = 100;
+
+ // Current Marker
+ this.current_id = "";
+
+ // TimeScale
+ this.timescale = {};
+
+ // TimeAxis
+ this.timeaxis = {};
+ this.axishelper = {};
+
+ // Max Rows
+ this.max_rows = 6;
+
+ // Animate CSS
+ this.animate_css = false;
+
+ // Swipe Object
+ this._swipable;
+
+ // Merge Data and Options
+ TL.Util.mergeData(this.options, options);
+
+ if (init) {
+ this.init();
+ }
+ },
+
+ init: function() {
+ this._initLayout();
+ this._initEvents();
+ this._initData();
+ this._updateDisplay();
+
+ this._onLoaded();
+ },
+
+ /* Public
+ ================================================== */
+ positionMarkers: function() {
+ this._positionMarkers();
+ },
+
+ /* Update Display
+ ================================================== */
+ updateDisplay: function(w, h, a, l) {
+ this._updateDisplay(w, h, a, l);
+ },
+
+
+ /* TimeScale
+ ================================================== */
+ _getTimeScale: function() {
+ /* maybe the establishing config values (marker_height_min and max_rows) should be
+ separated from making a TimeScale object, which happens in another spot in this file with duplicate mapping of properties of this TimeNav into the TimeScale options object? */
+ // Set Max Rows
+ var marker_height_min = 0;
+ try {
+ marker_height_min = parseInt(this.options.marker_height_min);
+ } catch(e) {
+ trace("Invalid value for marker_height_min option.");
+ marker_height_min = 30;
+ }
+ if (marker_height_min == 0) {
+ trace("marker_height_min option must not be zero.")
+ marker_height_min = 30;
+ }
+ this.max_rows = Math.round((this.options.height - this._el.timeaxis_background.offsetHeight - (this.options.marker_padding)) / marker_height_min);
+ if (this.max_rows < 1) {
+ this.max_rows = 1;
+ }
+ return new TL.TimeScale(this.config, {
+ display_width: this._el.container.offsetWidth,
+ screen_multiplier: this.options.scale_factor,
+ max_rows: this.max_rows
+
+ });
+ },
+
+ _updateTimeScale: function(new_scale) {
+ this.options.scale_factor = new_scale;
+ this._updateDrawTimeline();
+ },
+
+ zoomIn: function() { // move the the next "higher" scale factor
+ var new_scale = TL.Util.findNextGreater(this.options.zoom_sequence, this.options.scale_factor);
+ this.setZoomFactor(new_scale);
+ },
+
+ zoomOut: function() { // move the the next "lower" scale factor
+ var new_scale = TL.Util.findNextLesser(this.options.zoom_sequence, this.options.scale_factor);
+ this.setZoomFactor(new_scale);
+ },
+
+ setZoom: function(level) {
+ var zoom_factor = this.options.zoom_sequence[level];
+ if (typeof(zoom_factor) == 'number') {
+ this.setZoomFactor(zoom_factor);
+ } else {
+ console.warn("Invalid zoom level. Please use an index number between 0 and " + (this.options.zoom_sequence.length - 1));
+ }
+ },
+
+ setZoomFactor: function(factor) {
+ if (factor <= this.options.zoom_sequence[0]) {
+ this.fire("zoomtoggle", {zoom:"out", show:false});
+ } else {
+ this.fire("zoomtoggle", {zoom:"out", show:true});
+ }
+
+ if (factor >= this.options.zoom_sequence[this.options.zoom_sequence.length-1]) {
+ this.fire("zoomtoggle", {zoom:"in", show:false});
+ } else {
+ this.fire("zoomtoggle", {zoom:"in", show:true});
+ }
+
+ if (factor == 0) {
+ console.warn("Zoom factor must be greater than zero. Using 0.1");
+ factor = 0.1;
+ }
+ this.options.scale_factor = factor;
+ //this._updateDrawTimeline(true);
+ this.goToId(this.current_id, !this._updateDrawTimeline(true), true);
+ },
+
+ /* Groups
+ ================================================== */
+ _createGroups: function() {
+ this._groups = [];
+ var group_labels = this.timescale.getGroupLabels();
+
+ if (group_labels) {
+ this.options.has_groups = true;
+ for (var i = 0; i < group_labels.length; i++) {
+ this._createGroup(group_labels[i]);
+ }
+ }
+
+ },
+
+ _createGroup: function(group_label) {
+ var group = new TL.TimeGroup(group_label);
+ this._addGroup(group);
+ this._groups.push(group);
+ },
+
+ _addGroup:function(group) {
+ group.addTo(this._el.container);
+
+ },
+
+ _positionGroups: function() {
+ if (this.options.has_groups) {
+ var available_height = (this.options.height - this._el.timeaxis_background.offsetHeight ),
+ group_height = Math.floor((available_height /this.timescale.getNumberOfRows()) - this.options.marker_padding),
+ group_labels = this.timescale.getGroupLabels();
+
+ for (var i = 0, group_rows = 0; i < this._groups.length; i++) {
+ var group_y = Math.floor(group_rows * (group_height + this.options.marker_padding));
+ var group_hide = false;
+ if (group_y > (available_height- this.options.marker_padding)) {
+ group_hide = true;
+ }
+
+ this._groups[i].setRowPosition(group_y, this._calculated_row_height + this.options.marker_padding/2);
+ this._groups[i].setAlternateRowColor(TL.Util.isEven(i), group_hide);
+
+ group_rows += this._groups[i].data.rows; // account for groups spanning multiple rows
+ }
+ }
+ },
+
+ /* Markers
+ ================================================== */
+ _addMarker:function(marker) {
+ marker.addTo(this._el.marker_item_container);
+ marker.on('markerclick', this._onMarkerClick, this);
+ marker.on('added', this._onMarkerAdded, this);
+ },
+
+ _createMarker: function(data, n) {
+ var marker = new TL.TimeMarker(data, this.options);
+ this._addMarker(marker);
+ if(n < 0) {
+ this._markers.push(marker);
+ } else {
+ this._markers.splice(n, 0, marker);
+ }
+ },
+
+ _createMarkers: function(array) {
+ for (var i = 0; i < array.length; i++) {
+ this._createMarker(array[i], -1);
+ }
+ },
+
+ _removeMarker: function(marker) {
+ marker.removeFrom(this._el.marker_item_container);
+ //marker.off('added', this._onMarkerRemoved, this);
+ },
+
+ _destroyMarker: function(n) {
+ this._removeMarker(this._markers[n]);
+ this._markers.splice(n, 1);
+ },
+
+ _positionMarkers: function(fast) {
+ // POSITION X
+ for (var i = 0; i < this._markers.length; i++) {
+ var pos = this.timescale.getPositionInfo(i);
+ if (fast) {
+ this._markers[i].setClass("tl-timemarker tl-timemarker-fast");
+ } else {
+ this._markers[i].setClass("tl-timemarker");
+ }
+ this._markers[i].setPosition({left:pos.start});
+ this._markers[i].setWidth(pos.width);
+ };
+
+ },
+
+ _calculateMarkerHeight: function(h) {
+ return ((h /this.timescale.getNumberOfRows()) - this.options.marker_padding);
+ },
+
+ _calculateRowHeight: function(h) {
+ return (h /this.timescale.getNumberOfRows());
+ },
+
+ _calculateAvailableHeight: function() {
+ return (this.options.height - this._el.timeaxis_background.offsetHeight - (this.options.marker_padding));
+ },
+
+ _calculateMinimumTimeNavHeight: function() {
+ return (this.timescale.getNumberOfRows() * this.options.marker_height_min) + this._el.timeaxis_background.offsetHeight + (this.options.marker_padding);
+
+ },
+
+ getMinimumHeight: function() {
+ return this._calculateMinimumTimeNavHeight();
+ },
+
+ _assignRowsToMarkers: function() {
+ var available_height = this._calculateAvailableHeight(),
+ marker_height = this._calculateMarkerHeight(available_height);
+
+
+ this._positionGroups();
+
+ this._calculated_row_height = this._calculateRowHeight(available_height);
+
+ for (var i = 0; i < this._markers.length; i++) {
+
+ // Set Height
+ this._markers[i].setHeight(marker_height);
+
+ //Position by Row
+ var row = this.timescale.getPositionInfo(i).row;
+
+ var marker_y = Math.floor(row * (marker_height + this.options.marker_padding)) + this.options.marker_padding;
+
+ var remainder_height = available_height - marker_y + this.options.marker_padding;
+ this._markers[i].setRowPosition(marker_y, remainder_height);
+ };
+
+ },
+
+ _resetMarkersActive: function() {
+ for (var i = 0; i < this._markers.length; i++) {
+ this._markers[i].setActive(false);
+ };
+ },
+
+ _findMarkerIndex: function(n) {
+ var _n = -1;
+ if (typeof n == 'string' || n instanceof String) {
+ _n = TL.Util.findArrayNumberByUniqueID(n, this._markers, "unique_id", _n);
+ }
+ return _n;
+ },
+
+ /* ERAS
+ ================================================== */
+ _createEras: function(array) {
+ for (var i = 0; i < array.length; i++) {
+ this._createEra(array[i], -1);
+ }
+ },
+
+ _createEra: function(data, n) {
+ var era = new TL.TimeEra(data, this.options);
+ this._addEra(era);
+ if(n < 0) {
+ this._eras.push(era);
+ } else {
+ this._eras.splice(n, 0, era);
+ }
+ },
+
+ _addEra:function(era) {
+ era.addTo(this._el.marker_item_container);
+ era.on('added', this._onEraAdded, this);
+ },
+
+ _removeEra: function(era) {
+ era.removeFrom(this._el.marker_item_container);
+ //marker.off('added', this._onMarkerRemoved, this);
+ },
+
+ _destroyEra: function(n) {
+ this._removeEra(this._eras[n]);
+ this._eras.splice(n, 1);
+ },
+
+ _positionEras: function(fast) {
+
+ var era_color = 0;
+ // POSITION X
+ for (var i = 0; i < this._eras.length; i++) {
+ var pos = {
+ start:0,
+ end:0,
+ width:0
+ };
+
+ pos.start = this.timescale.getPosition(this._eras[i].data.start_date.getTime());
+ pos.end = this.timescale.getPosition(this._eras[i].data.end_date.getTime());
+ pos.width = pos.end - pos.start;
+
+ if (fast) {
+ this._eras[i].setClass("tl-timeera tl-timeera-fast");
+ } else {
+ this._eras[i].setClass("tl-timeera");
+ }
+ this._eras[i].setPosition({left:pos.start});
+ this._eras[i].setWidth(pos.width);
+
+ era_color++;
+ if (era_color > 5) {
+ era_color = 0;
+ }
+ this._eras[i].setColor(era_color);
+ };
+
+ },
+
+ /* Public
+ ================================================== */
+
+ // Create a marker
+ createMarker: function(d, n) {
+ this._createMarker(d, n);
+ },
+
+ // Create many markers from an array
+ createMarkers: function(array) {
+ this._createMarkers(array);
+ },
+
+ // Destroy marker by index
+ destroyMarker: function(n) {
+ this._destroyMarker(n);
+ },
+
+ // Destroy marker by id
+ destroyMarkerId: function(id) {
+ this.destroyMarker(this._findMarkerIndex(id));
+ },
+
+ /* Navigation
+ ================================================== */
+ goTo: function(n, fast, css_animation) {
+ var self = this,
+ _ease = this.options.ease,
+ _duration = this.options.duration,
+ _n = (n < 0) ? 0 : n;
+
+ // Set Marker active state
+ this._resetMarkersActive();
+ if(n >= 0 && n < this._markers.length) {
+ this._markers[n].setActive(true);
+ }
+ // Stop animation
+ if (this.animator) {
+ this.animator.stop();
+ }
+
+ if (fast) {
+ this._el.slider.className = "tl-timenav-slider";
+ this._el.slider.style.left = -this._markers[_n].getLeft() + (this.options.width/2) + "px";
+ } else {
+ if (css_animation) {
+ this._el.slider.className = "tl-timenav-slider tl-timenav-slider-animate";
+ this.animate_css = true;
+ this._el.slider.style.left = -this._markers[_n].getLeft() + (this.options.width/2) + "px";
+ } else {
+ this._el.slider.className = "tl-timenav-slider";
+ this.animator = TL.Animate(this._el.slider, {
+ left: -this._markers[_n].getLeft() + (this.options.width/2) + "px",
+ duration: _duration,
+ easing: _ease
+ });
+ }
+ }
+
+ if(n >= 0 && n < this._markers.length) {
+ this.current_id = this._markers[n].data.unique_id;
+ } else {
+ this.current_id = '';
+ }
+ },
+
+ goToId: function(id, fast, css_animation) {
+ this.goTo(this._findMarkerIndex(id), fast, css_animation);
+ },
+
+ /* Events
+ ================================================== */
+ _onLoaded: function() {
+ this.ready = true;
+ this.fire("loaded", this.config);
+ },
+
+ _onMarkerAdded: function(e) {
+ this.fire("dateAdded", this.config);
+ },
+
+ _onEraAdded: function(e) {
+ this.fire("eraAdded", this.config);
+ },
+
+ _onMarkerRemoved: function(e) {
+ this.fire("dateRemoved", this.config);
+ },
+
+ _onMarkerClick: function(e) {
+ // Go to the clicked marker
+ this.goToId(e.unique_id);
+ this.fire("change", {unique_id: e.unique_id});
+ },
+
+ _onMouseScroll: function(e) {
+
+ var delta = 0,
+ scroll_to = 0,
+ constraint = {
+ right: -(this.timescale.getPixelWidth() - (this.options.width/2)),
+ left: this.options.width/2
+ };
+ if (!e) {
+ e = window.event;
+ }
+ if (e.originalEvent) {
+ e = e.originalEvent;
+ }
+
+ // Webkit and browsers able to differntiate between up/down and left/right scrolling
+ if (typeof e.wheelDeltaX != 'undefined' ) {
+ delta = e.wheelDeltaY/6;
+ if (Math.abs(e.wheelDeltaX) > Math.abs(e.wheelDeltaY)) {
+ delta = e.wheelDeltaX/6;
+ } else {
+ //delta = e.wheelDeltaY/6;
+ delta = 0;
+ }
+ }
+ if (delta) {
+ if (e.preventDefault) {
+ e.preventDefault();
+ }
+ e.returnValue = false;
+ }
+ // Stop from scrolling too far
+ scroll_to = parseInt(this._el.slider.style.left.replace("px", "")) + delta;
+
+
+ if (scroll_to > constraint.left) {
+ scroll_to = constraint.left;
+ } else if (scroll_to < constraint.right) {
+ scroll_to = constraint.right;
+ }
+
+ if (this.animate_css) {
+ this._el.slider.className = "tl-timenav-slider";
+ this.animate_css = false;
+ }
+
+ this._el.slider.style.left = scroll_to + "px";
+
+ },
+
+ _onDragMove: function(e) {
+ if (this.animate_css) {
+ this._el.slider.className = "tl-timenav-slider";
+ this.animate_css = false;
+ }
+
+ },
+
+ /* Private Methods
+ ================================================== */
+ // Update Display
+ _updateDisplay: function(width, height, animate) {
+
+ if (width) {
+ this.options.width = width;
+ }
+ if (height && height != this.options.height) {
+ this.options.height = height;
+ this.timescale = this._getTimeScale();
+ }
+
+ // Size Markers
+ this._assignRowsToMarkers();
+
+ // Size swipable area
+ this._el.slider_background.style.width = this.timescale.getPixelWidth() + this.options.width + "px";
+ this._el.slider_background.style.left = -(this.options.width/2) + "px";
+ this._el.slider.style.width = this.timescale.getPixelWidth() + this.options.width + "px";
+
+ // Update Swipable constraint
+ this._swipable.updateConstraint({top: false,bottom: false,left: (this.options.width/2),right: -(this.timescale.getPixelWidth() - (this.options.width/2))});
+
+ // Go to the current slide
+ this.goToId(this.current_id, true);
+ },
+
+ _drawTimeline: function(fast) {
+ this.timescale = this._getTimeScale();
+ this.timeaxis.drawTicks(this.timescale, this.options.optimal_tick_width);
+ this._positionMarkers(fast);
+ this._assignRowsToMarkers();
+ this._createGroups();
+ this._positionGroups();
+
+ if (this.has_eras) {
+
+ this._positionEras(fast);
+ }
+ },
+
+ _updateDrawTimeline: function(check_update) {
+ var do_update = false;
+
+ // Check to see if redraw is needed
+ if (check_update) {
+ /* keep this aligned with _getTimeScale or reduce code duplication */
+ var temp_timescale = new TL.TimeScale(this.config, {
+ display_width: this._el.container.offsetWidth,
+ screen_multiplier: this.options.scale_factor,
+ max_rows: this.max_rows
+
+ });
+
+ if (this.timescale.getMajorScale() == temp_timescale.getMajorScale()
+ && this.timescale.getMinorScale() == temp_timescale.getMinorScale()) {
+ do_update = true;
+ }
+ } else {
+ do_update = true;
+ }
+
+ // Perform update or redraw
+ if (do_update) {
+ this.timescale = this._getTimeScale();
+ this.timeaxis.positionTicks(this.timescale, this.options.optimal_tick_width);
+ this._positionMarkers();
+ this._assignRowsToMarkers();
+ this._positionGroups();
+ if (this.has_eras) {
+ this._positionEras();
+ }
+ this._updateDisplay();
+ } else {
+ this._drawTimeline(true);
+ }
+
+ return do_update;
+
+ },
+
+
+ /* Init
+ ================================================== */
+ _initLayout: function () {
+ // Create Layout
+ this._el.attribution = TL.Dom.create('div', 'tl-attribution', this._el.container);
+ this._el.line = TL.Dom.create('div', 'tl-timenav-line', this._el.container);
+ this._el.slider = TL.Dom.create('div', 'tl-timenav-slider', this._el.container);
+ this._el.slider_background = TL.Dom.create('div', 'tl-timenav-slider-background', this._el.slider);
+ this._el.marker_container_mask = TL.Dom.create('div', 'tl-timenav-container-mask', this._el.slider);
+ this._el.marker_container = TL.Dom.create('div', 'tl-timenav-container', this._el.marker_container_mask);
+ this._el.marker_item_container = TL.Dom.create('div', 'tl-timenav-item-container', this._el.marker_container);
+ this._el.timeaxis = TL.Dom.create('div', 'tl-timeaxis', this._el.slider);
+ this._el.timeaxis_background = TL.Dom.create('div', 'tl-timeaxis-background', this._el.container);
+
+
+ // Knight Lab Logo
+ this._el.attribution.innerHTML = "<a href='http://timeline.knightlab.com' target='_blank'><span class='tl-knightlab-logo'></span>Timeline JS</a>"
+
+ // Time Axis
+ this.timeaxis = new TL.TimeAxis(this._el.timeaxis, this.options);
+
+ // Swipable
+ this._swipable = new TL.Swipable(this._el.slider_background, this._el.slider, {
+ enable: {x:true, y:false},
+ constraint: {top: false,bottom: false,left: (this.options.width/2),right: false},
+ snap: false
+ });
+ this._swipable.enable();
+
+ },
+
+ _initEvents: function () {
+ // Drag Events
+ this._swipable.on('dragmove', this._onDragMove, this);
+
+ // Scroll Events
+ TL.DomEvent.addListener(this._el.container, 'mousewheel', this._onMouseScroll, this);
+ TL.DomEvent.addListener(this._el.container, 'DOMMouseScroll', this._onMouseScroll, this);
+ },
+
+ _initData: function() {
+ // Create Markers and then add them
+ this._createMarkers(this.config.events);
+
+ if (this.config.eras) {
+ this.has_eras = true;
+ this._createEras(this.config.eras);
+ }
+
+ this._drawTimeline();
+
+ }
+
+
+});
+
+
+/* **********************************************
+ Begin TL.TimeMarker.js
+********************************************** */
+
+/* TL.TimeMarker
+
+================================================== */
+
+TL.TimeMarker = TL.Class.extend({
+
+ includes: [TL.Events, TL.DomMixins],
+
+ _el: {},
+
+ /* Constructor
+ ================================================== */
+ initialize: function(data, options) {
+
+ // DOM Elements
+ this._el = {
+ container: {},
+ content_container: {},
+ media_container: {},
+ timespan: {},
+ line_left: {},
+ line_right: {},
+ content: {},
+ text: {},
+ media: {},
+ };
+
+ // Components
+ this._text = {};
+
+ // State
+ this._state = {
+ loaded: false
+ };
+
+
+ // Data
+ this.data = {
+ unique_id: "",
+ background: null,
+ date: {
+ year: 0,
+ month: 0,
+ day: 0,
+ hour: 0,
+ minute: 0,
+ second: 0,
+ millisecond: 0,
+ thumbnail: "",
+ format: ""
+ },
+ text: {
+ headline: "",
+ text: ""
+ },
+ media: null
+ };
+
+ // Options
+ this.options = {
+ duration: 1000,
+ ease: TL.Ease.easeInSpline,
+ width: 600,
+ height: 600,
+ marker_width_min: 100 // Minimum Marker Width
+ };
+
+ // Actively Displaying
+ this.active = false;
+
+ // Animation Object
+ this.animator = {};
+
+ // End date
+ this.has_end_date = false;
+
+ // Merge Data and Options
+ TL.Util.mergeData(this.options, options);
+ TL.Util.mergeData(this.data, data);
+
+ this._initLayout();
+ this._initEvents();
+
+
+ },
+
+ /* Adding, Hiding, Showing etc
+ ================================================== */
+ show: function() {
+
+ },
+
+ hide: function() {
+
+ },
+
+ setActive: function(is_active) {
+ this.active = is_active;
+
+ if (this.active && this.has_end_date) {
+ this._el.container.className = 'tl-timemarker tl-timemarker-with-end tl-timemarker-active';
+ } else if (this.active){
+ this._el.container.className = 'tl-timemarker tl-timemarker-active';
+ } else if (this.has_end_date){
+ this._el.container.className = 'tl-timemarker tl-timemarker-with-end';
+ } else {
+ this._el.container.className = 'tl-timemarker';
+ }
+ },
+
+ addTo: function(container) {
+ container.appendChild(this._el.container);
+ },
+
+ removeFrom: function(container) {
+ container.removeChild(this._el.container);
+ },
+
+ updateDisplay: function(w, h) {
+ this._updateDisplay(w, h);
+ },
+
+ loadMedia: function() {
+
+ if (this._media && !this._state.loaded) {
+ this._media.loadMedia();
+ this._state.loaded = true;
+ }
+ },
+
+ stopMedia: function() {
+ if (this._media && this._state.loaded) {
+ this._media.stopMedia();
+ }
+ },
+
+ getLeft: function() {
+ return this._el.container.style.left.slice(0, -2);
+ },
+
+ getTime: function() { // TODO does this need to know about the end date?
+ return this.data.start_date.getTime();
+ },
+
+ getEndTime: function() {
+
+ if (this.data.end_date) {
+ return this.data.end_date.getTime();
+ } else {
+ return false;
+ }
+ },
+
+ setHeight: function(h) {
+ var text_line_height = 12,
+ text_lines = 1;
+
+ this._el.content_container.style.height = h + "px";
+ this._el.timespan_content.style.height = h + "px";
+ // Handle Line height for better display of text
+ if (h <= 30) {
+ this._el.content.className = "tl-timemarker-content tl-timemarker-content-small";
+ } else {
+ this._el.content.className = "tl-timemarker-content";
+ }
+
+ if (h <= 56) {
+ TL.DomUtil.addClass(this._el.content_container, "tl-timemarker-content-container-small");
+ } else {
+ TL.DomUtil.removeClass(this._el.content_container, "tl-timemarker-content-container-small");
+ }
+
+ // Handle number of lines visible vertically
+
+ if (TL.Browser.webkit) {
+ text_lines = Math.floor(h / (text_line_height + 2));
+ if (text_lines < 1) {
+ text_lines = 1;
+ }
+ this._text.className = "tl-headline";
+ this._text.style.webkitLineClamp = text_lines;
+ } else {
+ text_lines = h / text_line_height;
+ if (text_lines > 1) {
+ this._text.className = "tl-headline tl-headline-fadeout";
+ } else {
+ this._text.className = "tl-headline";
+ }
+ this._text.style.height = (text_lines * text_line_height) + "px";
+ }
+
+ },
+
+ setWidth: function(w) {
+ if (this.data.end_date) {
+ this._el.container.style.width = w + "px";
+
+ if (w > this.options.marker_width_min) {
+ this._el.content_container.style.width = w + "px";
+ this._el.content_container.className = "tl-timemarker-content-container tl-timemarker-content-container-long";
+ } else {
+ this._el.content_container.style.width = this.options.marker_width_min + "px";
+ this._el.content_container.className = "tl-timemarker-content-container";
+ }
+ }
+
+ },
+
+ setClass: function(n) {
+ this._el.container.className = n;
+ },
+
+ setRowPosition: function(n, remainder) {
+ this.setPosition({top:n});
+ this._el.timespan.style.height = remainder + "px";
+
+ if (remainder < 56) {
+ //TL.DomUtil.removeClass(this._el.content_container, "tl-timemarker-content-container-small");
+ }
+ },
+
+ /* Events
+ ================================================== */
+ _onMarkerClick: function(e) {
+ this.fire("markerclick", {unique_id:this.data.unique_id});
+ },
+
+ /* Private Methods
+ ================================================== */
+ _initLayout: function () {
+ //trace(this.data)
+ // Create Layout
+ this._el.container = TL.Dom.create("div", "tl-timemarker");
+ if (this.data.unique_id) {
+ this._el.container.id = this.data.unique_id + "-marker";
+ }
+
+ if (this.data.end_date) {
+ this.has_end_date = true;
+ this._el.container.className = 'tl-timemarker tl-timemarker-with-end';
+ }
+
+ this._el.timespan = TL.Dom.create("div", "tl-timemarker-timespan", this._el.container);
+ this._el.timespan_content = TL.Dom.create("div", "tl-timemarker-timespan-content", this._el.timespan);
+ this._el.content_container = TL.Dom.create("div", "tl-timemarker-content-container", this._el.container);
+
+ this._el.content = TL.Dom.create("div", "tl-timemarker-content", this._el.content_container);
+
+ this._el.line_left = TL.Dom.create("div", "tl-timemarker-line-left", this._el.timespan);
+ this._el.line_right = TL.Dom.create("div", "tl-timemarker-line-right", this._el.timespan);
+
+ // Thumbnail or Icon
+ if (this.data.media) {
+ this._el.media_container = TL.Dom.create("div", "tl-timemarker-media-container", this._el.content);
+ // ugh. needs an overhaul
+ var mtd = {url: this.data.media.thumbnail};
+ var thumbnail_media_type = (this.data.media.thumbnail) ? TL.MediaType(mtd, true) : null;
+ if (thumbnail_media_type) {
+ var thumbnail_media = new thumbnail_media_type.cls(mtd);
+ thumbnail_media.on("loaded", function() {
+ this._el.media = TL.Dom.create("img", "tl-timemarker-media", this._el.media_container);
+ this._el.media.src = thumbnail_media.getImageURL();
+ }.bind(this));
+ thumbnail_media.loadMedia();
+ } else {
+ var media_type = TL.MediaType(this.data.media).type;
+ this._el.media = TL.Dom.create("span", "tl-icon-" + media_type, this._el.media_container);
+
+ }
+
+ }
+
+
+ // Text
+ this._el.text = TL.Dom.create("div", "tl-timemarker-text", this._el.content);
+ this._text = TL.Dom.create("h2", "tl-headline", this._el.text);
+ if (this.data.text.headline && this.data.text.headline != "") {
+ this._text.innerHTML = TL.Util.unlinkify(this.data.text.headline);
+ } else if (this.data.text.text && this.data.text.text != "") {
+ this._text.innerHTML = TL.Util.unlinkify(this.data.text.text);
+ } else if (this.data.media && this.data.media.caption && this.data.media.caption != "") {
+ this._text.innerHTML = TL.Util.unlinkify(this.data.media.caption);
+ }
+
+
+
+ // Fire event that the slide is loaded
+ this.onLoaded();
+
+ },
+
+ _initEvents: function() {
+ TL.DomEvent.addListener(this._el.container, 'click', this._onMarkerClick, this);
+ },
+
+ // Update Display
+ _updateDisplay: function(width, height, layout) {
+
+ if (width) {
+ this.options.width = width;
+ }
+
+ if (height) {
+ this.options.height = height;
+ }
+
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.TimeEra.js
+********************************************** */
+
+/* TL.TimeMarker
+
+================================================== */
+
+TL.TimeEra = TL.Class.extend({
+
+ includes: [TL.Events, TL.DomMixins],
+
+ _el: {},
+
+ /* Constructor
+ ================================================== */
+ initialize: function(data, options) {
+
+ // DOM Elements
+ this._el = {
+ container: {},
+ background: {},
+ content_container: {},
+ content: {},
+ text: {}
+ };
+
+ // Components
+ this._text = {};
+
+ // State
+ this._state = {
+ loaded: false
+ };
+
+
+ // Data
+ this.data = {
+ unique_id: "",
+ date: {
+ year: 0,
+ month: 0,
+ day: 0,
+ hour: 0,
+ minute: 0,
+ second: 0,
+ millisecond: 0,
+ thumbnail: "",
+ format: ""
+ },
+ text: {
+ headline: "",
+ text: ""
+ }
+ };
+
+ // Options
+ this.options = {
+ duration: 1000,
+ ease: TL.Ease.easeInSpline,
+ width: 600,
+ height: 600,
+ marker_width_min: 100 // Minimum Marker Width
+ };
+
+ // Actively Displaying
+ this.active = false;
+
+ // Animation Object
+ this.animator = {};
+
+ // End date
+ this.has_end_date = false;
+
+ // Merge Data and Options
+ TL.Util.mergeData(this.options, options);
+ TL.Util.mergeData(this.data, data);
+
+ this._initLayout();
+ this._initEvents();
+
+
+ },
+
+ /* Adding, Hiding, Showing etc
+ ================================================== */
+ show: function() {
+
+ },
+
+ hide: function() {
+
+ },
+
+ setActive: function(is_active) {
+
+ },
+
+ addTo: function(container) {
+ container.appendChild(this._el.container);
+ },
+
+ removeFrom: function(container) {
+ container.removeChild(this._el.container);
+ },
+
+ updateDisplay: function(w, h) {
+ this._updateDisplay(w, h);
+ },
+
+ getLeft: function() {
+ return this._el.container.style.left.slice(0, -2);
+ },
+
+ getTime: function() { // TODO does this need to know about the end date?
+ return this.data.start_date.getTime();
+ },
+
+ getEndTime: function() {
+
+ if (this.data.end_date) {
+ return this.data.end_date.getTime();
+ } else {
+ return false;
+ }
+ },
+
+ setHeight: function(h) {
+ var text_line_height = 12,
+ text_lines = 1;
+
+ this._el.content_container.style.height = h + "px";
+ this._el.content.className = "tl-timeera-content";
+
+ // Handle number of lines visible vertically
+
+ if (TL.Browser.webkit) {
+ text_lines = Math.floor(h / (text_line_height + 2));
+ if (text_lines < 1) {
+ text_lines = 1;
+ }
+ this._text.className = "tl-headline";
+ this._text.style.webkitLineClamp = text_lines;
+ } else {
+ text_lines = h / text_line_height;
+ if (text_lines > 1) {
+ this._text.className = "tl-headline tl-headline-fadeout";
+ } else {
+ this._text.className = "tl-headline";
+ }
+ this._text.style.height = (text_lines * text_line_height) + "px";
+ }
+
+ },
+
+ setWidth: function(w) {
+ if (this.data.end_date) {
+ this._el.container.style.width = w + "px";
+
+ if (w > this.options.marker_width_min) {
+ this._el.content_container.style.width = w + "px";
+ this._el.content_container.className = "tl-timeera-content-container tl-timeera-content-container-long";
+ } else {
+ this._el.content_container.style.width = this.options.marker_width_min + "px";
+ this._el.content_container.className = "tl-timeera-content-container";
+ }
+ }
+
+ },
+
+ setClass: function(n) {
+ this._el.container.className = n;
+ },
+
+ setRowPosition: function(n, remainder) {
+ this.setPosition({top:n});
+
+ if (remainder < 56) {
+ //TL.DomUtil.removeClass(this._el.content_container, "tl-timeera-content-container-small");
+ }
+ },
+
+ setColor: function(color_num) {
+ this._el.container.className = 'tl-timeera tl-timeera-color' + color_num;
+ },
+
+ /* Events
+ ================================================== */
+
+
+ /* Private Methods
+ ================================================== */
+ _initLayout: function () {
+ //trace(this.data)
+ // Create Layout
+ this._el.container = TL.Dom.create("div", "tl-timeera");
+ if (this.data.unique_id) {
+ this._el.container.id = this.data.unique_id + "-era";
+ }
+
+ if (this.data.end_date) {
+ this.has_end_date = true;
+ this._el.container.className = 'tl-timeera tl-timeera-with-end';
+ }
+
+ this._el.content_container = TL.Dom.create("div", "tl-timeera-content-container", this._el.container);
+
+ this._el.background = TL.Dom.create("div", "tl-timeera-background", this._el.content_container);
+
+ this._el.content = TL.Dom.create("div", "tl-timeera-content", this._el.content_container);
+
+
+
+ // Text
+ this._el.text = TL.Dom.create("div", "tl-timeera-text", this._el.content);
+ this._text = TL.Dom.create("h2", "tl-headline", this._el.text);
+ if (this.data.text.headline && this.data.text.headline != "") {
+ this._text.innerHTML = TL.Util.unlinkify(this.data.text.headline);
+ }
+
+
+
+ // Fire event that the slide is loaded
+ this.onLoaded();
+
+ },
+
+ _initEvents: function() {
+
+ },
+
+ // Update Display
+ _updateDisplay: function(width, height, layout) {
+
+ if (width) {
+ this.options.width = width;
+ }
+
+ if (height) {
+ this.options.height = height;
+ }
+
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.TimeGroup.js
+********************************************** */
+
+/* TL.TimeGroup
+
+================================================== */
+
+TL.TimeGroup = TL.Class.extend({
+
+ includes: [TL.Events, TL.DomMixins],
+
+ _el: {},
+
+ /* Constructor
+ ================================================== */
+ initialize: function(data) {
+
+ // DOM ELEMENTS
+ this._el = {
+ parent: {},
+ container: {},
+ message: {}
+ };
+
+ //Options
+ this.options = {
+ width: 600,
+ height: 600
+ };
+
+ // Data
+ this.data = {
+ label: "",
+ rows: 1
+ };
+
+
+ this._el.container = TL.Dom.create("div", "tl-timegroup");
+
+ // Merge Data
+ TL.Util.mergeData(this.data, data);
+
+ // Animation
+ this.animator = {};
+
+
+ this._initLayout();
+ this._initEvents();
+ },
+
+ /* Public
+ ================================================== */
+
+
+
+ /* Update Display
+ ================================================== */
+ updateDisplay: function(w, h) {
+
+ },
+
+ setRowPosition: function(n, h) {
+ // trace(n);
+ // trace(this._el.container)
+ this.options.height = h * this.data.rows;
+ this.setPosition({top:n});
+ this._el.container.style.height = this.options.height + "px";
+
+ },
+
+ setAlternateRowColor: function(alternate, hide) {
+ var class_name = "tl-timegroup";
+ if (alternate) {
+ class_name += " tl-timegroup-alternate";
+ }
+ if (hide) {
+ class_name += " tl-timegroup-hidden";
+ }
+ this._el.container.className = class_name;
+ },
+
+ /* Events
+ ================================================== */
+
+
+ _onMouseClick: function() {
+ this.fire("clicked", this.options);
+ },
+
+
+ /* Private Methods
+ ================================================== */
+ _initLayout: function () {
+
+ // Create Layout
+ this._el.message = TL.Dom.create("div", "tl-timegroup-message", this._el.container);
+ this._el.message.innerHTML = this.data.label;
+
+
+ },
+
+ _initEvents: function () {
+ TL.DomEvent.addListener(this._el.container, 'click', this._onMouseClick, this);
+ },
+
+ // Update Display
+ _updateDisplay: function(width, height, animate) {
+
+ }
+
+});
+
+/* **********************************************
+ Begin TL.TimeScale.js
+********************************************** */
+
+/* TL.TimeScale
+ Strategies for laying out the timenav
+ make a new one if the slides change
+
+ TODOS: deal with clustering
+================================================== */
+TL.TimeScale = TL.Class.extend({
+
+ initialize: function (timeline_config, options) {
+
+ var slides = timeline_config.events;
+ this._scale = timeline_config.scale;
+
+ options = TL.Util.mergeData({ // establish defaults
+ display_width: 500,
+ screen_multiplier: 3,
+ max_rows: null
+ }, options);
+
+ this._display_width = options.display_width;
+ this._screen_multiplier = options.screen_multiplier;
+ this._pixel_width = this._screen_multiplier * this._display_width;
+
+ this._group_labels = undefined;
+ this._positions = [];
+ this._pixels_per_milli = 0;
+
+ this._earliest = timeline_config.getEarliestDate().getTime();
+ this._latest = timeline_config.getLatestDate().getTime();
+ this._span_in_millis = this._latest - this._earliest;
+ if (this._span_in_millis <= 0) {
+ this._span_in_millis = this._computeDefaultSpan(timeline_config);
+ }
+ this._average = (this._span_in_millis)/slides.length;
+
+ this._pixels_per_milli = this.getPixelWidth() / this._span_in_millis;
+
+ this._axis_helper = TL.AxisHelper.getBestHelper(this);
+
+ this._scaled_padding = (1/this.getPixelsPerTick()) * (this._display_width/2)
+ this._computePositionInfo(slides, options.max_rows);
+ },
+
+ _computeDefaultSpan: function(timeline_config) {
+ // this gets called when all events are at the same instant,
+ // or maybe when the span_in_millis is > 0 but still below a desired threshold
+ // TODO: does this need smarts about eras?
+ if (timeline_config.scale == 'human') {
+ var formats = {}
+ for (var i = 0; i < timeline_config.events.length; i++) {
+ var fmt = timeline_config.events[i].start_date.findBestFormat();
+ formats[fmt] = (formats[fmt]) ? formats[fmt] + 1 : 1;
+ };
+
+ for (var i = TL.Date.SCALES.length - 1; i >= 0; i--) {
+ if (formats.hasOwnProperty(TL.Date.SCALES[i][0])) {
+ var scale = TL.Date.SCALES[TL.Date.SCALES.length - 1]; // default
+ if (TL.Date.SCALES[i+1]) {
+ scale = TL.Date.SCALES[i+1]; // one larger than the largest in our data
+ }
+ return scale[1]
+ }
+ };
+ return 365 * 24 * 60 * 60 * 1000; // default to a year?
+ }
+
+ return 200000; // what is the right handling for cosmo dates?
+ },
+ getGroupLabels: function() { /*
+ return an array of objects, one per group, in the order (top to bottom) that the groups are expected to appear. Each object will have two properties:
+ * label (the string as specified in one or more 'group' properties of events in the configuration)
+ * rows (the number of rows occupied by events associated with the label. )
+ */
+ return (this._group_labels || []);
+ },
+
+ getScale: function() {
+ return this._scale;
+ },
+
+ getNumberOfRows: function() {
+ return this._number_of_rows
+ },
+
+ getPixelWidth: function() {
+ return this._pixel_width;
+ },
+
+ getPosition: function(time_in_millis) {
+ // be careful using millis, as they won't scale to cosmological time.
+ // however, we're moving to make the arg to this whatever value
+ // comes from TL.Date.getTime() which could be made smart about that --
+ // so it may just be about the naming.
+ return ( time_in_millis - this._earliest ) * this._pixels_per_milli
+ },
+
+ getPositionInfo: function(idx) {
+ return this._positions[idx];
+ },
+
+ getPixelsPerTick: function() {
+ return this._axis_helper.getPixelsPerTick(this._pixels_per_milli);
+ },
+
+ getTicks: function() {
+ return {
+ major: this._axis_helper.getMajorTicks(this),
+ minor: this._axis_helper.getMinorTicks(this) }
+ },
+
+ getDateFromTime: function(t) {
+ if(this._scale == 'human') {
+ return new TL.Date(t);
+ } else if(this._scale == 'cosmological') {
+ return new TL.BigDate(new TL.BigYear(t));
+ }
+ throw new TL.Error("time_scale_scale_err", this._scale);
+ },
+
+ getMajorScale: function() {
+ return this._axis_helper.major.name;
+ },
+
+ getMinorScale: function() {
+ return this._axis_helper.minor.name;
+ },
+
+ _assessGroups: function(slides) {
+ var groups = [];
+ var empty_group = false;
+ for (var i = 0; i < slides.length; i++) {
+ if(slides[i].group) {
+ if(groups.indexOf(slides[i].group) < 0) {
+ groups.push(slides[i].group);
+ } else {
+ empty_group = true;
+ }
+ }
+ };
+ if (groups.length && empty_group) {
+ groups.push('');
+ }
+ return groups;
+ },
+
+ /* Compute the marker row positions, minimizing the number of
+ overlaps.
+
+ @positions = list of objects from this._positions
+ @rows_left = number of rows available (assume > 0)
+ */
+ _computeRowInfo: function(positions, rows_left) {
+ var lasts_in_row = [];
+ var n_overlaps = 0;
+
+ for (var i = 0; i < positions.length; i++) {
+ var pos_info = positions[i];
+ var overlaps = [];
+
+ // See if we can add item to an existing row without
+ // overlapping the previous item in that row
+ delete pos_info.row;
+
+ for (var j = 0; j < lasts_in_row.length; j++) {
+ overlaps.push(lasts_in_row[j].end - pos_info.start);
+ if(overlaps[j] <= 0) {
+ pos_info.row = j;
+ lasts_in_row[j] = pos_info;
+ break;
+ }
+ }
+
+ // If we couldn't add to an existing row without overlap...
+ if (typeof(pos_info.row) == 'undefined') {
+ if (rows_left === null) {
+ // Make a new row
+ pos_info.row = lasts_in_row.length;
+ lasts_in_row.push(pos_info);
+ } else if (rows_left > 0) {
+ // Make a new row
+ pos_info.row = lasts_in_row.length;
+ lasts_in_row.push(pos_info);
+ rows_left--;
+ } else {
+ // Add to existing row with minimum overlap.
+ var min_overlap = Math.min.apply(null, overlaps);
+ var idx = overlaps.indexOf(min_overlap);
+ pos_info.row = idx;
+ if (pos_info.end > lasts_in_row[idx].end) {
+ lasts_in_row[idx] = pos_info;
+ }
+ n_overlaps++;
+ }
+ }
+ }
+
+ return {n_rows: lasts_in_row.length, n_overlaps: n_overlaps};
+ },
+
+ /* Compute marker positions. If using groups, this._number_of_rows
+ will never be less than the number of groups.
+
+ @max_rows = total number of available rows
+ @default_marker_width should be in pixels
+ */
+ _computePositionInfo: function(slides, max_rows, default_marker_width) {
+ default_marker_width = default_marker_width || 100;
+
+ var groups = [];
+ var empty_group = false;
+
+ // Set start/end/width; enumerate groups
+ for (var i = 0; i < slides.length; i++) {
+ var pos_info = {
+ start: this.getPosition(slides[i].start_date.getTime())
+ };
+ this._positions.push(pos_info);
+
+ if (typeof(slides[i].end_date) != 'undefined') {
+ var end_pos = this.getPosition(slides[i].end_date.getTime());
+ pos_info.width = end_pos - pos_info.start;
+ if (pos_info.width > default_marker_width) {
+ pos_info.end = pos_info.start + pos_info.width;
+ } else {
+ pos_info.end = pos_info.start + default_marker_width;
+ }
+ } else {
+ pos_info.width = default_marker_width;
+ pos_info.end = pos_info.start + default_marker_width;
+ }
+
+ if(slides[i].group) {
+ if(groups.indexOf(slides[i].group) < 0) {
+ groups.push(slides[i].group);
+ }
+ } else {
+ empty_group = true;
+ }
+ }
+
+ if(!(groups.length)) {
+ var result = this._computeRowInfo(this._positions, max_rows);
+ this._number_of_rows = result.n_rows;
+ } else {
+ if(empty_group) {
+ groups.push("");
+ }
+
+ // Init group info
+ var group_info = [];
+
+ for(var i = 0; i < groups.length; i++) {
+ group_info[i] = {
+ label: groups[i],
+ idx: i,
+ positions: [],
+ n_rows: 1, // default
+ n_overlaps: 0
+ };
+ }
+
+ for(var i = 0; i < this._positions.length; i++) {
+ var pos_info = this._positions[i];
+
+ pos_info.group = groups.indexOf(slides[i].group || "");
+ pos_info.row = 0;
+
+ var gi = group_info[pos_info.group];
+ for(var j = gi.positions.length - 1; j >= 0; j--) {
+ if(gi.positions[j].end > pos_info.start) {
+ gi.n_overlaps++;
+ }
+ }
+
+ gi.positions.push(pos_info);
+ }
+
+ var n_rows = groups.length; // start with 1 row per group
+
+ while(true) {
+ // Count free rows available
+ var rows_left = Math.max(0, max_rows - n_rows);
+ if(!rows_left) {
+ break; // no free rows, nothing to do
+ }
+
+ // Sort by # overlaps, idx
+ group_info.sort(function(a, b) {
+ if(a.n_overlaps > b.n_overlaps) {
+ return -1;
+ } else if(a.n_overlaps < b.n_overlaps) {
+ return 1;
+ }
+ return a.idx - b.idx;
+ });
+ if(!group_info[0].n_overlaps) {
+ break; // no overlaps, nothing to do
+ }
+
+ // Distribute free rows among groups with overlaps
+ var n_rows = 0;
+ for(var i = 0; i < group_info.length; i++) {
+ var gi = group_info[i];
+
+ if(gi.n_overlaps && rows_left) {
+ var res = this._computeRowInfo(gi.positions, gi.n_rows + 1);
+ gi.n_rows = res.n_rows; // update group info
+ gi.n_overlaps = res.n_overlaps;
+ rows_left--; // update rows left
+ }
+
+ n_rows += gi.n_rows; // update rows used
+ }
+ }
+
+ // Set number of rows
+ this._number_of_rows = n_rows;
+
+ // Set group labels; offset row positions
+ this._group_labels = [];
+
+ group_info.sort(function(a, b) {return a.idx - b.idx; });
+
+ for(var i = 0, row_offset = 0; i < group_info.length; i++) {
+ this._group_labels.push({
+ label: group_info[i].label,
+ rows: group_info[i].n_rows
+ });
+
+ for(var j = 0; j < group_info[i].positions.length; j++) {
+ var pos_info = group_info[i].positions[j];
+ pos_info.row += row_offset;
+ }
+
+ row_offset += group_info[i].n_rows;
+ }
+ }
+
+ }
+});
+
+
+/* **********************************************
+ Begin TL.TimeAxis.js
+********************************************** */
+
+/* TL.TimeAxis
+ Display element for showing timescale ticks
+================================================== */
+
+TL.TimeAxis = TL.Class.extend({
+
+ includes: [TL.Events, TL.DomMixins, TL.I18NMixins],
+
+ _el: {},
+
+ /* Constructor
+ ================================================== */
+ initialize: function(elem, options) {
+ // DOM Elements
+ this._el = {
+ container: {},
+ content_container: {},
+ major: {},
+ minor: {},
+ };
+
+ // Components
+ this._text = {};
+
+ // State
+ this._state = {
+ loaded: false
+ };
+
+
+ // Data
+ this.data = {};
+
+ // Options
+ this.options = {
+ duration: 1000,
+ ease: TL.Ease.easeInSpline,
+ width: 600,
+ height: 600
+ };
+
+ // Actively Displaying
+ this.active = false;
+
+ // Animation Object
+ this.animator = {};
+
+ // Axis Helper
+ this.axis_helper = {};
+
+ // Minor tick dom element array
+ this.minor_ticks = [];
+
+ // Minor tick dom element array
+ this.major_ticks = [];
+
+ // Date Format Lookup, map TL.Date.SCALES names to...
+ this.dateformat_lookup = {
+ millisecond: 'time_milliseconds', // ...TL.Language.<code>.dateformats
+ second: 'time_short',
+ minute: 'time_no_seconds_short',
+ hour: 'time_no_minutes_short',
+ day: 'full_short',
+ month: 'month_short',
+ year: 'year',
+ decade: 'year',
+ century: 'year',
+ millennium: 'year',
+ age: 'compact', // ...TL.Language.<code>.bigdateformats
+ epoch: 'compact',
+ era: 'compact',
+ eon: 'compact',
+ eon2: 'compact'
+ }
+
+ // Main element
+ if (typeof elem === 'object') {
+ this._el.container = elem;
+ } else {
+ this._el.container = TL.Dom.get(elem);
+ }
+
+ // Merge Data and Options
+ TL.Util.mergeData(this.options, options);
+
+ this._initLayout();
+ this._initEvents();
+
+ },
+
+ /* Adding, Hiding, Showing etc
+ ================================================== */
+ show: function() {
+
+ },
+
+ hide: function() {
+
+ },
+
+ addTo: function(container) {
+ container.appendChild(this._el.container);
+ },
+
+ removeFrom: function(container) {
+ container.removeChild(this._el.container);
+ },
+
+ updateDisplay: function(w, h) {
+ this._updateDisplay(w, h);
+ },
+
+ getLeft: function() {
+ return this._el.container.style.left.slice(0, -2);
+ },
+
+ drawTicks: function(timescale, optimal_tick_width) {
+
+ var ticks = timescale.getTicks();
+
+ var controls = {
+ minor: {
+ el: this._el.minor,
+ dateformat: this.dateformat_lookup[ticks['minor'].name],
+ ts_ticks: ticks['minor'].ticks,
+ tick_elements: this.minor_ticks
+ },
+ major: {
+ el: this._el.major,
+ dateformat: this.dateformat_lookup[ticks['major'].name],
+ ts_ticks: ticks['major'].ticks,
+ tick_elements: this.major_ticks
+ }
+ }
+ // FADE OUT
+ this._el.major.className = "tl-timeaxis-major";
+ this._el.minor.className = "tl-timeaxis-minor";
+ this._el.major.style.opacity = 0;
+ this._el.minor.style.opacity = 0;
+
+ // CREATE MAJOR TICKS
+ this.major_ticks = this._createTickElements(
+ ticks['major'].ticks,
+ this._el.major,
+ this.dateformat_lookup[ticks['major'].name]
+ );
+
+ // CREATE MINOR TICKS
+ this.minor_ticks = this._createTickElements(
+ ticks['minor'].ticks,
+ this._el.minor,
+ this.dateformat_lookup[ticks['minor'].name],
+ ticks['major'].ticks
+ );
+
+ this.positionTicks(timescale, optimal_tick_width, true);
+
+ // FADE IN
+ this._el.major.className = "tl-timeaxis-major tl-animate-opacity tl-timeaxis-animate-opacity";
+ this._el.minor.className = "tl-timeaxis-minor tl-animate-opacity tl-timeaxis-animate-opacity";
+ this._el.major.style.opacity = 1;
+ this._el.minor.style.opacity = 1;
+ },
+
+ _createTickElements: function(ts_ticks,tick_element,dateformat,ticks_to_skip) {
+ tick_element.innerHTML = "";
+ var skip_times = {};
+
+ var yearZero = new Date(-1,13,-30);
+ skip_times[yearZero.getTime()] = true;
+
+ if (ticks_to_skip){
+ for (var i = 0; i < ticks_to_skip.length; i++) {
+ skip_times[ticks_to_skip[i].getTime()] = true;
+ }
+ }
+
+ var tick_elements = []
+ for (var i = 0; i < ts_ticks.length; i++) {
+ var ts_tick = ts_ticks[i];
+ if (!(ts_tick.getTime() in skip_times)) {
+ var tick = TL.Dom.create("div", "tl-timeaxis-tick", tick_element),
+ tick_text = TL.Dom.create("span", "tl-timeaxis-tick-text tl-animate-opacity", tick);
+
+ tick_text.innerHTML = ts_tick.getDisplayDate(this.getLanguage(), dateformat);
+
+ tick_elements.push({
+ tick:tick,
+ tick_text:tick_text,
+ display_date:ts_tick.getDisplayDate(this.getLanguage(), dateformat),
+ date:ts_tick
+ });
+ }
+ }
+ return tick_elements;
+ },
+
+ positionTicks: function(timescale, optimal_tick_width, no_animate) {
+
+ // Handle Animation
+ if (no_animate) {
+ this._el.major.className = "tl-timeaxis-major";
+ this._el.minor.className = "tl-timeaxis-minor";
+ } else {
+ this._el.major.className = "tl-timeaxis-major tl-timeaxis-animate";
+ this._el.minor.className = "tl-timeaxis-minor tl-timeaxis-animate";
+ }
+
+ this._positionTickArray(this.major_ticks, timescale, optimal_tick_width);
+ this._positionTickArray(this.minor_ticks, timescale, optimal_tick_width);
+
+ },
+
+ _positionTickArray: function(tick_array, timescale, optimal_tick_width) {
+ // Poition Ticks & Handle density of ticks
+ if (tick_array[1] && tick_array[0]) {
+ var distance = ( timescale.getPosition(tick_array[1].date.getMillisecond()) - timescale.getPosition(tick_array[0].date.getMillisecond()) ),
+ fraction_of_array = 1;
+
+
+ if (distance < optimal_tick_width) {
+ fraction_of_array = Math.round(optimal_tick_width/timescale.getPixelsPerTick());
+ }
+
+ var show = 1;
+
+ for (var i = 0; i < tick_array.length; i++) {
+
+ var tick = tick_array[i];
+
+ // Poition Ticks
+ tick.tick.style.left = timescale.getPosition(tick.date.getMillisecond()) + "px";
+ tick.tick_text.innerHTML = tick.display_date;
+
+ // Handle density of ticks
+ if (fraction_of_array > 1) {
+ if (show >= fraction_of_array) {
+ show = 1;
+ tick.tick_text.style.opacity = 1;
+ tick.tick.className = "tl-timeaxis-tick";
+ } else {
+ show++;
+ tick.tick_text.style.opacity = 0;
+ tick.tick.className = "tl-timeaxis-tick tl-timeaxis-tick-hidden";
+ }
+ } else {
+ tick.tick_text.style.opacity = 1;
+ tick.tick.className = "tl-timeaxis-tick";
+ }
+
+ };
+ }
+ },
+
+ /* Events
+ ================================================== */
+
+
+ /* Private Methods
+ ================================================== */
+ _initLayout: function () {
+ this._el.content_container = TL.Dom.create("div", "tl-timeaxis-content-container", this._el.container);
+ this._el.major = TL.Dom.create("div", "tl-timeaxis-major", this._el.content_container);
+ this._el.minor = TL.Dom.create("div", "tl-timeaxis-minor", this._el.content_container);
+
+ // Fire event that the slide is loaded
+ this.onLoaded();
+ },
+
+ _initEvents: function() {
+
+ },
+
+ // Update Display
+ _updateDisplay: function(width, height, layout) {
+
+ if (width) {
+ this.options.width = width;
+ }
+
+ if (height) {
+ this.options.height = height;
+ }
+
+ }
+
+});
+
+
+/* **********************************************
+ Begin TL.AxisHelper.js
+********************************************** */
+
+/* TL.AxisHelper
+ Strategies for laying out the timenav
+ markers and time axis
+ Intended as a private class -- probably only known to TimeScale
+================================================== */
+TL.AxisHelper = TL.Class.extend({
+ initialize: function (options) {
+ if (options) {
+ this.scale = options.scale;
+ this.minor = options.minor;
+ this.major = options.major;
+ } else {
+ throw new TL.Error("axis_helper_no_options_err")
+ }
+
+ },
+
+ getPixelsPerTick: function(pixels_per_milli) {
+ return pixels_per_milli * this.minor.factor;
+ },
+
+ getMajorTicks: function(timescale) {
+ return this._getTicks(timescale, this.major)
+ },
+
+ getMinorTicks: function(timescale) {
+ return this._getTicks(timescale, this.minor)
+ },
+
+ _getTicks: function(timescale, option) {
+
+ var factor_scale = timescale._scaled_padding * option.factor;
+ var first_tick_time = timescale._earliest - factor_scale;
+ var last_tick_time = timescale._latest + factor_scale;
+ var ticks = []
+ for (var i = first_tick_time; i < last_tick_time; i += option.factor) {
+ ticks.push(timescale.getDateFromTime(i).floor(option.name));
+ }
+
+ return {
+ name: option.name,
+ ticks: ticks
+ }
+
+ }
+
+});
+
+(function(cls){ // add some class-level behavior
+
+ var HELPERS = {};
+
+ var setHelpers = function(scale_type, scales) {
+ HELPERS[scale_type] = [];
+
+ for (var idx = 0; idx < scales.length - 1; idx++) {
+ var minor = scales[idx];
+ var major = scales[idx+1];
+ HELPERS[scale_type].push(new cls({
+ scale: minor[3],
+ minor: { name: minor[0], factor: minor[1]},
+ major: { name: major[0], factor: major[1]}
+ }));
+ }
+ };
+
+ setHelpers('human', TL.Date.SCALES);
+ setHelpers('cosmological', TL.BigDate.SCALES);
+
+ cls.HELPERS = HELPERS;
+
+ cls.getBestHelper = function(ts,optimal_tick_width) {
+ if (typeof(optimal_tick_width) != 'number' ) {
+ optimal_tick_width = 100;
+ }
+ var ts_scale = ts.getScale();
+ var helpers = HELPERS[ts_scale];
+
+ if (!helpers) {
+ throw new TL.Error("axis_helper_scale_err", ts_scale);
+ }
+
+ var prev = null;
+ for (var idx = 0; idx < helpers.length; idx++) {
+ var curr = helpers[idx];
+ var pixels_per_tick = curr.getPixelsPerTick(ts._pixels_per_milli);
+ if (pixels_per_tick > optimal_tick_width) {
+ if (prev == null) return curr;
+ var curr_dist = Math.abs(optimal_tick_width - pixels_per_tick);
+ var prev_dist = Math.abs(optimal_tick_width - pixels_per_tick);
+ if (curr_dist < prev_dist) {
+ return curr;
+ } else {
+ return prev;
+ }
+ }
+ prev = curr;
+ }
+ return helpers[helpers.length - 1]; // last resort
+ }
+})(TL.AxisHelper);
+
+
+/* **********************************************
+ Begin TL.Timeline.js
+********************************************** */
+
+/* TimelineJS
+Designed and built by Zach Wise at KnightLab
+
+This Source Code Form is subject to the terms of the Mozilla Public
+License, v. 2.0. If a copy of the MPL was not distributed with this
+file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+================================================== */
+/*
+TODO
+
+*/
+
+/* Required Files
+CodeKit Import
+https://incident57.com/codekit/
+================================================== */
+
+// CORE
+// @codekit-prepend "core/TL.js";
+// @codekit-prepend "core/TL.Error.js";
+// @codekit-prepend "core/TL.Util.js";
+// @codekit-prepend "data/TL.Data.js";
+// @codekit-prepend "core/TL.Class.js";
+// @codekit-prepend "core/TL.Events.js";
+// @codekit-prepend "core/TL.Browser.js";
+// @codekit-prepend "core/TL.Load.js";
+// @codekit-prepend "core/TL.TimelineConfig.js";
+// @codekit-prepend "core/TL.ConfigFactory.js";
+
+
+// LANGUAGE
+// @codekit-prepend "language/TL.Language.js";
+// @codekit-prepend "language/TL.I18NMixins.js";
+
+// ANIMATION
+// @codekit-prepend "animation/TL.Ease.js";
+// @codekit-prepend "animation/TL.Animate.js";
+
+// DOM
+// @codekit-prepend "dom/TL.Point.js";
+// @codekit-prepend "dom/TL.DomMixins.js";
+// @codekit-prepend "dom/TL.Dom.js";
+// @codekit-prepend "dom/TL.DomUtil.js";
+// @codekit-prepend "dom/TL.DomEvent.js";
+// @codekit-prepend "dom/TL.StyleSheet.js";
+
+// Date
+// @codekit-prepend "date/TL.Date.js";
+// @codekit-prepend "date/TL.DateUtil.js";
+
+// UI
+// @codekit-prepend "ui/TL.Draggable.js";
+// @codekit-prepend "ui/TL.Swipable.js";
+// @codekit-prepend "ui/TL.MenuBar.js";
+// @codekit-prepend "ui/TL.Message.js";
+
+// MEDIA
+// @codekit-prepend "media/TL.MediaType.js";
+// @codekit-prepend "media/TL.Media.js";
+
+// MEDIA TYPES
+// @codekit-prepend "media/types/TL.Media.Blockquote.js";
+// @codekit-prepend "media/types/TL.Media.DailyMotion.js";
+// @codekit-prepend "media/types/TL.Media.DocumentCloud.js";
+// @codekit-prepend "media/types/TL.Media.Flickr.js";
+// @codekit-prepend "media/types/TL.Media.GoogleDoc.js";
+// @codekit-prepend "media/types/TL.Media.GooglePlus.js";
+// @codekit-prepend "media/types/TL.Media.IFrame.js";
+// @codekit-prepend "media/types/TL.Media.Image.js";
+// @codekit-prepend "media/types/TL.Media.Imgur.js";
+// @codekit-prepend "media/types/TL.Media.Instagram.js";
+// @codekit-prepend "media/types/TL.Media.GoogleMap.js";
+// @codekit-prepend "media/types/TL.Media.PDF.js";
+// @codekit-prepend "media/types/TL.Media.Profile.js";
+// @codekit-prepend "media/types/TL.Media.Slider.js";
+// @codekit-prepend "media/types/TL.Media.SoundCloud.js";
+// @codekit-prepend "media/types/TL.Media.Spotify.js";
+// @codekit-prepend "media/types/TL.Media.Storify.js";
+// @codekit-prepend "media/types/TL.Media.Text.js";
+// @codekit-prepend "media/types/TL.Media.Twitter.js";
+// @codekit-prepend "media/types/TL.Media.TwitterEmbed.js";
+// @codekit-prepend "media/types/TL.Media.Vimeo.js";
+// @codekit-prepend "media/types/TL.Media.Vine.js";
+// @codekit-prepend "media/types/TL.Media.Website.js";
+// @codekit-prepend "media/types/TL.Media.Wikipedia.js";
+// @codekit-prepend "media/types/TL.Media.Wistia.js";
+// @codekit-prepend "media/types/TL.Media.YouTube.js";
+// @codekit-prepend "media/types/TL.Media.Audio.js";
+// @codekit-prepend "media/types/TL.Media.Video.js";
+
+// STORYSLIDER
+// @codekit-prepend "slider/TL.Slide.js";
+// @codekit-prepend "slider/TL.SlideNav.js";
+// @codekit-prepend "slider/TL.StorySlider.js";
+
+// TIMENAV
+// @codekit-prepend "timenav/TL.TimeNav.js";
+// @codekit-prepend "timenav/TL.TimeMarker.js";
+// @codekit-prepend "timenav/TL.TimeEra.js";
+// @codekit-prepend "timenav/TL.TimeGroup.js";
+// @codekit-prepend "timenav/TL.TimeScale.js";
+// @codekit-prepend "timenav/TL.TimeAxis.js";
+// @codekit-prepend "timenav/TL.AxisHelper.js";
+
+
+TL.Timeline = TL.Class.extend({
+ includes: [TL.Events, TL.I18NMixins],
+
+ /* Private Methods
+ ================================================== */
+ initialize: function (elem, data, options) {
+ var self = this;
+ if (!options) { options = {}};
+ // Version
+ this.version = "3.2.6";
+
+ // Ready
+ this.ready = false;
+
+ // DOM ELEMENTS
+ this._el = {
+ container: {},
+ storyslider: {},
+ timenav: {},
+ menubar: {}
+ };
+
+ // Determine Container Element
+ if (typeof elem === 'object') {
+ this._el.container = elem;
+ } else {
+ this._el.container = TL.Dom.get(elem);
+ }
+
+ // Slider
+ this._storyslider = {};
+
+ // Style Sheet
+ this._style_sheet = new TL.StyleSheet();
+
+ // TimeNav
+ this._timenav = {};
+
+ // Menu Bar
+ this._menubar = {};
+
+ // Loaded State
+ this._loaded = {storyslider:false, timenav:false};
+
+ // Data Object
+ this.config = null;
+
+ this.options = {
+ script_path: "",
+ height: this._el.container.offsetHeight,
+ width: this._el.container.offsetWidth,
+ debug: false,
+ is_embed: false,
+ is_full_embed: false,
+ hash_bookmark: false,
+ default_bg_color: {r:255, g:255, b:255},
+ scale_factor: 2, // How many screen widths wide should the timeline be
+ layout: "landscape", // portrait or landscape
+ timenav_position: "bottom", // timeline on top or bottom
+ optimal_tick_width: 60, // optimal distance (in pixels) between ticks on axis
+ base_class: "tl-timeline", // removing tl-timeline will break all default stylesheets...
+ timenav_height: null,
+ timenav_height_percentage: 25, // Overrides timenav height as a percentage of the screen
+ timenav_mobile_height_percentage: 40, // timenav height as a percentage on mobile devices
+ timenav_height_min: 175, // Minimum timenav height
+ marker_height_min: 30, // Minimum Marker Height
+ marker_width_min: 100, // Minimum Marker Width
+ marker_padding: 5, // Top Bottom Marker Padding
+ start_at_slide: 0,
+ start_at_end: false,
+ menubar_height: 0,
+ skinny_size: 650,
+ medium_size: 800,
+ relative_date: false, // Use momentjs to show a relative date from the slide.text.date.created_time field
+ use_bc: false, // Use declared suffix on dates earlier than 0
+ // animation
+ duration: 1000,
+ ease: TL.Ease.easeInOutQuint,
+ // interaction
+ dragging: true,
+ trackResize: true,
+ map_type: "stamen:toner-lite",
+ slide_padding_lr: 100, // padding on slide of slide
+ slide_default_fade: "0%", // landscape fade
+ zoom_sequence: [0.5, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89], // Array of Fibonacci numbers for TimeNav zoom levels
+ language: "en",
+ ga_property_id: null,
+ track_events: ['back_to_start','nav_next','nav_previous','zoom_in','zoom_out' ]
+ };
+
+ // Animation Objects
+ this.animator_timenav = null;
+ this.animator_storyslider = null;
+ this.animator_menubar = null;
+
+ // Add message to DOM
+ this.message = new TL.Message({}, {message_class: "tl-message-full"}, this._el.container);
+
+ // Merge Options
+ if (typeof(options.default_bg_color) == "string") {
+ var parsed = TL.Util.hexToRgb(options.default_bg_color); // will clear it out if its invalid
+ if (parsed) {
+ options.default_bg_color = parsed;
+ } else {
+ delete options.default_bg_color
+ trace("Invalid default background color. Ignoring.");
+ }
+ }
+ TL.Util.mergeData(this.options, options);
+
+ window.addEventListener("resize", function(e){
+ self.updateDisplay();
+ });
+
+ // Set Debug Mode
+ TL.debug = this.options.debug;
+
+ // Apply base class to container
+ TL.DomUtil.addClass(this._el.container, 'tl-timeline');
+
+ if (this.options.is_embed) {
+ TL.DomUtil.addClass(this._el.container, 'tl-timeline-embed');
+ }
+
+ if (this.options.is_full_embed) {
+ TL.DomUtil.addClass(this._el.container, 'tl-timeline-full-embed');
+ }
+
+ document.addEventListener("keydown", function(event) {
+ var keyName = event.key;
+ var currentSlide = self._getSlideIndex(self.current_id);
+ var _n = self.config.events.length - 1;
+ var lastSlide = self.config.title ? _n + 1 : _n;
+ var firstSlide = 0;
+
+ if (keyName == 'ArrowLeft'){
+ if (currentSlide!=firstSlide){
+ self.goToPrev();
+ }
+ }
+ else if (keyName == 'ArrowRight'){
+ if (currentSlide!=lastSlide){
+ self.goToNext();
+ }
+ }
+ });
+
+ // Use Relative Date Calculations
+ // NOT YET IMPLEMENTED
+ if(this.options.relative_date) {
+ if (typeof(moment) !== 'undefined') {
+ self._loadLanguage(data);
+ } else {
+ TL.Load.js(this.options.script_path + "/library/moment.js", function() {
+ self._loadLanguage(data);
+ trace("LOAD MOMENTJS")
+ });
+ }
+ } else {
+ self._loadLanguage(data);
+ }
+
+ },
+ _translateError: function(e) {
+ if(e.hasOwnProperty('stack')) {
+ trace(e.stack);
+ }
+ if(e.message_key) {
+ return this._(e.message_key) + (e.detail ? ' [' + e.detail +']' : '')
+ }
+ return e;
+ },
+
+ /* Load Language
+ ================================================== */
+ _loadLanguage: function(data) {
+ try {
+ this.options.language = new TL.Language(this.options);
+
+ this._initData(data);
+ } catch(e) {
+ this.showMessage(this._translateError(e));
+ }
+ },
+
+
+ /* Navigation
+ ================================================== */
+
+ // Goto slide with id
+ goToId: function(id) {
+ if (this.current_id != id) {
+ this.current_id = id;
+ this._timenav.goToId(this.current_id);
+ this._storyslider.goToId(this.current_id, false, true);
+ this.fire("change", {unique_id: this.current_id}, this);
+ }
+ },
+
+ // Goto slide n
+ goTo: function(n) {
+ if(this.config.title) {
+ if(n == 0) {
+ this.goToId(this.config.title.unique_id);
+ } else {
+ this.goToId(this.config.events[n - 1].unique_id);
+ }
+ } else {
+ this.goToId(this.config.events[n].unique_id);
+ }
+ },
+
+ // Goto first slide
+ goToStart: function() {
+ this.goTo(0);
+ },
+
+ // Goto last slide
+ goToEnd: function() {
+ var _n = this.config.events.length - 1;
+ this.goTo(this.config.title ? _n + 1 : _n);
+ },
+
+ // Goto previous slide
+ goToPrev: function() {
+ this.goTo(this._getSlideIndex(this.current_id) - 1);
+ },
+
+ // Goto next slide
+ goToNext: function() {
+ this.goTo(this._getSlideIndex(this.current_id) + 1);
+ },
+
+ /* Event maniupluation
+ ================================================== */
+
+ // Add an event
+ add: function(data) {
+ var unique_id = this.config.addEvent(data);
+
+ var n = this._getEventIndex(unique_id);
+ var d = this.config.events[n];
+
+ this._storyslider.createSlide(d, this.config.title ? n+1 : n);
+ this._storyslider._updateDrawSlides();
+
+ this._timenav.createMarker(d, n);
+ this._timenav._updateDrawTimeline(false);
+
+ this.fire("added", {unique_id: unique_id});
+ },
+
+ // Remove an event
+ remove: function(n) {
+ if(n >= 0 && n < this.config.events.length) {
+ // If removing the current, nav to new one first
+ if(this.config.events[n].unique_id == this.current_id) {
+ if(n < this.config.events.length - 1) {
+ this.goTo(n + 1);
+ } else {
+ this.goTo(n - 1);
+ }
+ }
+
+ var event = this.config.events.splice(n, 1);
+ delete this.config.event_dict[event[0].unique_id];
+ this._storyslider.destroySlide(this.config.title ? n+1 : n);
+ this._storyslider._updateDrawSlides();
+
+ this._timenav.destroyMarker(n);
+ this._timenav._updateDrawTimeline(false);
+
+ this.fire("removed", {unique_id: event[0].unique_id});
+ }
+ },
+
+ removeId: function(id) {
+ this.remove(this._getEventIndex(id));
+ },
+
+ /* Get slide data
+ ================================================== */
+
+ getData: function(n) {
+ if(this.config.title) {
+ if(n == 0) {
+ return this.config.title;
+ } else if(n > 0 && n <= this.config.events.length) {
+ return this.config.events[n - 1];
+ }
+ } else if(n >= 0 && n < this.config.events.length) {
+ return this.config.events[n];
+ }
+ return null;
+ },
+
+ getDataById: function(id) {
+ return this.getData(this._getSlideIndex(id));
+ },
+
+ /* Get slide object
+ ================================================== */
+
+ getSlide: function(n) {
+ if(n >= 0 && n < this._storyslider._slides.length) {
+ return this._storyslider._slides[n];
+ }
+ return null;
+ },
+
+ getSlideById: function(id) {
+ return this.getSlide(this._getSlideIndex(id));
+ },
+
+ getCurrentSlide: function() {
+ return this.getSlideById(this.current_id);
+ },
+
+
+ /* Display
+ ================================================== */
+ updateDisplay: function() {
+ if (this.ready) {
+ this._updateDisplay();
+ }
+ },
+
+ /*
+ Compute the height of the navigation section of the Timeline, taking into account
+ the possibility of an explicit height or height percentage, but also honoring the
+ `timenav_height_min` option value. If `timenav_height` is specified it takes precedence over `timenav_height_percentage` but in either case, if the resultant pixel height is less than `options.timenav_height_min` then the value of `options.timenav_height_min` will be returned. (A minor adjustment is made to the returned value to account for marker padding.)
+
+ Arguments:
+ @timenav_height (optional): an integer value for the desired height in pixels
+ @timenav_height_percentage (optional): an integer between 1 and 100
+
+ */
+ _calculateTimeNavHeight: function(timenav_height, timenav_height_percentage) {
+
+ var height = 0;
+
+ if (timenav_height) {
+ height = timenav_height;
+ } else {
+ if (this.options.timenav_height_percentage || timenav_height_percentage) {
+ if (timenav_height_percentage) {
+ height = Math.round((this.options.height/100)*timenav_height_percentage);
+ } else {
+ height = Math.round((this.options.height/100)*this.options.timenav_height_percentage);
+ }
+
+ }
+ }
+
+ // Set new minimum based on how many rows needed
+ if (this._timenav.ready) {
+ if (this.options.timenav_height_min < this._timenav.getMinimumHeight()) {
+ this.options.timenav_height_min = this._timenav.getMinimumHeight();
+ }
+ }
+
+ // If height is less than minimum set it to minimum
+ if (height < this.options.timenav_height_min) {
+ height = this.options.timenav_height_min;
+ }
+
+ height = height - (this.options.marker_padding * 2);
+
+ return height;
+ },
+
+ /* Private Methods
+ ================================================== */
+
+ // Update View
+ _updateDisplay: function(timenav_height, animate, d) {
+ var duration = this.options.duration,
+ display_class = this.options.base_class,
+ menu_position = 0,
+ self = this;
+
+ if (d) {
+ duration = d;
+ }
+
+ // Update width and height
+ this.options.width = this._el.container.offsetWidth;
+ this.options.height = this._el.container.offsetHeight;
+
+ // Check if skinny
+ if (this.options.width <= this.options.skinny_size) {
+ display_class += " tl-skinny";
+ this.options.layout = "portrait";
+ } else if (this.options.width <= this.options.medium_size) {
+ display_class += " tl-medium";
+ this.options.layout = "landscape";
+ } else {
+ this.options.layout = "landscape";
+ }
+
+ // Detect Mobile and Update Orientation on Touch devices
+ if (TL.Browser.touch) {
+ this.options.layout = TL.Browser.orientation();
+ }
+
+ if (TL.Browser.mobile) {
+ display_class += " tl-mobile";
+ // Set TimeNav Height
+ this.options.timenav_height = this._calculateTimeNavHeight(timenav_height, this.options.timenav_mobile_height_percentage);
+ } else {
+ // Set TimeNav Height
+ this.options.timenav_height = this._calculateTimeNavHeight(timenav_height);
+ }
+
+ // LAYOUT
+ if (this.options.layout == "portrait") {
+ // Portrait
+ display_class += " tl-layout-portrait";
+
+ } else {
+ // Landscape
+ display_class += " tl-layout-landscape";
+
+ }
+
+ // Set StorySlider Height
+ this.options.storyslider_height = (this.options.height - this.options.timenav_height);
+
+ // Positon Menu
+ if (this.options.timenav_position == "top") {
+ menu_position = ( Math.ceil(this.options.timenav_height)/2 ) - (this._el.menubar.offsetHeight/2) - (39/2) ;
+ } else {
+ menu_position = Math.round(this.options.storyslider_height + 1 + ( Math.ceil(this.options.timenav_height)/2 ) - (this._el.menubar.offsetHeight/2) - (35/2));
+ }
+
+
+ if (animate) {
+
+ // Animate TimeNav
+
+ /*
+ if (this.animator_timenav) {
+ this.animator_timenav.stop();
+ }
+
+ this.animator_timenav = TL.Animate(this._el.timenav, {
+ height: (this.options.timenav_height) + "px",
+ duration: duration/4,
+ easing: TL.Ease.easeOutStrong,
+ complete: function () {
+ //self._map.updateDisplay(self.options.width, self.options.timenav_height, animate, d, self.options.menubar_height);
+ }
+ });
+ */
+
+ this._el.timenav.style.height = Math.ceil(this.options.timenav_height) + "px";
+
+ // Animate StorySlider
+ if (this.animator_storyslider) {
+ this.animator_storyslider.stop();
+ }
+ this.animator_storyslider = TL.Animate(this._el.storyslider, {
+ height: this.options.storyslider_height + "px",
+ duration: duration/2,
+ easing: TL.Ease.easeOutStrong
+ });
+
+ // Animate Menubar
+ if (this.animator_menubar) {
+ this.animator_menubar.stop();
+ }
+
+ this.animator_menubar = TL.Animate(this._el.menubar, {
+ top: menu_position + "px",
+ duration: duration/2,
+ easing: TL.Ease.easeOutStrong
+ });
+
+ } else {
+ // TimeNav
+ this._el.timenav.style.height = Math.ceil(this.options.timenav_height) + "px";
+
+ // StorySlider
+ this._el.storyslider.style.height = this.options.storyslider_height + "px";
+
+ // Menubar
+ this._el.menubar.style.top = menu_position + "px";
+ }
+
+ if (this.message) {
+ this.message.updateDisplay(this.options.width, this.options.height);
+ }
+ // Update Component Displays
+ this._timenav.updateDisplay(this.options.width, this.options.timenav_height, animate);
+ this._storyslider.updateDisplay(this.options.width, this.options.storyslider_height, animate, this.options.layout);
+
+ if (this.options.language.direction == 'rtl') {
+ display_class += ' tl-rtl';
+ }
+
+
+ // Apply class
+ this._el.container.className = display_class;
+
+ },
+
+ // Update hashbookmark in the url bar
+ _updateHashBookmark: function(id) {
+ var hash = "#" + "event-" + id.toString();
+ if (window.location.protocol != 'file:') {
+ window.history.replaceState(null, "Browsing TimelineJS", hash);
+ }
+ this.fire("hash_updated", {unique_id:this.current_id, hashbookmark:"#" + "event-" + id.toString()}, this);
+ },
+
+ /* Init
+ ================================================== */
+ // Initialize the data
+ _initData: function(data) {
+ var self = this;
+
+ if (typeof data == 'string') {
+ var self = this;
+ TL.ConfigFactory.makeConfig(data, function(config) {
+ self.setConfig(config);
+ });
+ } else if (TL.TimelineConfig == data.constructor) {
+ this.setConfig(data);
+ } else {
+ this.setConfig(new TL.TimelineConfig(data));
+ }
+ },
+
+ setConfig: function(config) {
+ this.config = config;
+ this.config.validate();
+ this._validateOptions();
+ if (this.config.isValid()) {
+ try {
+ this._onDataLoaded();
+ } catch(e) {
+ this.showMessage("<strong>"+ this._('error') +":</strong> " + this._translateError(e));
+ }
+ } else {
+ var translated_errs = [];
+
+ for(var i = 0, errs = this.config.getErrors(); i < errs.length; i++) {
+ translated_errs.push(this._translateError(errs[i]));
+ }
+
+ this.showMessage("<strong>"+ this._('error') +":</strong> " + translated_errs.join('<br>'));
+ // should we set 'self.ready'? if not, it won't resize,
+ // but most resizing would only work
+ // if more setup happens
+ }
+ },
+ _validateOptions: function() {
+ // assumes that this.options and this.config have been set.
+ var INTEGER_PROPERTIES = ['timenav_height', 'timenav_height_min', 'marker_height_min', 'marker_width_min', 'marker_padding', 'start_at_slide', 'slide_padding_lr' ];
+
+ for (var i = 0; i < INTEGER_PROPERTIES.length; i++) {
+ var opt = INTEGER_PROPERTIES[i];
+ var value = this.options[opt];
+ valid = true;
+ if (typeof(value) == 'number') {
+ valid = (value == parseInt(value))
+ } else if (typeof(value) == "string") {
+ valid = (value.match(/^\s*(\-?\d+)?\s*$/));
+ }
+ if (!valid) {
+ this.config.logError({ message_key: 'invalid_integer_option', detail: opt });
+ }
+ }
+ },
+ // Initialize the layout
+ _initLayout: function () {
+ var self = this;
+
+ this.message.removeFrom(this._el.container);
+ this._el.container.innerHTML = "";
+
+ // Create Layout
+ if (this.options.timenav_position == "top") {
+ this._el.timenav = TL.Dom.create('div', 'tl-timenav', this._el.container);
+ this._el.storyslider = TL.Dom.create('div', 'tl-storyslider', this._el.container);
+ } else {
+ this._el.storyslider = TL.Dom.create('div', 'tl-storyslider', this._el.container);
+ this._el.timenav = TL.Dom.create('div', 'tl-timenav', this._el.container);
+ }
+
+ this._el.menubar = TL.Dom.create('div', 'tl-menubar', this._el.container);
+
+
+ // Initial Default Layout
+ this.options.width = this._el.container.offsetWidth;
+ this.options.height = this._el.container.offsetHeight;
+ // this._el.storyslider.style.top = "1px";
+
+ // Set TimeNav Height
+ this.options.timenav_height = this._calculateTimeNavHeight(this.options.timenav_height);
+
+ // Create TimeNav
+ this._timenav = new TL.TimeNav(this._el.timenav, this.config, this.options);
+ this._timenav.on('loaded', this._onTimeNavLoaded, this);
+ this._timenav.on('update_timenav_min', this._updateTimeNavHeightMin, this);
+ this._timenav.options.height = this.options.timenav_height;
+ this._timenav.init();
+
+ // intial_zoom cannot be applied before the timenav has been created
+ if (this.options.initial_zoom) {
+ // at this point, this.options refers to the merged set of options
+ this.setZoom(this.options.initial_zoom);
+ }
+
+ // Create StorySlider
+ this._storyslider = new TL.StorySlider(this._el.storyslider, this.config, this.options);
+ this._storyslider.on('loaded', this._onStorySliderLoaded, this);
+ this._storyslider.init();
+
+ // Create Menu Bar
+ this._menubar = new TL.MenuBar(this._el.menubar, this._el.container, this.options);
+
+ // LAYOUT
+ if (this.options.layout == "portrait") {
+ this.options.storyslider_height = (this.options.height - this.options.timenav_height - 1);
+ } else {
+ this.options.storyslider_height = (this.options.height - 1);
+ }
+
+
+ // Update Display
+ this._updateDisplay(this._timenav.options.height, true, 2000);
+
+ },
+
+ /* Depends upon _initLayout because these events are on things the layout initializes */
+ _initEvents: function () {
+ // TimeNav Events
+ this._timenav.on('change', this._onTimeNavChange, this);
+ this._timenav.on('zoomtoggle', this._onZoomToggle, this);
+
+ // StorySlider Events
+ this._storyslider.on('change', this._onSlideChange, this);
+ this._storyslider.on('colorchange', this._onColorChange, this);
+ this._storyslider.on('nav_next', this._onStorySliderNext, this);
+ this._storyslider.on('nav_previous', this._onStorySliderPrevious, this);
+
+ // Menubar Events
+ this._menubar.on('zoom_in', this._onZoomIn, this);
+ this._menubar.on('zoom_out', this._onZoomOut, this);
+ this._menubar.on('back_to_start', this._onBackToStart, this);
+
+ },
+
+ /* Analytics
+ ================================================== */
+ _initGoogleAnalytics: function() {
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+ ga('create', this.options.ga_property_id, 'auto');
+ ga('set', 'anonymizeIp', true);
+ },
+
+ _initAnalytics: function() {
+ if (this.options.ga_property_id === null) { return; }
+ this._initGoogleAnalytics();
+ ga('send', 'pageview');
+ var events = this.options.track_events;
+ for (i=0; i < events.length; i++) {
+ var event_ = events[i];
+ this.addEventListener(event_, function(e) {
+ ga('send', 'event', e.type, 'clicked');
+ });
+ }
+ },
+
+ _onZoomToggle: function(e) {
+ if (e.zoom == "in") {
+ this._menubar.toogleZoomIn(e.show);
+ } else if (e.zoom == "out") {
+ this._menubar.toogleZoomOut(e.show);
+ }
+
+ },
+
+ /* Get index of event by id
+ ================================================== */
+ _getEventIndex: function(id) {
+ for(var i = 0; i < this.config.events.length; i++) {
+ if(id == this.config.events[i].unique_id) {
+ return i;
+ }
+ }
+ return -1;
+ },
+
+ /* Get index of slide by id
+ ================================================== */
+ _getSlideIndex: function(id) {
+ if(this.config.title && this.config.title.unique_id == id) {
+ return 0;
+ }
+ for(var i = 0; i < this.config.events.length; i++) {
+ if(id == this.config.events[i].unique_id) {
+ return this.config.title ? i+1 : i;
+ }
+ }
+ return -1;
+ },
+
+ /* Events
+ ================================================== */
+
+ _onDataLoaded: function(e) {
+ this.fire("dataloaded");
+ this._initLayout();
+ this._initEvents();
+ this._initAnalytics();
+ if (this.message) {
+ this.message.hide();
+ }
+
+ this.ready = true;
+
+ },
+
+ showMessage: function(msg) {
+ if (this.message) {
+ this.message.updateMessage(msg);
+ } else {
+ trace("No message display available.")
+ trace(msg);
+ }
+ },
+
+ _onColorChange: function(e) {
+ this.fire("color_change", {unique_id:this.current_id}, this);
+ if (e.color || e.image) {
+
+ } else {
+
+ }
+ },
+
+ _onSlideChange: function(e) {
+ if (this.current_id != e.unique_id) {
+ this.current_id = e.unique_id;
+ this._timenav.goToId(this.current_id);
+ this._onChange(e);
+ }
+ },
+
+ _onTimeNavChange: function(e) {
+ if (this.current_id != e.unique_id) {
+ this.current_id = e.unique_id;
+ this._storyslider.goToId(this.current_id);
+ this._onChange(e);
+ }
+ },
+
+ _onChange: function(e) {
+ this.fire("change", {unique_id:this.current_id}, this);
+ if (this.options.hash_bookmark && this.current_id) {
+ this._updateHashBookmark(this.current_id);
+ }
+ },
+
+ _onBackToStart: function(e) {
+ this._storyslider.goTo(0);
+ this.fire("back_to_start", {unique_id:this.current_id}, this);
+ },
+
+ /**
+ * Zoom in and zoom out should be part of the public API.
+ */
+ zoomIn: function() {
+ this._timenav.zoomIn();
+ },
+ zoomOut: function() {
+ this._timenav.zoomOut();
+ },
+
+ setZoom: function(level) {
+ this._timenav.setZoom(level);
+ },
+
+ _onZoomIn: function(e) {
+ this._timenav.zoomIn();
+ this.fire("zoom_in", {zoom_level:this._timenav.options.scale_factor}, this);
+ },
+
+ _onZoomOut: function(e) {
+ this._timenav.zoomOut();
+ this.fire("zoom_out", {zoom_level:this._timenav.options.scale_factor}, this);
+ },
+
+ _onTimeNavLoaded: function() {
+ this._loaded.timenav = true;
+ this._onLoaded();
+ },
+
+ _onStorySliderLoaded: function() {
+ this._loaded.storyslider = true;
+ this._onLoaded();
+ },
+
+ _onStorySliderNext: function(e) {
+ this.fire("nav_next", e);
+ },
+
+ _onStorySliderPrevious: function(e) {
+ this.fire("nav_previous", e);
+ },
+
+ _onLoaded: function() {
+ if (this._loaded.storyslider && this._loaded.timenav) {
+ this.fire("loaded", this.config);
+ // Go to proper slide
+ if (this.options.hash_bookmark && window.location.hash != "") {
+ this.goToId(window.location.hash.replace("#event-", ""));
+ } else {
+ if( TL.Util.isTrue(this.options.start_at_end) || this.options.start_at_slide > this.config.events.length ) {
+ this.goToEnd();
+ } else {
+ this.goTo(this.options.start_at_slide);
+ }
+ if (this.options.hash_bookmark ) {
+ this._updateHashBookmark(this.current_id);
+ }
+ }
+
+ }
+ }
+
+});
+
+TL.Timeline.source_path = (function() {
+ var script_tags = document.getElementsByTagName('script');
+ var src = script_tags[script_tags.length-1].src;
+ return src.substr(0,src.lastIndexOf('/'));
+})();
+
diff --git a/www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.eot b/www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.eot
new file mode 100644
index 00000000..179ed2d3
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.eot
Binary files differ
diff --git a/www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.svg b/www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.svg
new file mode 100644
index 00000000..e90b1c32
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.svg
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Generated by IcoMoon</metadata>
+<defs>
+<font id="ti-icons" horiz-adv-x="1024">
+<font-face units-per-em="1024" ascent="960" descent="-64"/>
+<missing-glyph horiz-adv-x="1024"/>
+<glyph unicode=" " d="" horiz-adv-x="512"/>
+<glyph unicode="" d="M240.528 217.598h261.352l-130.673-281.606-130.68 281.606zM179.198 960h383.999c98.969 0 179.205-80.236 179.205-179.198v-384.006c0-98.969-80.228-179.198-179.205-179.198h-383.999c-98.969 0-179.198 80.228-179.198 179.198v384.006c0 98.962 80.228 179.198 179.198 179.198z" horiz-adv-x="742"/>
+<glyph unicode="" d="M681.974 701.665l151.347 131.328-145.439 123.904-9.759-68.362c-0.42-0.164-144.189 3.113-252.078-22.446-128.256-30.382-235.151-71.127-234.578-74.056 0.369-1.905 123.699 26.276 270.94 23.788 118.006-1.997 222.382-36.065 222.382-36.065l-2.816-78.090zM676.915 833.72c1.065 29.645 25.969 52.808 55.613 51.732 29.655-1.075 52.797-25.979 51.732-55.624s-25.979-52.808-55.624-51.732c-29.635 1.085-52.787 25.979-51.722 55.624zM376.023 428.902c0 0 5.448 10.711 11.919 19.251 12.042 15.903 31.703 41.267 49.94 75.223 22.067 41.103 27.341 57.702 53.074 82.35 18.309 17.531 101.018 123.863 123.72 156.068 26.399 37.468 73.114 91.812 87.030 100.014 32.205 18.944 51.272 9.533 65.075-16.855 3.85-7.363 2.54-15.401-2.017-27.945-6.676-18.074-13.199-24.269-24.934-40.223-16.937-23.030-43.244-53.821-47.821-62.822-13.998-27.607-62.73-98.867-62.73-98.867s35.154 30.321 78.121 19.528c24.125-8.899 46.981-22.026 48.835-39.055 3.574-32.983 0-58.593 0-58.593s29.297-1.423 39.066-29.297c9.759-27.873-4.014-78.766-4.014-78.766s14.899-5.898 21.975-29.481c7.076-23.583 6.298-64.85 7.731-75.151 2.836-20.613 3.236-7.68 2.437-22.221-0.215-3.625 0.379-21.146-9.226-43.489-29.030-67.461-94.249-191.744-98.693-213.852-1.638-8.12 1.966-21.023 0.973-27.474-2.529-16.927-7.506-22.477-3.932-27.464 4.925-6.871-0.696-5.97-5.151-19.231-4.444-13.23-295.025-62.863-332.032 19.528-12.431 27.699-16.599 71.301-34.355 105.144-9.574 18.248-43.868 62.034-72.53 126.546-24.515 55.163-43.561 132.168-45.885 148.419-3.676 25.723 15.841 61.891 26.644 101.724 8.991 33.167 16.978 69.714 25.641 76.493 27.648 21.637 51.466 25.416 51.466 25.416s7.967 6.861 11.069 7.895c3.113 1.034 22.804 39.844 45.261 40.868 12.82 0.584 23.142-8.581 27.638-31.59 1.29-6.615 1.331-20.009-1.034-33.659-2.56-14.674-15.124-29.348-24.617-45.117-12.308-20.449-28.948-25.344-28.826-24.084-1.085-6.738 7.567-12.933 2.847-28.979-4.884-16.548-11.039-12.145-12.616-19.855 0 0 14.131 2.785 19.528 0 4.649-2.376 10.424-10.394 10.424-10.394z"/>
+<glyph unicode="" d="M143.036 699.751l-143.036 137.111 152.096 123.138 5.741-69.879c0.398-0.184 143.782 0.051 249.738-28.315 125.977-33.739 230.055-77.57 229.319-80.543-0.48-1.931-121.677 29.449-268.472 30.092-117.663 0.501-223.62-31.972-223.62-31.972l-1.767-79.634zM101.105 889.171c-29.582-0.449-54.107-25.343-54.771-55.578s22.789-54.383 52.371-53.923c29.592 0.449 54.117 25.332 54.781 55.568 0.664 30.246-22.789 54.383-52.381 53.933zM356.277 24.878c-27.672 14.341-45.874 12.636-99.307 35.384-56.783 24.188-121.82 59.112-139.41 78.857-16.354 18.356-30.94 56.416-46.589 86.631-17.018 32.901-34.413 57.866-34.546 73.607-0.153 16.435 12.799 37.845 19.878 68.806 5.935 25.976 0.388 54.066 11.471 68.867 12.83 17.13 80.522-12.901 79.429-104.169 21.114-26.722 31.318-52.013 31.318-52.013l12.799 4.178c0-0.194-0.97 175.335-22.768 237.154-9.694 27.498-32.023 87.478-62.401 155.008-31.87 70.839-50.185 161.351-25.935 177.766 49.613 33.555 55.343-25.782 82.545-78.193 11.992-23.116 39.132-44.883 49.878-66.028 18.897-37.171 35.976-64.475 36.793-64.077 3.422 1.645-4.321 47.079 35.435 72.146 21.277 13.422 55.701-6.139 73.627-17.477 47.386-29.949 47.876-46.395 46.998-43.137 0 0 29.173 11.154 53.024-0.633 41.032-20.286 56.395-65.721 53.699-65.486 0 0 15.414 7.273 37.753 1.164 48.867-13.371 57.406-66.273 71.503-87.867 27.672-42.391 79.664-235.775 74.628-306.757-2.574-36.231 37.529-74.608 16.711-135.467-41.431-121.146-265.020-150.738-318.075-109.828-7.395 5.69-10.787 57.253-38.458 71.564z" horiz-adv-x="719"/>
+<glyph unicode="" d="M306.34 615.24c0 0-49.152-62.198-93.164-128.215-36.188-54.272-68.792-114.698-68.792-114.698l-67.308 17.49c0 0 30.126-233.103 41.83-234.373 11.684-1.27 182.446 148.613 182.446 148.613-1.772-0.020-66.673 28.191-66.673 28.191s11.223 62.935 27.095 125.614c19.569 77.281 44.564 157.379 44.564 157.379zM174.141 214.897c-32.215 0-58.327 26.122-58.327 58.317 0 32.215 26.122 58.327 58.327 58.327 32.215 0 58.327-26.112 58.327-58.327 0-32.195-26.112-58.317-58.327-58.317zM686.1 952.504c-5.028 10.619-255.252-33.096-255.252-33.096l58.716-62.116c0 0-38.318-33.864-72.253-78.633-50.77-66.97-104.11-154.020-104.11-154.020s74.23 69.868 142.991 115.128c50.156 33.024 100.864 45.363 100.864 45.363s47.933-52.050 48.486-53.729c0.010 0 85.596 210.473 80.558 221.102zM572.703 798.167c-32.215 0-58.327 26.112-58.327 58.327 0 32.205 26.112 58.327 58.327 58.327 32.215 0 58.317-26.112 58.317-58.327 0-32.215-26.102-58.327-58.317-58.327zM733.317-49.009c47.872-46.612 288.42 131.123 241.152 192.86-21.914 28.631-40.714 69.151-50.463 97.044-45.138 129.106-46.674 137.605-69.253 197.54-5.96 15.831-7.793 78.438-37.612 87.419-3.697 39.322-12.861 76.964-48.23 76.984-6.185 25.836-13.926 48.742-25.272 63.754-25.672 34.028-77.947-5.55-77.947-5.55s6.339 10.65-4.731 46.223c-10.025 32.225-36.864 87.808-49.121 121.16-13.312 36.147-15.524 68.362-34.99 69.601-14.817 0.932-29.071-15.862-36.444-45.998-9.677-39.649 6.881-111.923 6.543-177.644-0.143-27.658 5.478-69.765 6.717-84.685 2.734-32.911-17.152-53.187-20.419-89.733-2.437-27.361-12.227-176.783-99.922-199.956-50.299-13.302-98.109 14.387-147.732 28.303-34.017 9.554-129.905 10.158-148.357-44.78-20.623-61.389 158.781-75.254 207.718-112.937 15.575-11.991 63.14-36.895 108.022-66.826 30.454-20.285 53.238-44.329 88.75-62.771 47.432-24.617 86.405-32.881 118.364-44.39 16.046-5.786 50.35-23.347 73.226-45.619z"/>
+<glyph unicode="" d="M459.52 683.756l-65.229 27.955c0 0 4.628 51.446 18.637 111.811 15.493 66.785 37.274 130.458 37.274 130.458s-47.35-60.447-93.184-121.139c-37.693-49.91-55.91-83.855-55.91-83.855l-65.229 18.637 65.229-167.721 158.413 83.855zM282.337 683.827c0 30.884 25.037 55.91 55.91 55.91 30.884 0 55.9-25.027 55.9-55.91 0-30.874-25.016-55.91-55.9-55.91-30.874 0-55.91 25.037-55.91 55.91zM124.078 516.035l83.855-18.637c0 0-11.203-81.644-15.913-135.301-7.055-80.241-5.96-178.084-5.96-178.084s24.607 94.556 57.344 166.369c23.88 52.367 67.031 109.752 67.031 109.752l65.229-18.637-73.974 158.413-177.613-83.876zM319.713 554.435c17.93-25.139 12.093-60.047-13.046-77.988-25.139-17.93-60.037-12.093-77.988 13.036-17.93 25.129-12.093 60.047 13.046 77.988 25.139 17.93 60.047 12.104 77.988-13.036zM512.256 410.87c0 0 48.64 10.424 61.532 86.272 0.573 3.348 5.222 21.678 4.157 35.748-0.758 9.964-7.281 17.449-7.281 17.449s-26.184-20.521-45.507-18.698c-15.237 1.434-25.917 3.174-34.294 26.778-7.475 21.002 1.188 56.668 1.188 56.668l-4.014 27.668c0.215 0.481-47.442 2.54-47.442 2.54s-54.579-10.179-93.553-4.157c-30.628 4.721-48.077 22.405-45.804 42.772 3.625 32.42 103.332 49.060 181.299 61.614 19.343 3.123 39.485 16.118 53.996 17.254 21.309 1.669 39.567-13.097 39.567-13.097s56.34 31.416 78.971 39.7c40.253 14.725 89.303-68.485 145.213-146.77 20.040-28.078 53.699-56.166 66.12-76.79 41.933-69.642 27.003-316.938 107.633-417.516 37.059-46.223-27.525-113.654-65.362-144.189-67.123-54.2-179.098-95.222-208.333-46.152-5.847 9.83-30.904 37.847-66.028 65.751-31.334 24.883-73.359 45.251-105.738 88.474-35.308 47.145-65.454 99.215-108.257 153.539-15.206 19.313-24.73 51.937-38.164 69.99-19.732 26.522-39.926 43.704-57.006 66.847-14.899 20.214-34.427 56.699-50.883 69.755-30.065 23.9-42.854 57.58-23.132 78.93 27.822 30.106 74.711 18.463 99.4 2.519 66.181-42.732 75.592-68.946 105.196-107.274 21.412-27.709 56.525-35.625 56.525-35.625z"/>
+<glyph unicode="" d="M0 832v-832h1024v832h-1024zM960 64h-896v704h896v-704zM704 608c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96-53.019 0-96 42.981-96 96zM896 128h-768l192 512 256-320 128 96z"/>
+<glyph unicode="" d="M0 651.63l41.594-54.544c0 0 85.77 67.608 114.36 33.802 28.588-33.802 137.736-441.956 174.17-517.246 31.8-66.030 119.518-153.32 215.714-90.982 96.136 62.34 415.84 335.286 473.066 657.616 57.18 322.226-384.72 254.726-431.53-26.010 116.99 70.236 179.436-28.538 119.57-140.372-59.758-111.724-114.36-184.592-142.952-184.592-28.538 0-50.49 74.768-83.188 205.446-33.798 135.102-33.592 378.46-174.116 350.87-132.518-26.012-306.688-233.988-306.688-233.988z"/>
+<glyph unicode="" d="M1024 765.582c-37.676-16.708-78.164-28.002-120.66-33.080 43.372 26 76.686 67.17 92.372 116.23-40.596-24.078-85.556-41.56-133.41-50.98-38.32 40.83-92.922 66.34-153.346 66.34-116.022 0-210.088-94.058-210.088-210.078 0-16.466 1.858-32.5 5.44-47.878-174.6 8.764-329.402 92.4-433.018 219.506-18.084-31.028-28.446-67.116-28.446-105.618 0-72.888 37.088-137.192 93.46-174.866-34.438 1.092-66.832 10.542-95.154 26.278-0.020-0.876-0.020-1.756-0.020-2.642 0-101.788 72.418-186.696 168.522-206-17.626-4.8-36.188-7.372-55.348-7.372-13.538 0-26.698 1.32-39.528 3.772 26.736-83.46 104.32-144.206 196.252-145.896-71.9-56.35-162.486-89.934-260.916-89.934-16.958 0-33.68 0.994-50.116 2.94 92.972-59.61 203.402-94.394 322.042-94.394 386.422 0 597.736 320.124 597.736 597.744 0 9.108-0.206 18.168-0.61 27.18 41.056 29.62 76.672 66.62 104.836 108.748z"/>
+<glyph unicode="" d="M559.066 896c0 0-200.956 0-267.94 0-120.12 0-233.17-91.006-233.17-196.422 0-107.726 81.882-194.666 204.088-194.666 8.498 0 16.756 0.17 24.842 0.752-7.93-15.186-13.602-32.288-13.602-50.042 0-29.938 16.104-54.21 36.468-74.024-15.386 0-30.242-0.448-46.452-0.448-148.782 0.002-263.3-94.758-263.3-193.020 0-96.778 125.542-157.314 274.334-157.314 169.624 0 263.306 96.244 263.306 193.028 0 77.6-22.896 124.072-93.686 174.134-24.216 17.144-70.53 58.836-70.53 83.344 0 28.72 8.196 42.868 51.428 76.646 44.312 34.624 75.672 83.302 75.672 139.916 0 67.406-30.020 133.098-86.372 154.772h84.954l59.96 43.344zM465.48 240.542c2.126-8.972 3.284-18.206 3.284-27.628 0-78.2-50.392-139.31-194.974-139.31-102.842 0-177.116 65.104-177.116 143.3 0 76.642 92.126 140.444 194.964 139.332 24-0.254 46.368-4.116 66.67-10.69 55.826-38.826 95.876-60.762 107.172-105.004zM300.818 532.224c-69.038 2.064-134.636 77.226-146.552 167.86-11.916 90.666 34.37 160.042 103.388 157.99 69.010-2.074 134.638-74.814 146.558-165.458 11.906-90.66-34.39-162.458-103.394-160.392zM832 704v192h-64v-192h-192v-64h192v-192h64v192h192v64z"/>
+<glyph unicode="" d="M832 832h-640c-105.6 0-192-86.4-192-192v-384c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v384c0 105.6-86.4 192-192 192zM384 192v512l320-256-320-256z"/>
+<glyph unicode="" d="M0 768h1024v-64h-1024zM0 640h704v-64h-704zM0 512h1024v-64h-1024zM0 384h704v-64h-704zM0 256h1024v-64h-1024zM0 128h704v-64h-704z"/>
+<glyph unicode="" d="M896 768h-768v-640h768v640zM1024 896v0-896h-1024v896h1024zM832 192h-640v128l192 320 263-320 185 128v-64zM640 608c0 53.019 42.981 96 96 96s96-42.981 96-96c0-53.019-42.981-96-96-96-53.019 0-96 42.981-96 96z"/>
+<glyph unicode="" d="M225 512c123.712 0 224-100.29 224-224 0-123.712-100.288-224-224-224-123.712 0-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.634-11.636-22.252-24.016-31.83-37.020 11.438 1.8 23.16 2.746 35.104 2.746zM801 512c123.71 0 224-100.29 224-224 0-123.712-100.29-224-224-224-123.71 0-224 100.288-224 224l-1 32c0 247.424 200.576 448 448 448v-128c-85.474 0-165.834-33.286-226.274-93.726-11.636-11.636-22.254-24.016-31.832-37.020 11.44 1.8 23.16 2.746 35.106 2.746z"/>
+<glyph unicode="" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384 0-212.078 171.922-384 384-384 95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM448 768h-128v-128h-128v-128h128v-128h128v128h128v128h-128z"/>
+<glyph unicode="" d="M992.262 88.604l-242.552 206.294c-25.074 22.566-51.89 32.926-73.552 31.926 57.256 67.068 91.842 154.078 91.842 249.176 0 212.078-171.922 384-384 384-212.076 0-384-171.922-384-384 0-212.078 171.922-384 384-384 95.098 0 182.108 34.586 249.176 91.844-1-21.662 9.36-48.478 31.926-73.552l206.294-242.552c35.322-39.246 93.022-42.554 128.22-7.356s31.892 92.898-7.354 128.22zM384 320c-141.384 0-256 114.616-256 256s114.616 256 256 256 256-114.616 256-256-114.614-256-256-256zM192 640h384v-128h-384z"/>
+<glyph unicode="" d="M384 896h640v-128h-640v128zM384 512h640v-128h-640v128zM384 128h640v-128h-640v128zM0 832c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128-70.692 0-128 57.308-128 128zM0 448c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128-70.692 0-128 57.308-128 128zM0 64c0 70.692 57.308 128 128 128s128-57.308 128-128c0-70.692-57.308-128-128-128-70.692 0-128 57.308-128 128z"/>
+<glyph unicode="" d="M320 768l704 192v-736c0-88.366-100.29-160-224-160s-224 71.634-224 160c0 88.366 100.29 160 224 160 34.358 0 66.902-5.532 96-15.406v329.588l-448-122.182v-480c0-88.366-100.288-160-224-160-123.712 0-224 71.634-224 160 0 88.366 100.288 160 224 160 34.358 0 66.902-5.532 96-15.406v527.406z"/>
+<glyph unicode="" d="M512 960c-176.732 0-320-143.268-320-320 0-320 320-704 320-704s320 384 320 704c0 176.732-143.27 320-320 320zM512 448c-106.040 0-192 85.96-192 192s85.96 192 192 192 192-85.96 192-192-85.96-192-192-192z"/>
+<glyph unicode="" d="M874.040 810.038c96.702-96.704 149.96-225.28 149.96-362.040s-53.258-265.334-149.96-362.038c-96.706-96.702-225.28-149.96-362.040-149.96-136.76 0-265.334 53.258-362.040 149.96-96.702 96.704-149.96 225.278-149.96 362.038 0 136.76 53.254 265.336 149.96 362.040 96.706 96.704 225.28 149.962 362.040 149.962 136.76 0 265.334-53.258 362.040-149.962zM828.784 131.214c63.058 63.060 104.986 141.608 122.272 227.062-13.474-19.836-26.362-27.194-34.344 17.206-8.22 72.39-74.708 26.148-116.516 51.86-44.004-29.658-142.906 57.662-126.098-40.824 25.934-44.422 140.008 59.45 83.148-34.542-36.274-65.616-132.642-210.932-120.106-286.258 1.582-109.744-112.134-22.884-151.314 13.52-26.356 72.92-8.982 200.374-77.898 236.086-74.802 3.248-139.004 10.046-167.994 93.67-17.446 59.828 18.564 148.894 82.678 162.644 93.85 58.966 127.374-69.054 215.39-71.434 27.328 28.594 101.816 37.686 107.992 69.75-57.75 10.19 73.268 48.558-5.528 70.382-43.47-5.112-71.478-45.074-48.368-78.958-84.238-19.642-86.936 121.904-167.91 77.258-2.058-70.59-132.222-22.886-45.036-8.572 29.956 13.088-48.86 51.016-6.28 44.124 20.916 1.136 91.332 25.812 72.276 42.402 39.21 24.34 72.16-58.29 110.538 1.882 27.708 46.266-11.62 54.808-46.35 31.356-19.58 21.924 34.57 69.276 82.332 89.738 15.918 6.82 31.122 10.536 42.746 9.484 24.058-27.792 68.55-32.606 70.878 3.342-59.582 28.534-125.276 43.608-193.292 43.608-97.622 0-190.47-31.024-267.308-88.39 20.65-9.46 32.372-21.238 12.478-36.296-15.456-46.054-78.17-107.876-133.224-99.124-28.586-49.296-47.412-103.606-55.46-160.528 46.112-15.256 56.744-45.45 46.836-55.55-23.496-20.488-37.936-49.53-45.376-81.322 15.010-91.836 58.172-176.476 125.27-243.576 84.616-84.614 197.118-131.214 316.784-131.214 119.664 0 232.168 46.6 316.784 131.214z"/>
+<glyph unicode="" d="M864 256c-45.16 0-85.92-18.738-115.012-48.83l-431.004 215.502c1.314 8.252 2.016 16.706 2.016 25.328s-0.702 17.076-2.016 25.326l431.004 215.502c29.092-30.090 69.852-48.828 115.012-48.828 88.366 0 160 71.634 160 160s-71.634 160-160 160-160-71.634-160-160c0-8.622 0.704-17.076 2.016-25.326l-431.004-215.504c-29.092 30.090-69.852 48.83-115.012 48.83-88.366 0-160-71.636-160-160 0-88.368 71.634-160 160-160 45.16 0 85.92 18.738 115.012 48.828l431.004-215.502c-1.312-8.25-2.016-16.704-2.016-25.326 0-88.368 71.634-160 160-160s160 71.632 160 160c0 88.364-71.634 160-160 160z"/>
+<glyph unicode="" d="M891.96 445.796c-18.086 0-35.348-3.52-51.064-9.856-10.506 114.358-110.29 204.060-232 204.060-29.786 0-58.682-5.63-84.318-15.164-9.96-3.702-12.578-7.52-12.578-14.916v-402.714c0-7.766 6.24-14.234 14.124-14.996 0.336-0.034 363.536-0.21 365.89-0.21 72.904 0 131.986 56.816 131.986 126.894s-59.134 126.902-132.040 126.902zM400 192h32l16 224.22-16 223.78h-32l-16-223.78zM304 192h-32l-16 162.75 16 157.25h32l16-160zM144 192h32l16 128-16 128h-32l-16-128zM16 256h32l16 64-16 64h-32l-16-64z"/>
+<glyph unicode="" d="M832 832h-640c-105.6 0-192-86.4-192-192v-384c0-105.6 86.4-192 192-192h640c105.6 0 192 86.4 192 192v384c0 105.6-86.4 192-192 192zM960 256c0-33.978-13.374-66.062-37.654-90.346-24.284-24.28-56.366-37.654-90.346-37.654h-640c-33.978 0-66.062 13.374-90.344 37.654-24.282 24.284-37.656 56.368-37.656 90.346v384c0 33.978 13.374 66.062 37.656 90.344s56.366 37.656 90.344 37.656h640c33.978 0 66.062-13.374 90.346-37.656 24.282-24.282 37.654-56.366 37.654-90.344v-384zM384 192l320 256-320 256z"/>
+<glyph unicode="" d="M576.032 512l-0.002-234.184c0-59.418-0.77-93.656 5.53-110.5 6.25-16.754 21.918-34.146 38.99-44.202 22.684-13.588 48.542-20.376 77.708-20.376 51.854 0 82.478 6.848 133.742 40.54v-153.944c-43.7-20.552-81.866-32.594-117.324-40.922-35.5-8.242-73.86-12.406-115.064-12.406-46.828 0-74.456 5.886-110.41 17.656-35.958 11.868-66.66 28.806-92.020 50.54-25.45 21.922-43.022 45.208-52.848 69.832-9.826 24.636-14.716 60.414-14.716 107.244v359.1h-137.426v145.006c40.208 13.042 85.164 31.788 113.78 56.152 28.754 24.45 51.766 53.706 69.106 87.944 17.392 34.146 29.348 77.712 35.872 130.516h165.084l-0.002-255.996h255.968v-192h-255.968z"/>
+<glyph unicode="" d="M819.58 146.372c-106.666 0.418-163.498 52.582-202.992 144.502l-11.298 25.082-97.37 222c-32.292 78.586-112.422 131.672-202.834 131.672-122.334 0-221.584-99.252-221.584-221.672 0-122.418 99.248-221.668 221.584-221.668 85.338 0 159.542 48.25 196.582 119l39.376-90.832c-55.912-68.17-140.876-111.584-235.954-111.584-168.51 0-305.090 136.502-305.090 305.086 0 168.504 136.58 305.172 305.084 305.172 127.166 0 229.836-67.918 282-188.252 3.956-9.336 55.158-129.086 99.826-231 27.668-63.082 51.26-104.918 127.756-107.504 75.168-2.582 126.756 43.168 126.756 101.008 0 56.5-39.336 70.082-105.75 92.164-119.382 39.334-181.006 78.834-181.006 173.502 0 92.336 62.832 153.918 164.914 153.918 66.496 0 114.506-29.586 147.76-88.586l-65.256-33.332c-24.59 34.414-51.708 48-86.172 48-47.912 0-82.126-33.336-82.126-77.666 0-62.922 56.294-72.422 135.006-98.254 105.958-34.5 155.208-73.92 155.208-172.336 0.002-103.336-88.672-178.588-204.42-178.42z"/>
+<glyph unicode="" d="M235.278 711.28c-50.792 0-94.484-16.806-131.084-50.416-38.086-35.852-57.14-80.66-57.14-134.436 0-35.852 10.376-69.462 31.294-100.832 18.674-29.126 38.18-47.806 63.778-56.024v-2.242c-25.598-10.448-36.966-36.59-36.966-78.418 0-32.124 11.372-56.022 36.966-71.708v-2.242c-70.654-23.146-102.992-66.094-102.992-128.83 0-54.534 23.748-94.488 70.066-119.878 36.59-20.172 83.578-30.254 140.346-30.254 138.17 0 207.406 57.882 207.406 173.664 0 72.446-53.322 116.882-160.128 133.316-24.646 3.726-43.286 12.696-55.982 26.89-9.708 9.708-14.542 19.418-14.542 29.126 0 27.632 14.958 43.696 44.82 48.176 45.558 6.714 82.728 27.824 111.486 63.296 28.75 35.48 43.13 77.118 43.13 124.916 0 14.938-4.518 30.996-10.488 48.172 19.418 4.488 33.050 8.594 43.292 12.332v115.392c-45.054-17.928-86.99-26.884-122.842-26.884-31.374 17.922-63.824 26.884-100.42 26.884zM247.602 152.23c62.744 0 94.104-19.042 94.104-57.14 0-40.336-28.754-60.492-86.264-60.492-65.724 0-98.586 19.422-98.586 58.254-0.002 39.59 30.244 59.378 90.746 59.378zM239.76 448c-47.054 0-70.586 25.764-70.586 77.308 0 55.262 23.532 82.906 70.586 82.906 22.402 0 39.958-8.596 52.652-25.768 10.458-15.69 15.69-34.36 15.69-56.022 0-52.278-22.786-78.424-68.342-78.424zM580.384 960c-21.656 0-40.14-8.214-55.454-24.648-15.314-16.436-22.97-36.216-22.97-59.376 0-22.41 7.658-41.82 22.97-58.258 15.308-16.434 33.792-24.64 55.454-24.64 20.91 0 39.028 8.208 54.34 24.64 15.312 16.438 22.96 35.848 22.96 58.258 0 23.16-7.648 42.944-22.96 59.376-15.318 16.434-33.43 24.648-54.34 24.648zM643.13 704.002h-126.606c1.496-14.336-0.64-36.042-0.64-71.14v-348.432c0-35.856 2.136-64.774 0.64-76.036h126.606c-1.5 16.376-5.394 44.668-5.394 82.758v343.946c-0.006 32.864 3.894 54.568 5.394 68.904zM922.336 315.8c-32.872 0-49.082 25.028-49.082 75.066v206.64h49.864c8.96 0 17.032 0.492 27.118-0.246 10.086-0.748 14.152-0.25 19.278-0.25v106.99h-96.258v47.616c0 17.922 2.816 34.302 5.054 44.542h-129.958c2.242-10.24 2.028-25.876 2.028-46.79v-45.368h-56.32v-106.988c15.364 2.24 29.090 3.356 38.796 3.356l17.524-1.118v-202.786c0-62.742 7.958-108.672 23.636-137.8 20.922-38.84 57.622-58.258 112.136-58.258 38.848 0 73.118 7.464 98.714 22.41v112.032c-20.474-12.7-39.382-19.048-62.53-19.048z"/>
+<glyph unicode="" d="M761.862-64c113.726 206.032 132.888 520.306-313.862 509.824v-253.824l-384 384 384 384v-248.372c534.962 13.942 594.57-472.214 313.862-775.628z"/>
+<glyph unicode="" d="M192 448h192v-64h-192v64zM192 320h192v-64h-192v64zM192 192h192v-64h-192v64zM903.432 760.57l-142.864 142.862c-31.112 31.112-92.568 56.568-136.568 56.568h-480c-44 0-80-36-80-80v-864c0-44 36-80 80-80h736c44 0 80 36 80 80v608c0 44-25.456 105.458-56.568 136.57zM858.178 715.314c3.13-3.13 6.25-6.974 9.28-11.314h-163.458v163.456c4.34-3.030 8.184-6.15 11.314-9.28l142.864-142.862zM896 16c0-8.672-7.328-16-16-16h-736c-8.672 0-16 7.328-16 16v864c0 8.672 7.328 16 16 16h480c4.832 0 10.254-0.61 16-1.704v-254.296h254.296c1.094-5.746 1.704-11.166 1.704-16v-608zM576 256h188.792c-14.826-73.032-79.386-128-156.792-128-88.366 0-160 71.634-160 160 0 77.406 54.97 141.966 128 156.792v-188.792zM672 512c88.366 0 160-71.634 160-160 0-10.958-1.108-21.66-3.208-32h-188.792v188.792c10.34 2.1 21.042 3.208 32 3.208z"/>
+<glyph unicode="" d="M459.33 300.168l-170.654-295.668h564.654l170.67 295.668zM975.612 384l-292.934 507.5h-341.348l292.956-507.5zM292.836 807.486l-292.836-507.318 170.676-295.668 292.832 507.324z"/>
+<glyph unicode="" d="M575.87-64h-191.87v512h-128v176.45l128 0.058-0.208 103.952c0 143.952 39.034 231.54 208.598 231.54h141.176v-176.484h-88.23c-66.032 0-69.206-24.656-69.206-70.684l-0.262-88.324h158.69l-18.704-176.45-139.854-0.058-0.13-512z"/>
+<glyph unicode="" d="M800 544c-70.58 0-128-57.42-128-128s57.42-128 128-128c70.58 0 128 57.42 128 128 0 70.58-57.42 128-128 128zM800 640v0c123.71 0 224-100.288 224-224 0-123.71-100.29-224-224-224-123.71 0-224 100.29-224 224 0 123.712 100.29 224 224 224zM0 416c0 123.712 100.288 224 224 224s224-100.288 224-224c0-123.712-100.288-224-224-224-123.712 0-224 100.288-224 224z"/>
+<glyph unicode="" d="M765.666 733.654c-6.882-9.804-64.486-87.23-200.556-138.228-62.704 115.206-132.206 209.85-142.782 224.012 28.776 6.936 58.798 10.64 89.674 10.64 97.23 0 186.088-36.47 253.664-96.424zM538.752 444.076c-197.352-63.796-302.372-237.678-311.042-252.522-61.116 67.842-98.374 157.576-98.374 255.858 0 3.916 0.078 7.81 0.196 11.696 16.744-0.342 202.18-2.732 393.278 54.458 10.952-21.44 21.416-43.202 31.024-64.94-5.064-1.426-10.092-2.94-15.082-4.55zM512 960c-282.77 0-512-229.23-512-512s229.23-512 512-512 512 229.23 512 512-229.23 512-512 512zM512.002 0c-247.030 0-448.002 200.97-448.002 448 0 247.028 200.972 448 448.002 448 247.032 0 447.998-200.972 447.998-448 0-247.030-200.966-448-447.998-448zM619.918 483.098c-7.946 18.66-16.482 37.198-25.388 55.428 141.484 57.762 205.61 139.964 213.676 150.878 53.292-65.116 85.566-148.052 86.412-238.372-12.618 2.668-139.13 28.328-266.458 12.316-2.682 6.552-5.426 13.134-8.242 19.75zM491.188 572.412c-178.996-47.532-336.65-46.848-353.766-46.622 24.814 118.742 104.836 217.432 211.892 267.926 10.088-13.834 78.472-108.594 141.874-221.304zM577.32 384.5c0.84 0.292 1.68 0.564 2.522 0.852 53.724-139.606 75.942-256.612 81.636-290.186-45.946-19.568-96.466-30.41-149.476-30.41-88.464 0-170.002 30.184-234.882 80.78 6.886 14.078 84.364 163.754 300.2 238.964zM651.464 403.036c119.916 19.192 225.266-12.232 238.36-16.36-17.060-106.474-78.172-198.428-164.020-256.472-3.922 23.276-24.288 135.294-74.34 272.832z"/>
+<glyph unicode="" d="M778.24 460.8c0-147.046-119.245-266.24-266.24-266.24-147.046 0-266.24 119.194-266.24 266.24 0 17.51 1.741 34.611 5.018 51.2h-179.098v-353.894c0-75.981 61.542-137.626 137.626-137.626h605.389c75.981 0 137.626 61.594 137.626 137.626v353.894h-179.046c3.226-16.589 4.966-33.69 4.966-51.2zM814.694 901.12h-605.389c-76.032 0-137.626-61.645-137.626-137.626v-149.094h222.925c48.179 68.096 127.59 112.64 217.395 112.64s169.216-44.544 217.395-112.64h222.925v149.094c0 75.981-61.645 137.626-137.626 137.626zM882.022 731.136c0-13.568-11.059-24.576-24.576-24.576h-73.677c-13.517 0-24.576 11.059-24.576 24.576v73.728c0 13.568 11.11 24.576 24.576 24.576h73.677c13.568 0 24.576-11.059 24.576-24.576v-73.728zM675.84 460.8c0 90.522-73.37 163.84-163.84 163.84s-163.84-73.318-163.84-163.84 73.37-163.84 163.84-163.84 163.84 73.318 163.84 163.84z"/>
+<glyph unicode="" d="M441.139 295.526c-26.88-140.954-59.699-276.122-156.979-346.726-30.003 213.094 44.083 373.094 78.49 542.976-58.675 98.816 7.066 297.574 130.867 248.576 152.32-60.262-131.891-367.258 58.88-405.606 199.219-40.038 280.525 345.6 157.030 470.989-178.483 181.146-519.578 4.198-477.594-255.027 10.189-63.386 75.674-82.637 26.163-170.086-114.227 25.293-148.326 115.405-143.923 235.52 7.066 196.557 176.64 334.182 346.726 353.229 215.142 24.115 417.024-78.95 444.826-281.293 31.386-228.352-97.024-475.699-327.117-457.882-62.31 4.762-88.474 35.635-137.37 65.331z"/>
+<glyph unicode="" d="M716.749 696.32l0.051-471.040-409.6 235.52z"/>
+<glyph unicode="" d="M747.52 665.549l-471.040 0.051 235.52-409.6z"/>
+<glyph unicode="" d="M276.48 256h471.040l-235.571 409.6z"/>
+<glyph unicode="" d="M307.251 696.32l-0.051-471.040 409.6 235.52z"/>
+<glyph unicode="" d="M768 163.84h-665.6v460.8h132.864c0 0 35.277 45.875 111.104 102.4h-295.168c-28.262 0-51.2-22.938-51.2-51.2v-563.2c0-28.314 22.938-51.2 51.2-51.2h768c28.314 0 51.2 22.886 51.2 51.2v191.795l-102.4-84.224v-56.371zM684.134 519.68v-181.76l339.866 266.291-339.866 255.949v-160.256c-412.774-0.051-412.774-408.064-412.774-408.064 116.838 191.898 188.723 227.84 412.774 227.84z"/>
+<glyph unicode="" d="M251.699 778.086c-82.432 0-149.299-68.762-149.299-153.6s66.867-153.6 149.299-153.6c149.248 0 49.766-296.96-149.299-296.96v-71.629c355.226 0 494.438 675.789 149.299 675.789zM681.728 778.086c-82.432 0-149.299-68.762-149.299-153.6s66.867-153.6 149.299-153.6c149.248 0 49.766-296.96-149.299-296.96v-71.629c355.277 0 494.49 675.789 149.299 675.789z"/>
+<glyph unicode="" d="M887.757 752.23c0 58.88-88.678 65.434-88.678 65.434l-208.333 13.107c0 0-4.454 56.73-46.592 76.39-42.086 19.61-88.371 13.67-121.6 13.312s-41.165-42.803-41.165-82.842 0.768-86.118 0.768-115.2c0-52.019-22.886-74.189-80.179-74.189h-118.118c-33.024 2.15-58.778-3.277-58.778-30.003 0-26.675 38.912-254.566 92.262-307.149 30.976-30.515 220.365-51.917 260.25-51.917s26.624 117.811 37.683 117.811 23.296-66.56 86.118-82.125c62.822-15.667 146.688-12.749 151.142-57.446 5.786-58.982 11.059-135.322-27.75-140.749l-87.808-3.482c-60.211 4.352-44.083 70.093-17.51 70.093s39.885 1.075 39.885 1.075l3.328 71.987c0 0-137.882 16.282-143.77-76.749-5.325-84.992 9.267-125.082 19.968-133.786 10.752-8.806 29.286-25.805 198.144-25.805 237.926 0 150.733 693.402 150.733 752.23zM790.528 444.365c-9.318-9.933-43.11 16.435-75.366 16.435-32.307 0-67.174-17.101-75.366-5.888-8.141 11.264 7.526 101.99 68.352 101.99s91.75-102.554 82.381-112.538zM297.114 759.501c0 11.622 3.021 152.781 3.021 152.781l-179.507-176.077c0 0 124.006 0 148.326 0 24.422 0 28.16 11.622 28.16 23.296z"/>
+<glyph unicode="" d="M903.454 441.796c-26.543-6.081-52.227-8.762-75.342-8.762-130.026 0-230.131 90.233-230.131 247.123 0 76.899 29.922 116.895 72.235 116.895 40.254 0 67.090-35.891 67.090-108.692 0-41.392-11.156-86.763-19.394-113.606 0 0 40.066-69.45 149.637-48.136 23.262 51.319 35.905 117.781 35.905 176.089 0 156.89-80.501 248.15-228.078 248.15-151.689 0-240.435-115.875-240.435-268.661 0-151.361 71.202-281.283 188.627-340.484-49.372-98.143-112.203-184.592-177.722-249.727-118.891 142.795-226.354 333.3-270.462 705.060h-175.384c81.025-619.156 322.514-816.307 386.365-854.159 36.114-21.537 67.216-20.511 100.237-2.039 51.843 29.293 207.512 183.943 293.793 365.093 36.219 0.098 79.733 4.231 123.059 13.956v121.9z" horiz-adv-x="903"/>
+<glyph unicode="" d="M1536.164 933.646c0-5.825-1.738-11.090-5.117-15.924-3.521-4.699-7.177-7.119-11.354-7.119-33.637-3.411-61.339-14.784-82.689-34.274-21.485-19.341-43.497-56.467-66.346-111.073l-348.57-826.872c-2.291-7.698-8.644-11.528-19.18-11.528-8.251 0-14.591 3.83-19.187 11.528l-195.493 430.357-224.83-430.357c-4.596-7.698-10.935-11.528-19.18-11.528-10.002 0-16.619 3.83-19.863 11.528l-342.5 826.872c-21.343 51.343-43.909 87.181-67.685 107.52-23.647 20.339-56.756 32.993-99.037 37.827-3.643 0-7.157 1.995-10.273 6.121-3.231 3.978-4.859 8.676-4.859 13.941 0 13.504 3.643 20.191 10.948 20.191 30.534 0 62.42-1.422 95.787-4.261 30.946-2.993 60.129-4.415 87.419-4.415 27.831 0 60.663 1.422 98.496 4.415 39.584 2.838 74.707 4.261 105.248 4.261 7.292 0 10.948-6.687 10.948-20.191 0-13.375-2.304-20.062-6.758-20.062-30.534-2.414-54.587-10.659-72.152-24.452-17.559-13.948-26.351-32.156-26.351-54.761 0-11.521 3.656-25.874 10.948-43.092l283.047-672.862 160.646 319.439-149.704 330.381c-26.878 58.88-49.039 96.997-66.334 114.053-17.295 16.934-43.497 27.451-78.634 31.294-3.238 0-6.218 1.995-9.198 6.121-2.961 3.971-4.441 8.676-4.441 13.935 0 13.51 3.102 20.197 9.59 20.197 30.528 0 58.494-1.422 84.027-4.261 24.587-2.993 50.803-4.415 78.634-4.415 27.29 0 56.209 1.422 86.743 4.415 31.48 2.838 62.42 4.261 92.955 4.261 7.292 0 10.948-6.687 10.948-20.191 0-13.375-2.163-20.062-6.745-20.062-61.081-4.403-91.616-22.611-91.616-54.755 0-14.36 7.022-36.688 21.214-66.849l99.031-211.623 98.509 193.568c13.639 27.297 20.519 50.339 20.519 69.108 0 44.096-30.528 67.563-91.609 70.543-5.542 0-8.245 6.687-8.245 20.062 0 4.834 1.365 9.391 4.068 13.652 2.826 4.415 5.542 6.546 8.232 6.546 21.89 0 48.782-1.422 80.674-4.261 30.528-2.993 55.643-4.415 75.242-4.415 14.051 0 34.86 1.281 62.156 3.694 34.583 3.27 63.617 4.982 86.866 4.982 5.419 0 8.097-5.696 8.097-17.211 0-15.357-4.988-23.042-14.984-23.042-35.542-3.843-64.177-14.224-85.791-30.998-21.626-16.786-48.653-54.909-80.938-114.349l-131.328-255.57 177.806-381.306 262.502 642.572c9.050 23.461 13.652 45.074 13.652 64.705 0 47.076-30.534 71.965-91.596 74.946-5.542 0-8.232 6.687-8.232 20.062 0 13.504 4.036 20.191 12.287 20.191 22.283 0 48.775-1.422 79.309-4.261 28.23-2.993 52.006-4.415 71.058-4.415 20.14 0 43.388 1.422 69.713 4.415 27.438 2.838 52.025 4.261 73.929 4.261 6.327 0 9.571-5.696 9.571-17.211z" horiz-adv-x="1536"/>
+<glyph unicode="" d="M403.359-73.143l403.246 513.349-403.246 510.495-403.359 0.156 403.223-510.841-400.709-513.159h400.845" horiz-adv-x="807"/>
+<glyph unicode="" d="M403.246 950.857l-403.246-513.349 403.246-510.495 403.359-0.156-403.223 510.841 400.709 513.159h-400.845" horiz-adv-x="807"/>
+<glyph unicode="" d="M554.857 240v-120.571q0-38.286-22.286-38.286-13.143 0-25.714 12.571v172q12.571 12.571 25.714 12.571 22.286 0 22.286-38.286zM748 239.428v-26.286h-51.429v26.286q0 38.857 25.714 38.857t25.714-38.857zM196 364h61.143v53.714h-178.286v-53.714h60v-325.143h57.143v325.143zM360.571 38.857h50.857v282.286h-50.857v-216q-17.143-24-32.571-24-10.286 0-12 12-0.571 1.714-0.571 20v208h-50.857v-223.429q0-28 4.571-41.714 6.857-21.143 33.143-21.143 27.429 0 58.286 34.857v-30.857zM605.714 123.428v112.571q0 41.714-5.143 56.571-9.714 32-40.571 32-28.571 0-53.143-30.857v124h-50.857v-378.857h50.857v27.429q25.714-31.429 53.143-31.429 30.857 0 40.571 31.429 5.143 15.429 5.143 57.143zM798.857 129.143v7.429h-52q0-29.143-1.143-34.857-4-20.571-22.857-20.571-26.286 0-26.286 39.429v49.714h102.286v58.857q0 45.143-15.429 66.286-22.286 29.143-60.571 29.143-38.857 0-61.143-29.143-16-21.143-16-66.286v-98.857q0-45.143 16.571-66.286 22.286-29.143 61.714-29.143 41.143 0 61.714 30.286 10.286 15.429 12 30.857 1.143 5.143 1.143 33.143zM451.429 650.857v120q0 39.429-24.571 39.429t-24.571-39.429v-120q0-40 24.571-40t24.571 40zM862.286 221.714q0-133.714-14.857-200-8-33.714-33.143-56.571t-58.286-26.286q-105.143-12-317.143-12t-317.143 12q-33.143 3.429-58.571 26.286t-32.857 56.571q-14.857 64-14.857 200 0 133.714 14.857 200 8 33.714 33.143 56.571t58.857 26.857q104.571 11.429 316.571 11.429t317.143-11.429q33.143-4 58.571-26.857t32.857-56.571q14.857-64 14.857-200zM292 950.857h58.286l-69.143-228v-154.857h-57.143v154.857q-8 42.286-34.857 121.143-21.143 58.857-37.143 106.857h60.571l40.571-150.286zM503.429 760.571v-100q0-46.286-16-67.429-21.143-29.143-60.571-29.143-38.286 0-60 29.143-16 21.714-16 67.429v100q0 45.714 16 66.857 21.714 29.143 60 29.143 39.429 0 60.571-29.143 16-21.143 16-66.857zM694.857 853.143v-285.143h-52v31.429q-30.286-35.429-58.857-35.429-26.286 0-33.714 21.143-4.571 13.714-4.571 42.857v225.143h52v-209.714q0-18.857 0.571-20 1.714-12.571 12-12.571 15.429 0 32.571 24.571v217.714h52z" horiz-adv-x="878"/>
+<glyph unicode="" d="M847.429 365.714l-335.429-335.429q-29.714-30.286-72.857-30.286t-73.429 30.286l-335.429 335.429q-30.286 30.286-30.286 73.143t30.286 73.143l335.429 335.429q30.286 30.286 73.143 30.286t73.143-30.286l151.429-151.429-227.429-228-107.429 107.429q-24 24-56.571 24-33.714 0-57.143-23.429l-68.571-69.143q-24-22.857-24-56.571 0-33.143 24-57.143l232-233.143q17.143-16 38.286-21.143l3.429-2.286h16q34.286 0 56.571 23.429l353.714 353.714 1.143-1.714q30.286-30.286 30.286-73.143t-30.286-73.143zM803.429 723.428l68.571-68.571q8-8.571 8-20.571t-8-20.571l-417.143-417.143q-9.714-8.571-21.143-8.571v0q-2.286 0-3.429 0.571-10.286 1.143-17.143 8l-232.571 233.143q-8 8.571-8 20.571t8 20l69.143 68.571q7.429 8.571 20 8.571t20.571-8.571l144-144 328 328.571q8.571 8.571 20.571 8.571t20.571-8.571z" horiz-adv-x="951"/>
+<glyph unicode="" d="M530.286 475.428q0 8-5.143 13.143t-13.143 5.143q-37.714 0-64.571-26.857t-26.857-64.571q0-8 5.143-13.143t13.143-5.143 13.143 5.143 5.143 13.143q0 22.857 16 38.857t38.857 16q8 0 13.143 5.143t5.143 13.143zM658.286 401.143q0-60.571-42.857-103.429t-103.429-42.857-103.429 42.857-42.857 103.429 42.857 103.429 103.429 42.857 103.429-42.857 42.857-103.429zM73.143 73.143h877.714v73.143h-877.714v-73.143zM731.429 401.143q0 90.857-64.286 155.143t-155.143 64.286-155.143-64.286-64.286-155.143 64.286-155.143 155.143-64.286 155.143 64.286 64.286 155.143zM146.286 768h219.429v73.143h-219.429v-73.143zM73.143 658.286h877.714v146.286h-473.143l-36.571-73.143h-368v-73.143zM1024 804.571v-731.429q0-30.286-21.429-51.714t-51.714-21.429h-877.714q-30.286 0-51.714 21.429t-21.429 51.714v731.429q0 30.286 21.429 51.714t51.714 21.429h877.714q30.286 0 51.714-21.429t21.429-51.714z"/>
+<glyph unicode="" d="M73.143 73.143h585.143v438.857h-237.714q-22.857 0-38.857 16t-16 38.857v237.714h-292.571v-731.429zM438.857 585.143h214.857q-5.714 16.571-12.571 23.429l-178.857 178.857q-6.857 6.857-23.429 12.571v-214.857zM731.429 566.857v-512q0-22.857-16-38.857t-38.857-16h-621.714q-22.857 0-38.857 16t-16 38.857v768q0 22.857 16 38.857t38.857 16h365.714q22.857 0 50.286-11.429t43.429-27.429l178.286-178.286q16-16 27.429-43.429t11.429-50.286z" horiz-adv-x="731"/>
+<glyph unicode="" d="M385.714 217.143q12 19.429 6.286 39.429t-25.714 28.571q-19.429 8-41.714 0.571t-34.286-26.286q-12.571-19.429-7.429-39.143t24.571-28.857 42.571-1.429 35.714 27.143zM439.429 286.286q4.571 7.429 2 15.143t-10 10.571q-8 2.857-16.286-0.286t-12.286-10.571q-9.714-17.714 7.429-25.714 8-2.857 16.571 0.286t12.571 10.571zM538.857 225.143q-25.714-58.286-90.286-85.714t-128-6.857q-61.143 19.429-84.286 72.286t3.714 107.143q26.857 53.143 86.571 79.429t120.286 10.857q63.429-16.571 90.571-68.286t1.429-108.857zM717.143 316.571q-5.143 54.857-50.857 97.143t-119.143 62.286-156.857 12q-127.429-13.143-211.143-80.857t-75.714-151.143q5.143-54.857 50.857-97.143t119.143-62.286 156.857-12q127.429 13.143 211.143 80.857t75.714 151.143zM893.143 314.286q0-38.857-21.143-79.714t-62.286-78.286-96.286-67.143-129.143-47.429-154.571-17.714-157.143 19.143-137.429 53.143-98 86.286-37.143 114q0 65.714 39.714 140t112.857 147.429q96.571 96.571 195.143 134.857t140.857-4q37.143-36.571 11.429-119.429-2.286-8-0.571-11.429t5.714-4 8.286 0.286 7.714 2l3.429 1.143q79.429 33.714 140.571 33.714t87.429-34.857q25.714-36 0-101.714-1.143-7.429-2.571-11.429t2.571-7.143 6.857-4.286 9.714-3.429q32.571-10.286 58.857-26.857t45.714-46.571 19.429-66.571zM850.857 670.857q24-26.857 31.143-62t-3.714-67.143q-4.571-13.143-16.857-19.429t-25.429-2.286q-13.143 4.571-19.429 16.857t-2.286 25.429q11.429 36-13.714 63.429t-61.143 20q-13.714-2.857-25.714 4.571t-14.286 21.143q-2.857 13.714 4.571 25.429t21.143 14.571q34.286 7.429 68-3.143t57.714-37.429zM954.286 764q49.714-54.857 64.286-127.143t-7.714-138q-5.143-15.429-19.429-22.857t-29.714-2.286-22.857 19.429-2.857 29.714q16 46.857 5.714 98.286t-45.714 90.286q-35.429 39.429-84.571 54.571t-98.857 4.857q-16-3.429-29.714 5.429t-17.143 24.857 5.429 29.429 24.857 16.857q70.286 14.857 139.429-6.571t118.857-76.857z"/>
+<glyph unicode="" d="M1024 438.857q0-14.857-10.857-25.714l-146.286-146.286q-10.857-10.857-25.714-10.857t-25.714 10.857-10.857 25.714v73.143h-585.143v-73.143q0-14.857-10.857-25.714t-25.714-10.857-25.714 10.857l-146.286 146.286q-10.857 10.857-10.857 25.714t10.857 25.714l146.286 146.286q10.857 10.857 25.714 10.857t25.714-10.857 10.857-25.714v-73.143h585.143v73.143q0 14.857 10.857 25.714t25.714 10.857 25.714-10.857l146.286-146.286q10.857-10.857 10.857-25.714z"/>
+<glyph unicode="" d="M402.286 768q0-14.857-10.857-25.714t-25.714-10.857h-73.143v-585.143h73.143q14.857 0 25.714-10.857t10.857-25.714-10.857-25.714l-146.286-146.286q-10.857-10.857-25.714-10.857t-25.714 10.857l-146.286 146.286q-10.857 10.857-10.857 25.714t10.857 25.714 25.714 10.857h73.143v585.143h-73.143q-14.857 0-25.714 10.857t-10.857 25.714 10.857 25.714l146.286 146.286q10.857 10.857 25.714 10.857t25.714-10.857l146.286-146.286q10.857-10.857 10.857-25.714z" horiz-adv-x="439"/>
+<glyph unicode="" d="M431.429 347.428q0-7.429-5.714-13.143l-189.714-189.714 82.286-82.286q10.857-10.857 10.857-25.714t-10.857-25.714-25.714-10.857h-256q-14.857 0-25.714 10.857t-10.857 25.714v256q0 14.857 10.857 25.714t25.714 10.857 25.714-10.857l82.286-82.286 189.714 189.714q5.714 5.714 13.143 5.714t13.143-5.714l65.143-65.143q5.714-5.714 5.714-13.143zM877.714 841.143v-256q0-14.857-10.857-25.714t-25.714-10.857-25.714 10.857l-82.286 82.286-189.714-189.714q-5.714-5.714-13.143-5.714t-13.143 5.714l-65.143 65.143q-5.714 5.714-5.714 13.143t5.714 13.143l189.714 189.714-82.286 82.286q-10.857 10.857-10.857 25.714t10.857 25.714 25.714 10.857h256q14.857 0 25.714-10.857t10.857-25.714z" horiz-adv-x="878"/>
+<glyph unicode="" d="M438.857 402.286v-256q0-14.857-10.857-25.714t-25.714-10.857-25.714 10.857l-82.286 82.286-189.714-189.714q-5.714-5.714-13.143-5.714t-13.143 5.714l-65.143 65.143q-5.714 5.714-5.714 13.143t5.714 13.143l189.714 189.714-82.286 82.286q-10.857 10.857-10.857 25.714t10.857 25.714 25.714 10.857h256q14.857 0 25.714-10.857t10.857-25.714zM870.286 786.286q0-7.429-5.714-13.143l-189.714-189.714 82.286-82.286q10.857-10.857 10.857-25.714t-10.857-25.714-25.714-10.857h-256q-14.857 0-25.714 10.857t-10.857 25.714v256q0 14.857 10.857 25.714t25.714 10.857 25.714-10.857l82.286-82.286 189.714 189.714q5.714 5.714 13.143 5.714t13.143-5.714l65.143-65.143q5.714-5.714 5.714-13.143z" horiz-adv-x="878"/>
+</font></defs></svg> \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.ttf b/www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.ttf
new file mode 100644
index 00000000..74eb8c4a
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.ttf
Binary files differ
diff --git a/www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.woff b/www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.woff
new file mode 100644
index 00000000..d065e98e
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/resources/vendor/tl-icons.woff
Binary files differ
diff --git a/www/wiki/extensions/ModernTimeline/src/Event.php b/www/wiki/extensions/ModernTimeline/src/Event.php
new file mode 100644
index 00000000..821e5810
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/Event.php
@@ -0,0 +1,34 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline;
+
+use ModernTimeline\ResultFacade\Subject;
+use SMWDITime;
+
+class Event {
+
+ private $subject;
+ private $startDate;
+ private $endDate;
+
+ public function __construct( Subject $subject, SMWDITime $startDate, ?SMWDITime $endDate ) {
+ $this->subject = $subject;
+ $this->startDate = $startDate;
+ $this->endDate = $endDate;
+ }
+
+ public function getSubject(): Subject {
+ return $this->subject;
+ }
+
+ public function getStartDate(): SMWDITime {
+ return $this->startDate;
+ }
+
+ public function getEndDate(): ?SMWDITime {
+ return $this->endDate;
+ }
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/src/JsonBuilder.php b/www/wiki/extensions/ModernTimeline/src/JsonBuilder.php
new file mode 100644
index 00000000..2f727df1
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/JsonBuilder.php
@@ -0,0 +1,122 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline;
+
+use ModernTimeline\ResultFacade\PropertyValueCollection;
+use ModernTimeline\ResultFacade\Subject;
+use ModernTimeline\ResultFacade\SubjectCollection;
+use ModernTimeline\SlidePresenter\SlidePresenter;
+use SMWDITime;
+
+class JsonBuilder {
+
+ private $slidePresenter;
+
+ public function __construct( SlidePresenter $slidePresenter ) {
+ $this->slidePresenter = $slidePresenter;
+ }
+
+ public function buildTimelineJson( SubjectCollection $pages ): array {
+ $events = [];
+
+ foreach ( $pages->getSubjects() as $subject ) {
+ [ $startDate, $endDate ] = $this->getDates( $subject );
+
+ if ( $startDate !== null ) {
+ $events[] = new Event( $subject, $startDate, $endDate );
+ }
+ }
+
+ return $this->eventsToTimelineJson( $events );
+ }
+
+ private function getDates( Subject $subject ): array {
+ $startDate = null;
+ $endDate = null;
+
+ foreach ( $this->getPropertyValueCollectionsWithDates( $subject ) as $propertyValues ) {
+ $dataItem = $propertyValues->getDataItems()[0];
+
+ if ( $dataItem instanceof SMWDITime ) {
+ if ( $startDate === null ) {
+ $startDate = $dataItem;
+ }
+ else if ( $endDate === null ) {
+ $endDate = $dataItem;
+ }
+ else {
+ break;
+ }
+ }
+ }
+
+ return [ $startDate, $endDate ];
+ }
+
+ /**
+ * @param Event[] $events
+ * @return array
+ */
+ public function eventsToTimelineJson( array $events ): array {
+ $jsonEvents = [];
+
+ foreach ( $events as $event ) {
+ $jsonEvents[] = $this->buildEvent( $event );
+ }
+
+ return [ 'events' => $jsonEvents ];
+ }
+
+ private function buildEvent( Event $event ): array {
+ $jsonEvent = [
+ 'text' => [
+ 'headline' => $this->newHeadline( $event->getSubject()->getWikiPage()->getTitle() ),
+ 'text' => $this->slidePresenter->getText( $event->getSubject() )
+ ],
+ 'start_date' => $this->timeToJson( $event->getStartDate() )
+ ];
+
+ if ( $event->getEndDate() !== null ) {
+ $jsonEvent['end_date'] = $this->timeToJson( $event->getEndDate() );
+ }
+
+ return $jsonEvent;
+ }
+
+ /**
+ * @return PropertyValueCollection[]
+ */
+ private function getPropertyValueCollectionsWithDates( Subject $subject ) {
+ return array_filter(
+ $subject->getPropertyValueCollections(),
+ function( PropertyValueCollection $pvc ) {
+ return $pvc->getPrintRequest()->getTypeID() === '_dat'
+ && $pvc->getDataItems() !== [];
+ }
+ );
+ }
+
+ private function newHeadline( \Title $title ): string {
+ return \Html::element(
+ 'a',
+ [ 'href' => $title->getFullURL() ],
+ $title->getText()
+ );
+
+// return DataValueFactory::getInstance()->newDataValueByItem( $subject->getWikiPage() )->getLongHTMLText( smwfGetLinker() );
+ }
+
+ private function timeToJson( SMWDITime $time ): array {
+ return [
+ 'year' => $time->getYear(),
+ 'month' => $time->getMonth(),
+ 'day' => $time->getDay(),
+ 'hour' => $time->getHour(),
+ 'minute' => $time->getMinute(),
+ 'second' => (int)$time->getSecond(),
+ ];
+ }
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/src/ModernTimelinePrinter.php b/www/wiki/extensions/ModernTimeline/src/ModernTimelinePrinter.php
new file mode 100644
index 00000000..51d8d6dc
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/ModernTimelinePrinter.php
@@ -0,0 +1,59 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline;
+
+use ParamProcessor\ProcessedParam;
+use SMW\Parser\RecursiveTextProcessor;
+use SMW\Query\ResultPrinter;
+use SMWQuery;
+use SMWQueryResult;
+
+class ModernTimelinePrinter implements ResultPrinter {
+
+ public function getName(): string {
+ return wfMessage( 'modern-timeline-format-name' )->text();
+ }
+
+ public function getParamDefinitions( array $definitions ) {
+ return array_merge( $definitions, TimelineOptions::getTimelineParameterDefinitions() );
+ }
+
+ /**
+ * @param SMWQueryResult $result
+ * @param ProcessedParam[] $parameters Note: currently getting Param[] from SMW but lets pretend the legacy refactor happened already
+ * @param int $outputMode
+ *
+ * @return string
+ */
+ public function getResult( SMWQueryResult $result, array $parameters, $outputMode ): string {
+ return ( new TimelinePresenter( $parameters ) )->getResult( $result );
+ }
+
+ public function getQueryMode( $context ): int {
+ return SMWQuery::MODE_INSTANCES;
+ }
+
+ public function setShowErrors( $show ) {
+ }
+
+ public function isExportFormat(): bool {
+ return false;
+ }
+
+ public function getDefaultSort(): string {
+ return 'ASC';
+ }
+
+ public function isDeferrable(): bool {
+ return false;
+ }
+
+ public function supportsRecursiveAnnotation(): bool {
+ return false;
+ }
+
+ public function setRecursiveTextProcessor( RecursiveTextProcessor $recursiveTextProcessor ) {
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/src/ModernTimelineSetup.php b/www/wiki/extensions/ModernTimeline/src/ModernTimelineSetup.php
new file mode 100644
index 00000000..f2853953
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/ModernTimelineSetup.php
@@ -0,0 +1,30 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline;
+
+class ModernTimelineSetup {
+
+ public static function onExtensionFunction() {
+ self::doSmwCheck();
+
+ $GLOBALS['smwgResultFormats']['moderntimeline'] = ModernTimelinePrinter::class;
+ }
+
+ private static function doSmwCheck() {
+ if ( !defined( 'SMW_VERSION' ) ) {
+
+ if ( PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg' ) {
+ die( "\nThe 'Modern Timeline' extension requires 'Semantic MediaWiki' to be installed and enabled.\n" );
+ }
+
+ die(
+ '<b>Error:</b> The <a href="https://github.com/ProfessionalWiki/ModernTimeline">Modern Timeline</a> ' .
+ 'extension requires <a href="https://www.semantic-mediawiki.org/wiki/Semantic_MediaWiki">Semantic MediaWiki</a> to be ' .
+ 'installed and enabled.<br />'
+ );
+ }
+ }
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/src/ResultFacade/PropertyValueCollection.php b/www/wiki/extensions/ModernTimeline/src/ResultFacade/PropertyValueCollection.php
new file mode 100644
index 00000000..d70d7e92
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/ResultFacade/PropertyValueCollection.php
@@ -0,0 +1,35 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline\ResultFacade;
+
+use SMW\Query\PrintRequest;
+use SMWDataItem;
+
+class PropertyValueCollection {
+
+ private $printRequest;
+ private $dataItems;
+
+ /**
+ * @param PrintRequest $printRequest
+ * @param SMWDataItem[] $dataItems
+ */
+ public function __construct( PrintRequest $printRequest, array $dataItems ) {
+ $this->printRequest = $printRequest;
+ $this->dataItems = $dataItems;
+ }
+
+ public function getPrintRequest(): PrintRequest {
+ return $this->printRequest;
+ }
+
+ /**
+ * @return SMWDataItem[]
+ */
+ public function getDataItems(): array {
+ return $this->dataItems;
+ }
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/src/ResultFacade/ResultSimplifier.php b/www/wiki/extensions/ModernTimeline/src/ResultFacade/ResultSimplifier.php
new file mode 100644
index 00000000..1c58345a
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/ResultFacade/ResultSimplifier.php
@@ -0,0 +1,57 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline\ResultFacade;
+
+use SMW\DIWikiPage;
+use SMW\Query\PrintRequest;
+use SMWQueryResult;
+
+class ResultSimplifier {
+
+ public function newSubjectCollection( SMWQueryResult $result ): SubjectCollection {
+ $subjects = [];
+
+ foreach ( $result->getResults() as $diWikiPage ) {
+ $subjects[] = $this->newSubject( $diWikiPage, $result->getPrintRequests(), $result );
+ }
+
+ return new SubjectCollection( $subjects );
+ }
+
+ /**
+ * @param DIWikiPage $resultPage
+ * @param PrintRequest[] $printRequests
+ * @param SMWQueryResult $result
+ * @return Subject
+ */
+ private function newSubject( DIWikiPage $resultPage, array $printRequests, SMWQueryResult $result ): Subject {
+ $propertyValueCollections = [];
+
+ foreach ( $printRequests as $printRequest ) {
+ $dataItems = $this->newResultArray( $resultPage, $printRequest, $result )->getContent();
+
+ $propertyValueCollections[] = new PropertyValueCollection(
+ $printRequest,
+ $dataItems === false ? [] : $dataItems
+ );
+ }
+
+ return new Subject( $resultPage, $propertyValueCollections );
+ }
+
+ /**
+ * Compat with SMW 3.0
+ * In 3.1+ do: ResultArray::factory( $resultPage, $printRequest, $result )
+ */
+ private function newResultArray( DIWikiPage $resultPage, PrintRequest $printRequest, SMWQueryResult $result ): \SMWResultArray {
+ return new \SMWResultArray(
+ $resultPage,
+ $printRequest,
+ $result->getStore(),
+ method_exists( $result, 'getFieldItemFinder' ) ? $result->getFieldItemFinder() : null
+ );
+ }
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/src/ResultFacade/Subject.php b/www/wiki/extensions/ModernTimeline/src/ResultFacade/Subject.php
new file mode 100644
index 00000000..2d67bcda
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/ResultFacade/Subject.php
@@ -0,0 +1,39 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline\ResultFacade;
+
+use SMW\DIWikiPage;
+
+/**
+ * Data from a single subject (page or subobject)
+ */
+class Subject {
+
+ private $wikiPage;
+ private $propertyValueCollections;
+
+ /**
+ * @param DIWikiPage $wikiPage
+ * @param PropertyValueCollection[] $propertyValueCollections
+ */
+ public function __construct( DIWikiPage $wikiPage, array $propertyValueCollections ) {
+ $this->wikiPage = $wikiPage;
+ $this->propertyValueCollections = $propertyValueCollections;
+ }
+
+ public function getWikiPage(): DIWikiPage {
+ return $this->wikiPage;
+ }
+
+ /**
+ * @return PropertyValueCollection[]
+ */
+ public function getPropertyValueCollections(): array {
+ return $this->propertyValueCollections;
+ }
+
+
+
+} \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/src/ResultFacade/SubjectCollection.php b/www/wiki/extensions/ModernTimeline/src/ResultFacade/SubjectCollection.php
new file mode 100644
index 00000000..77b31123
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/ResultFacade/SubjectCollection.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace ModernTimeline\ResultFacade;
+
+class SubjectCollection {
+
+ private $pages;
+
+ /**
+ * @param Subject[] $pages
+ */
+ public function __construct( array $pages ) {
+ $this->pages = $pages;
+ }
+
+ /**
+ * @return Subject[]
+ */
+ public function getSubjects(): iterable {
+ return $this->pages;
+ }
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/src/SlidePresenter/SimpleSlidePresenter.php b/www/wiki/extensions/ModernTimeline/src/SlidePresenter/SimpleSlidePresenter.php
new file mode 100644
index 00000000..14be23e1
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/SlidePresenter/SimpleSlidePresenter.php
@@ -0,0 +1,40 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline\SlidePresenter;
+
+use ModernTimeline\ResultFacade\Subject;
+use SMW\DataValueFactory;
+use SMW\Query\PrintRequest;
+
+class SimpleSlidePresenter implements SlidePresenter {
+
+ public function getText( Subject $subject ): string {
+ return implode( '<br>', iterator_to_array( $this->getDisplayValues( $subject ) ) );
+ }
+
+ private function getDisplayValues( Subject $subject ) {
+ foreach ( $subject->getPropertyValueCollections() as $propertyValues ) {
+ foreach ( $propertyValues->getDataItems() as $dataItem ) {
+ yield $this->getDisplayValue( $propertyValues->getPrintRequest(), $dataItem );
+ }
+ }
+ }
+
+ private function getDisplayValue( PrintRequest $pr, \SMWDataItem $dataItem ) {
+ $property = $pr->getText( null );
+ $value = $this->dataItemToText( $dataItem );
+
+ if ( $property === '' ) {
+ return $value;
+ }
+
+ return $property . ': ' . $value;
+ }
+
+ private function dataItemToText( \SMWDataItem $dataItem ): string {
+ return DataValueFactory::getInstance()->newDataValueByItem( $dataItem )->getLongHTMLText();
+ }
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/src/SlidePresenter/SlidePresenter.php b/www/wiki/extensions/ModernTimeline/src/SlidePresenter/SlidePresenter.php
new file mode 100644
index 00000000..b272eb1c
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/SlidePresenter/SlidePresenter.php
@@ -0,0 +1,13 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline\SlidePresenter;
+
+use ModernTimeline\ResultFacade\Subject;
+
+interface SlidePresenter {
+
+ public function getText( Subject $subject ): string;
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php b/www/wiki/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php
new file mode 100644
index 00000000..09c821d5
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php
@@ -0,0 +1,60 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline\SlidePresenter;
+
+use ModernTimeline\ResultFacade\PropertyValueCollection;
+use ModernTimeline\ResultFacade\Subject;
+use SMW\DataValueFactory;
+
+class TemplateSlidePresenter implements SlidePresenter {
+
+ private $templateName;
+
+ public function __construct( string $templateName ) {
+ $this->templateName = $templateName;
+ }
+
+ public function getText( Subject $subject ): string {
+ $parser = $this->getParser();
+
+ return $parser->recursiveTagParseFully(
+ ( new TemplateSlidePresenter( $this->templateName ) )->getTemplateText( $subject )
+ );
+ }
+
+ private function getParser(): \Parser {
+ return $GLOBALS['wgParser'];
+ }
+
+ public function getTemplateText( Subject $subject ): string {
+ return '{{' . implode( '|', $this->getTemplateSegments( $subject ) ) . '}}';
+ }
+
+ private function getTemplateSegments( Subject $subject ): array {
+ return array_merge(
+ [
+ $this->templateName,
+ $this->parameter( 'title', $subject->getWikiPage()->getTitle()->getFullText() )
+ ],
+ array_map(
+ function( PropertyValueCollection $pvc ) {
+ return $this->parameter(
+ $pvc->getPrintRequest()->getText( null ) ?? '',
+ $pvc->getDataItems() === [] ? '' : $this->dataItemToText( $pvc->getDataItems()[0] )
+ );
+ },
+ $subject->getPropertyValueCollections()
+ )
+ );
+ }
+
+ private function dataItemToText( \SMWDataItem $dataItem ): string {
+ return DataValueFactory::getInstance()->newDataValueByItem( $dataItem )->getLongHTMLText();
+ }
+
+ private function parameter( string $name, string $value ): string {
+ return $name . '=' . $value;
+ }
+}
diff --git a/www/wiki/extensions/ModernTimeline/src/TimelineOptions.php b/www/wiki/extensions/ModernTimeline/src/TimelineOptions.php
new file mode 100644
index 00000000..934358d5
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/TimelineOptions.php
@@ -0,0 +1,143 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline;
+
+use ParamProcessor\ParameterTypes;
+use ParamProcessor\ProcessedParam;
+
+class TimelineOptions {
+
+ public const PARAM_WIDTH = 'width';
+ public const PARAM_HEIGHT = 'height';
+ private const PARAM_BOOKMARK = 'bookmark';
+ private const PARAM_BACKGROUND = 'background';
+ private const PARAM_SCALE_FACTOR = 'scale factor';
+ private const PARAM_POSITION = 'position';
+ private const PARAM_TICK_WIDTH = 'tick width';
+ private const PARAM_START_SLIDE = 'start slide';
+ private const PARAM_START_AT_END = 'start at end';
+ private const PARAM_TRANSITION_DURATION = 'transition duration';
+ private const PARAM_NAV_HEIGHT = 'navigation height';
+ private const PARAM_TEMPLATE = 'template';
+
+ public static function getTimelineParameterDefinitions(): array {
+ $definitions = [];
+
+ $definitions[self::PARAM_WIDTH] = [
+ 'type' => ParameterTypes::DIMENSION,
+ 'allowauto' => true,
+ 'units' => [ 'px', 'ex', 'em', '%', '' ],
+ 'default' => $GLOBALS['wgModernTimelineWidth'],
+ ];
+
+ $definitions[self::PARAM_HEIGHT] = [
+ 'type' => ParameterTypes::DIMENSION,
+ 'units' => [ 'px', 'ex', 'em', '' ],
+ 'default' => $GLOBALS['wgModernTimelineHeight'],
+ ];
+
+ $definitions[self::PARAM_BOOKMARK] = [
+ 'type' => ParameterTypes::BOOLEAN,
+ 'default' => $GLOBALS['wgModernTimelineBookmark'],
+ ];
+
+ $definitions[self::PARAM_BACKGROUND] = [
+ 'type' => ParameterTypes::STRING,
+ 'default' => $GLOBALS['wgModernTimelineBackground'],
+ ];
+
+ $definitions[self::PARAM_SCALE_FACTOR] = [
+ 'type' => ParameterTypes::INTEGER,
+ 'default' => $GLOBALS['wgModernTimelineScaleFactor'],
+ 'lowerbound' => 1
+ ];
+
+ $definitions[self::PARAM_POSITION] = [
+ 'type' => ParameterTypes::STRING,
+ 'default' => $GLOBALS['wgModernTimelinePosition'],
+ 'values' => [ 'top', 'bottom' ],
+ ];
+
+ $definitions[self::PARAM_TICK_WIDTH] = [
+ 'type' => ParameterTypes::INTEGER,
+ 'default' => $GLOBALS['wgModernTimelineTickWidth']
+ ];
+
+ $definitions[self::PARAM_START_SLIDE] = [
+ 'type' => ParameterTypes::INTEGER,
+ 'default' => $GLOBALS['wgModernTimelineStartSlide'],
+ 'lowerbound' => 1
+ ];
+
+ $definitions[self::PARAM_START_AT_END] = [
+ 'type' => ParameterTypes::BOOLEAN,
+ 'default' => $GLOBALS['wgModernTimelineStartAtEnd']
+ ];
+
+ $definitions[self::PARAM_TRANSITION_DURATION] = [
+ 'type' => ParameterTypes::INTEGER,
+ 'aliases' => 'duration',
+ 'default' => $GLOBALS['wgModernTimelineTransitionDuration'],
+ 'lowerbound' => 1
+ ];
+
+ $definitions[self::PARAM_NAV_HEIGHT] = [
+ 'type' => ParameterTypes::DIMENSION,
+ 'units' => [ 'px', '%' ],
+ 'default' => $GLOBALS['wgModernTimelineNavHeight'],
+ ];
+
+ $definitions[self::PARAM_TEMPLATE] = [
+ 'type' => ParameterTypes::STRING,
+ 'default' => $GLOBALS['wgModernTimelineTemplate']
+ ];
+
+ foreach ( $definitions as $name => $definition ) {
+ $definitions[$name]['message'] = 'modern-timeline-param-' . str_replace( ' ', '-', $name );
+
+ if ( strpos( $name, ' ' ) !== false ) {
+ $definitions[$name]['aliases'] = array_merge(
+ array_key_exists( 'aliases', $definitions[$name] ) ? (array)$definitions[$name]['aliases'] : [],
+ [ str_replace( ' ', '', $name ) ]
+ );
+ }
+ }
+
+ return $definitions;
+ }
+
+ /**
+ * @param ProcessedParam[] $parameters
+ * @return array
+ */
+ public static function processedParamsToJson( array $parameters ): array {
+ $json = [
+ 'hash_bookmark' => $parameters[self::PARAM_BOOKMARK]->getValue(),
+ 'default_bg_color' => $parameters[self::PARAM_BACKGROUND]->getValue(),
+ 'scale_factor' => $parameters[self::PARAM_SCALE_FACTOR]->getValue(),
+ 'timenav_position' => $parameters[self::PARAM_POSITION]->getValue(),
+ 'optimal_tick_width' => $parameters[self::PARAM_TICK_WIDTH]->getValue(),
+ 'start_at_slide' => self::getStartAtSlide( $parameters ),
+ 'start_at_end' => $parameters[self::PARAM_START_AT_END]->getValue(),
+ 'duration' => $parameters[self::PARAM_TRANSITION_DURATION]->getValue(),
+ ];
+
+ $height = $parameters[self::PARAM_NAV_HEIGHT]->getValue();
+
+ if ( strpos( $height, '%' ) === false ) {
+ $json['timenav_height'] = (int)substr( $height, 0, -2 );
+ }
+ else {
+ $json['timenav_height_percentage'] = (int)substr( $height, 0, -1 );
+ }
+
+ return $json;
+ }
+
+ private static function getStartAtSlide( array $parameters ): int {
+ return $parameters[self::PARAM_START_SLIDE]->getValue() - 1;
+ }
+
+} \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/src/TimelinePresenter.php b/www/wiki/extensions/ModernTimeline/src/TimelinePresenter.php
new file mode 100644
index 00000000..b0d00689
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/src/TimelinePresenter.php
@@ -0,0 +1,105 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline;
+
+use ModernTimeline\ResultFacade\ResultSimplifier;
+use ModernTimeline\SlidePresenter\SimpleSlidePresenter;
+use ModernTimeline\SlidePresenter\SlidePresenter;
+use ModernTimeline\SlidePresenter\TemplateSlidePresenter;
+use ParamProcessor\ProcessedParam;
+use SMWOutputs;
+use SMWQueryResult;
+
+class TimelinePresenter {
+
+ private $id;
+ private $parameters;
+
+ /**
+ * @param ProcessedParam[] $parameters
+ */
+ public function __construct( array $parameters ) {
+ $this->parameters = $parameters;
+ $this->id = $this->newTimelineId();
+ }
+
+ private function newTimelineId(): string {
+ static $timelineNumber = 0;
+ return 'modern_timeline_' . ++$timelineNumber;
+ }
+
+ public function getResult( SMWQueryResult $result ): string {
+ SMWOutputs::requireResource( 'ext.modern.timeline' );
+
+ $json = $this->createJsonString( $result );
+
+ SMWOutputs::requireHeadItem(
+ $this->id,
+ $this->createJs( $json )
+ );
+
+ return $this->createDiv( $json );
+ }
+
+ private function createJsonString( SMWQueryResult $result ) {
+ $preJson = ( new JsonBuilder( $this->getSlidePresenter() ) )->buildTimelineJson(
+ ( new ResultSimplifier() )->newSubjectCollection( $result )
+ );
+
+ $preJson['options'] = TimelineOptions::processedParamsToJson( $this->parameters );
+
+ return json_encode( $preJson );
+ }
+
+ private function getSlidePresenter(): SlidePresenter {
+ if ( $this->getTemplateName() === '' ) {
+ return new SimpleSlidePresenter();
+ }
+
+ return new TemplateSlidePresenter( $this->getTemplateName() );
+ }
+
+ private function getTemplateName(): string {
+ return $this->parameters['template']->getValue();
+ }
+
+ private function createJs( string $json ): string {
+ return \Html::rawElement(
+ 'script',
+ [
+ 'type' => 'text/javascript'
+ ],
+ "if (!window.hasOwnProperty('modernTimeline')) {window.modernTimeline = {};}"
+ . "\n window.modernTimeline.{$this->id} = $json;"
+ );
+ }
+
+ private function createDiv( string $json ): string {
+ $width = $this->parameters[TimelineOptions::PARAM_WIDTH]->getValue();
+ $height = $this->parameters[TimelineOptions::PARAM_HEIGHT]->getValue();
+
+ return \Html::rawElement(
+ 'div',
+ [
+ 'id' => $this->id,
+ 'style' => "width: $width; height: $height",
+ 'class' => 'modern_timeline_outer_div'
+ ],
+ \Html::element(
+ 'div',
+ [
+ 'class' => 'modern_timeline_inner_div',
+ 'style' => 'width: 100%; height: calc(100% - 10px); background-color: rgba(0, 0, 0, 0.05); margin-top: 5px; margin-bottom: 5px;'
+ ]
+ )
+ )
+ . \Html::element( // TODO: remove when system tests can test head items
+ 'div',
+ [ 'style' => 'display:none' ],
+ $json
+ );
+ }
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/tests/Integration/OptionsTest.php b/www/wiki/extensions/ModernTimeline/tests/Integration/OptionsTest.php
new file mode 100644
index 00000000..d5352632
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/tests/Integration/OptionsTest.php
@@ -0,0 +1,150 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline\Tests\Integration;
+
+use ModernTimeline\TimelineOptions;
+use ParamProcessor\ParamDefinitionFactory;
+use ParamProcessor\ProcessingResult;
+use ParamProcessor\Processor;
+use PHPUnit\Framework\TestCase;
+
+/**
+ * @covers \ModernTimeline\TimelineOptions
+ */
+class OptionsTest extends TestCase {
+
+ private const DEFAULT_SCALE_FACTOR = 2;
+ private const DEFAULT_START_SLIDE = 0;
+
+ public function testDefaultOptions() {
+ $this->assertSame(
+ [
+ 'hash_bookmark' => false,
+ 'default_bg_color' => 'white',
+ 'scale_factor' => self::DEFAULT_SCALE_FACTOR,
+ 'timenav_position' => 'bottom',
+ 'optimal_tick_width' => 100,
+ 'start_at_slide' => self::DEFAULT_START_SLIDE,
+ 'start_at_end' => false,
+ 'duration' => 1000,
+ 'timenav_height' => 200,
+ ],
+ $this->processUserInputToTimelineOptions( [] )
+ );
+ }
+
+ private function processUserInputToTimelineOptions( array $userInput ): array {
+ return TimelineOptions::processedParamsToJson(
+ $this->processUserInput( $userInput )->getParameters()
+ );
+ }
+
+ private function processUserInput( array $userInput ): ProcessingResult {
+ $processor = Processor::newDefault();
+
+ $processor->setParameters( $userInput );
+ $processor->setParameterDefinitions( $this->getParameterDefinitions() );
+
+ return $processor->processParameters();
+ }
+
+ private function getParameterDefinitions(): array {
+ return ParamDefinitionFactory::newDefault()->newDefinitionsFromArrays(
+ TimelineOptions::getTimelineParameterDefinitions()
+ );
+ }
+
+ public function testDefaultWidthAndHeight() {
+ $parameters = $this->processUserInput( [] )->getParameterArray();
+
+ $this->assertSame( $GLOBALS['wgModernTimelineWidth'], $parameters['width'] );
+ $this->assertSame( $GLOBALS['wgModernTimelineHeight'], $parameters['height'] );
+ }
+
+ /**
+ * @dataProvider widthProvider
+ */
+ public function testWidth( string $input, string $expected ) {
+ $parameters = $this->processUserInput( [
+ 'width' => $input,
+ ] )->getParameterArray();
+
+ $this->assertSame( $expected, $parameters['width'] );
+ }
+
+ public function widthProvider() {
+ yield [ '10', '10px' ];
+ yield [ '10px', '10px' ];
+ yield [ '10%', '10%' ];
+ yield [ '10em', '10em' ];
+ yield [ '10ex', '10ex' ];
+ yield [ 'auto', 'auto' ];
+ }
+
+ /**
+ * @dataProvider heightProvider
+ */
+ public function testHeight( string $input, string $expected ) {
+ $parameters = $this->processUserInput( [
+ 'height' => $input,
+ ] )->getParameterArray();
+
+ $this->assertSame( $expected, $parameters['height'] );
+ }
+
+ public function heightProvider() {
+ yield [ '10', '10px' ];
+ yield [ '10px', '10px' ];
+ yield [ '10em', '10em' ];
+ yield [ '10ex', '10ex' ];
+ }
+
+ public function testTooLowScaleFactorDefaults() {
+ $this->assertProcesses( 'scale factor', '0', self::DEFAULT_SCALE_FACTOR );
+ }
+
+ private function assertProcesses( string $paramName, string $input, $expected ) {
+ $parameters = $this->processUserInput( [
+ $paramName => $input,
+ ] )->getParameterArray();
+
+ $this->assertSame( $expected, $parameters[$paramName] );
+ }
+
+ public function testTooLowStartSlideDefaults() {
+ $this->assertProcesses( 'start slide', '0', 1 );
+ }
+
+ public function testStartSlideIsOneBased() {
+ $this->assertSame(
+ 2,
+ $this->processUserInputToTimelineOptions( [ 'start slide' => '3' ] )['start_at_slide']
+ );
+ }
+
+ /**
+ * @dataProvider animationDurationAliasProvider
+ */
+ public function testAnimationDurationAliases( string $alias ) {
+ $parameters = $this->processUserInput( [
+ $alias => '42',
+ ] )->getParameterArray();
+
+ $this->assertSame( 42, $parameters['transition duration'] );
+ }
+
+ public function animationDurationAliasProvider() {
+ yield 'automatic alias' => [ 'transitionduration' ];
+ yield 'manual alias' => [ 'duration' ];
+ }
+
+ public function testNavHeightUsesCorrectJsonFieldWhenGivenPercentage() {
+ $this->assertSame(
+ 50,
+ $this->processUserInputToTimelineOptions( [ 'navigation height' => '50%' ] )['timenav_height_percentage']
+ );
+ }
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/escaping.json b/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/escaping.json
new file mode 100644
index 00000000..d26547d1
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/escaping.json
@@ -0,0 +1,51 @@
+{
+ "description": "Modern Timeline - escaping",
+ "setup": [
+ {
+ "page": "News date",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Date]]"
+ },
+ {
+ "page": "Description",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "page": "Evil page",
+ "contents": "[[News date::August 11, 2019]] [[Description::<script></script>]]"
+ },
+ {
+ "page": "Query page",
+ "contents": "{{ #ask: [[Description::+]] | format=moderntimeline | ?News date | ?Description }}"
+ }
+ ],
+ "tests": [
+ {
+ "about": "Evil descriptions are escaped",
+ "type": "parser",
+ "subject": "Query page",
+ "assert-output": {
+ "include-head-items": true,
+ "to-contain": [
+ "Evil page",
+ "2019",
+ "Description: &amp;lt;script&amp;gt;&amp;lt;\\/script&amp;gt"
+ ]
+ }
+ }
+ ],
+ "settings": {
+ "wgContLang": "en",
+ "wgLang": "en",
+ "smwgNamespacesWithSemanticLinks": {
+ "NS_MAIN": true,
+ "SMW_NS_PROPERTY": true
+ }
+ },
+ "meta": {
+ "version": "2",
+ "is-incomplete": false,
+ "debug": false
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/parameters.json b/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/parameters.json
new file mode 100644
index 00000000..a12a5fc5
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/parameters.json
@@ -0,0 +1,35 @@
+{
+ "description": "Modern Timeline - parameters",
+ "setup": [
+ {
+ "page": "Query with modified height",
+ "contents": "{{ #ask: [[News date::+]] | format=moderntimeline | ?News date | height=1337 }}"
+ }
+ ],
+ "tests": [
+ {
+ "about": "Width and height parameters",
+ "type": "parser",
+ "subject": "Query with modified height",
+ "assert-output": {
+ "to-contain": [
+ "width: 100%",
+ "height: 1337px"
+ ]
+ }
+ }
+ ],
+ "settings": {
+ "wgContLang": "en",
+ "wgLang": "en",
+ "smwgNamespacesWithSemanticLinks": {
+ "NS_MAIN": true,
+ "SMW_NS_PROPERTY": true
+ }
+ },
+ "meta": {
+ "version": "2",
+ "is-incomplete": false,
+ "debug": false
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/query.json b/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/query.json
new file mode 100644
index 00000000..bca28efc
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/query.json
@@ -0,0 +1,93 @@
+{
+ "description": "Modern Timeline - query result content",
+ "setup": [
+ {
+ "page": "News date",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Date]]"
+ },
+ {
+ "page": "End date",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Date]]"
+ },
+ {
+ "page": "Description",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "page": "First news event",
+ "contents": "[[News date::August 1, 2019]] [[End date::August 3, 2019]] [[Description::first desc]]"
+ },
+ {
+ "page": "Second news event",
+ "contents": "[[News date::August 6, 2019]] [[Description::second desc]]"
+ },
+ {
+ "page": "Page without date",
+ "contents": "[[Description::No date here]]"
+ },
+ {
+ "page": "Query page",
+ "contents": "{{ #ask: [[Description::+]] | format=moderntimeline | ?News date | ?End date | ?Description }}"
+ }
+ ],
+ "tests": [
+ {
+ "about": "Only pages with dates are shown",
+ "type": "parser",
+ "subject": "Query page",
+ "assert-output": {
+ "include-head-items": true,
+ "to-contain": [
+ "First news event",
+ "Second news event"
+ ],
+ "not-contain": [
+ "No date",
+ "without date"
+ ]
+ }
+ },
+ {
+ "about": "Dates are included",
+ "type": "parser",
+ "subject": "Query page",
+ "assert-output": {
+ "include-head-items": true,
+ "to-contain": [
+ "month\":8",
+ "day\":1",
+ "day\":3",
+ "day\":6"
+ ]
+ }
+ },
+ {
+ "about": "Extra printouts are included",
+ "type": "parser",
+ "subject": "Query page",
+ "assert-output": {
+ "include-head-items": true,
+ "to-contain": [
+ "first desc",
+ "second desc"
+ ]
+ }
+ }
+ ],
+ "settings": {
+ "wgContLang": "en",
+ "wgLang": "en",
+ "smwgNamespacesWithSemanticLinks": {
+ "NS_MAIN": true,
+ "SMW_NS_PROPERTY": true
+ }
+ },
+ "meta": {
+ "version": "2",
+ "is-incomplete": false,
+ "debug": false
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/smwdoc.json b/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/smwdoc.json
new file mode 100644
index 00000000..24333029
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/smwdoc.json
@@ -0,0 +1,37 @@
+{
+ "description": "Modern Timeline - smwdoc",
+ "setup": [
+ {
+ "page": "SMWDoc",
+ "contents": "{{#smwdoc:moderntimeline}}"
+ }
+ ],
+ "tests": [
+ {
+ "about": "All parameters have a message",
+ "type": "parser",
+ "subject": "SMWDoc",
+ "assert-output": {
+ "to-contain": [
+ "Background"
+ ],
+ "not-contain": [
+ "modern-timeline-"
+ ]
+ }
+ }
+ ],
+ "settings": {
+ "wgContLang": "en",
+ "wgLang": "en",
+ "smwgNamespacesWithSemanticLinks": {
+ "NS_MAIN": true,
+ "SMW_NS_PROPERTY": true
+ }
+ },
+ "meta": {
+ "version": "2",
+ "is-incomplete": false,
+ "debug": false
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/template.json b/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/template.json
new file mode 100644
index 00000000..99f883c9
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/tests/System/JsonScript/template.json
@@ -0,0 +1,54 @@
+{
+ "description": "Modern Timeline - template",
+ "setup": [
+ {
+ "page": "News date",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Date]]"
+ },
+ {
+ "page": "Description",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "page": "TimelineTest",
+ "namespace": "NS_TEMPLATE",
+ "contents": "Hi! {{{title}}} {{{Description}}} {{{News date}}}"
+ },
+ {
+ "page": "First news event",
+ "contents": "[[News date::August 1, 2019]] [[Description::first desc]]"
+ },
+ {
+ "page": "Query page",
+ "contents": "{{ #ask: [[Description::+]] | format=moderntimeline | ?News date | ?Description | template=TimelineTest }}"
+ }
+ ],
+ "tests": [
+ {
+ "about": "Template parameter",
+ "type": "parser",
+ "subject": "Query page",
+ "assert-output": {
+ "include-head-items": true,
+ "to-contain": [
+ "Hi! First news event first desc 1 August 2019"
+ ]
+ }
+ }
+ ],
+ "settings": {
+ "wgContLang": "en",
+ "wgLang": "en",
+ "smwgNamespacesWithSemanticLinks": {
+ "NS_MAIN": true,
+ "SMW_NS_PROPERTY": true
+ }
+ },
+ "meta": {
+ "version": "2",
+ "is-incomplete": false,
+ "debug": false
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/ModernTimeline/tests/System/JsonScriptTest.php b/www/wiki/extensions/ModernTimeline/tests/System/JsonScriptTest.php
new file mode 100644
index 00000000..4ee5aa4e
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/tests/System/JsonScriptTest.php
@@ -0,0 +1,15 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline\Tests\System;
+
+use SMW\Tests\Integration\JSONScript\JsonTestCaseScriptRunnerTest;
+
+class JsonScriptTest extends JsonTestCaseScriptRunnerTest {
+
+ protected function getTestCaseLocation() {
+ return __DIR__ . '/JsonScript';
+ }
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/tests/Unit/JsonBuilderTest.php b/www/wiki/extensions/ModernTimeline/tests/Unit/JsonBuilderTest.php
new file mode 100644
index 00000000..ba911187
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/tests/Unit/JsonBuilderTest.php
@@ -0,0 +1,162 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline\Tests\Unit;
+
+use ModernTimeline\JsonBuilder;
+use ModernTimeline\ResultFacade\PropertyValueCollection;
+use ModernTimeline\ResultFacade\Subject;
+use ModernTimeline\ResultFacade\SubjectCollection;
+use ModernTimeline\SlidePresenter\SimpleSlidePresenter;
+use ModernTimeline\SlidePresenter\SlidePresenter;
+use PHPUnit\Framework\TestCase;
+use SMW\DIWikiPage;
+use SMW\Query\PrintRequest;
+use SMWDITime;
+
+/**
+ * @covers \ModernTimeline\JsonBuilder
+ */
+class JsonBuilderTest extends TestCase {
+
+ private const PAGE_NAME = 'Some Page';
+
+ public function testEmptySubjectCollection() {
+ $this->assertBuildsJson(
+ [],
+ new SubjectCollection( [] )
+ );
+ }
+
+ public function assertBuildsJson( array $expectedJson, SubjectCollection $input ) {
+ $this->assertSame(
+ [
+ 'events' => $expectedJson
+ ],
+ $this->toJson( $input )
+ );
+ }
+
+ private function toJson( SubjectCollection $input ): array {
+ return ( new JsonBuilder( new SimpleSlidePresenter() ) )->buildTimelineJson( $input );
+ }
+
+ public function testOnlySubjectsWithNoValues() {
+ $this->assertBuildsJson(
+ [],
+ new SubjectCollection(
+ [
+ new Subject(
+ $this->newDiWikiPage(),
+ []
+ )
+ ]
+ )
+ );
+ }
+
+ private function newDiWikiPage( string $pageName = self::PAGE_NAME ): DIWikiPage {
+ $page = $this->createMock( DIWikiPage::class );
+
+ $page->method( 'getTitle' )->willReturn( \Title::newFromText( $pageName ) );
+
+ return $page;
+ }
+
+ private function newSinglePageWithStartAndEndDate(): SubjectCollection {
+ return new SubjectCollection(
+ [
+ new Subject(
+ $this->newDiWikiPage(),
+ [
+ new PropertyValueCollection(
+ $this->newDatePrintRequestWithLabel( 'Has date' ),
+ [
+ new SMWDITime(
+ SMWDITime::CM_GREGORIAN,
+ 2019,
+ 8,
+ 2,
+ 16,
+ 7,
+ 42
+ )
+ ]
+ ),
+ new PropertyValueCollection(
+ $this->newDatePrintRequestWithLabel( 'End date' ),
+ [
+ new SMWDITime(
+ SMWDITime::CM_GREGORIAN,
+ 2019,
+ 8,
+ 5,
+ 17,
+ 39,
+ 23
+ )
+ ]
+ )
+ ]
+ )
+ ]
+ );
+ }
+
+ private function newDatePrintRequestWithLabel( string $label ): PrintRequest {
+ $pr = $this->createMock( PrintRequest::class );
+ $pr->method( 'getLabel' )->willReturn( $label );
+ $pr->method( 'getTypeID' )->willReturn( '_dat' );
+ return $pr;
+ }
+
+ public function testStartDate() {
+ $json = $this->toJson( $this->newSinglePageWithStartAndEndDate() );
+
+ $this->assertSame(
+ [
+ 'year' => 2019,
+ 'month' => 8,
+ 'day' => 2,
+ 'hour' => 16,
+ 'minute' => 7,
+ 'second' => 42,
+ ],
+ $json['events'][0]['start_date']
+ );
+ }
+
+ public function testEndDate() {
+ $json = $this->toJson( $this->newSinglePageWithStartAndEndDate() );
+
+ $this->assertSame(
+ [
+ 'year' => 2019,
+ 'month' => 8,
+ 'day' => 5,
+ 'hour' => 17,
+ 'minute' => 39,
+ 'second' => 23,
+ ],
+ $json['events'][0]['end_date']
+ );
+ }
+
+ public function testHeadline() {
+ $json = $this->toJson( $this->newSinglePageWithStartAndEndDate() );
+
+ $this->assertContains(
+ self::PAGE_NAME,
+ $json['events'][0]['text']['headline']
+ );
+ }
+
+ public function testPageWithStartAndEndDateOnlyLeadsToOneEvent() {
+ $this->assertCount(
+ 1,
+ $this->toJson( $this->newSinglePageWithStartAndEndDate() )['events']
+ );
+ }
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/tests/Unit/SlidePresenter/TemplateSlidePresenterTest.php b/www/wiki/extensions/ModernTimeline/tests/Unit/SlidePresenter/TemplateSlidePresenterTest.php
new file mode 100644
index 00000000..64626df7
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/tests/Unit/SlidePresenter/TemplateSlidePresenterTest.php
@@ -0,0 +1,81 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ModernTimeline\Tests\Unit\SlidePresenter;
+
+use ModernTimeline\ResultFacade\PropertyValueCollection;
+use ModernTimeline\ResultFacade\Subject;
+use ModernTimeline\SlidePresenter\TemplateSlidePresenter;
+use PHPUnit\Framework\TestCase;
+use SMW\DIWikiPage;
+use SMW\Query\PrintRequest;
+use SMWDITime;
+
+/**
+ * @covers \ModernTimeline\SlidePresenter\TemplateSlidePresenter
+ */
+class TemplateSlidePresenterTest extends TestCase {
+
+ private const PAGE_NAME = 'Some Page';
+
+ public function testTemplate() {
+ $this->assertSame(
+ '{{TemplateName|title=Some Page|Has date=2 August 2019 16:07:42|End date=5 August 2019 17:39:23}}',
+ ( new TemplateSlidePresenter( 'TemplateName' ) )->getTemplateText( $this->newSinglePageWithStartAndEndDate() )
+ );
+ }
+
+ private function newSinglePageWithStartAndEndDate(): Subject {
+ return new Subject(
+ $this->newDiWikiPage(),
+ [
+ new PropertyValueCollection(
+ $this->newDatePrintRequestWithLabel( 'Has date' ),
+ [
+ new SMWDITime(
+ SMWDITime::CM_GREGORIAN,
+ 2019,
+ 8,
+ 2,
+ 16,
+ 7,
+ 42
+ )
+ ]
+ ),
+ new PropertyValueCollection(
+ $this->newDatePrintRequestWithLabel( 'End date' ),
+ [
+ new SMWDITime(
+ SMWDITime::CM_GREGORIAN,
+ 2019,
+ 8,
+ 5,
+ 17,
+ 39,
+ 23
+ )
+ ]
+ )
+ ]
+ );
+ }
+
+ private function newDiWikiPage(): DIWikiPage {
+ $page = $this->createMock( DIWikiPage::class );
+
+ $page->method( 'getTitle' )->willReturn( \Title::newFromText( self::PAGE_NAME ) );
+
+ return $page;
+ }
+
+ private function newDatePrintRequestWithLabel( string $label ): PrintRequest {
+ $pr = $this->createMock( PrintRequest::class );
+ $pr->method( 'getLabel' )->willReturn( $label );
+ $pr->method( 'getText' )->willReturn( $label );
+ $pr->method( 'getTypeID' )->willReturn( '_dat' );
+ return $pr;
+ }
+
+}
diff --git a/www/wiki/extensions/ModernTimeline/tests/bootstrap.php b/www/wiki/extensions/ModernTimeline/tests/bootstrap.php
new file mode 100644
index 00000000..1df89fdf
--- /dev/null
+++ b/www/wiki/extensions/ModernTimeline/tests/bootstrap.php
@@ -0,0 +1,18 @@
+<?php
+
+declare( strict_types = 1 );
+
+if ( PHP_SAPI !== 'cli' ) {
+ die( 'Not an entry point' );
+}
+
+error_reporting( -1 );
+ini_set( 'display_errors', '1' );
+
+if ( !is_readable( $autoloaderClassPath = __DIR__ . '/../../SemanticMediaWiki/tests/autoloader.php' ) ) {
+ die( "\nThe Semantic MediaWiki test autoloader is not available" );
+}
+
+require $autoloaderClassPath;
+
+$autoloader->addPsr4( 'SMW\\Tests\\', __DIR__ . '/../../SemanticMediaWiki/tests/phpunit' );
diff --git a/www/wiki/extensions/SemanticResultFormats/.travis.yml b/www/wiki/extensions/SemanticResultFormats/.travis.yml
index 8a339f12..6dfe5634 100644
--- a/www/wiki/extensions/SemanticResultFormats/.travis.yml
+++ b/www/wiki/extensions/SemanticResultFormats/.travis.yml
@@ -1,21 +1,24 @@
language: php
+services:
+ - mysql
+
matrix:
fast_finish: true
include:
- - env: DB=mysql; MW=master; SMW=~3.0@dev
- php: 7.1
- - env: DB=mysql; MW=1.28.2; SMW=~3.0@dev; TYPE=coverage
+ - env: DB=sqlite; MW=master; SMW=~3.0@dev; TYPE=coverage
+ php: 7.3
+ - env: DB=sqlite; MW=REL1_31; SMW=~3.0; MERMAID=dev-master
php: 7.0
- - env: DB=sqlite; MW=1.28.2; SMW=~3.0@dev
+ - env: DB=mysql; MW=REL1_31; SMW=~3.0@dev
php: 7.0
- - env: DB=mysql; MW=1.27.3; SMW=~3.0@dev
- php: 5.6
- - env: DB=postgres; MW=1.27.3; SMW=~3.0@dev
- php: 5.6
+ - env: DB=postgres; MW=REL1_32; SMW=~3.0@dev
+ php: 7.2
+ - env: DB=mysql; MW=REL1_33; SMW=~3.0@dev
+ php: 7.2
allow_failures:
- # Broken due to https://phabricator.wikimedia.org/T188840
- - env: DB=mysql; MW=master; SMW=~3.0@dev
+ # postgres broken due to https://phabricator.wikimedia.org/T188840
+ - env: DB=postgres; MW=REL1_32; SMW=~3.0@dev
install:
- bash ./build/travis/install-mediawiki.sh
diff --git a/www/wiki/extensions/SemanticResultFormats/DefaultSettings.php b/www/wiki/extensions/SemanticResultFormats/DefaultSettings.php
index c05bdfa9..b7482584 100644
--- a/www/wiki/extensions/SemanticResultFormats/DefaultSettings.php
+++ b/www/wiki/extensions/SemanticResultFormats/DefaultSettings.php
@@ -52,7 +52,9 @@ $GLOBALS['srfgFormats'] = [
'dygraphs',
'media',
'datatables',
-
+ 'spreadsheet',
+ 'gantt',
+ 'graph'
// Boilerplate
// Enable access to the format identifier
// 'boilerplate',
@@ -67,7 +69,7 @@ $GLOBALS['srfgFormats'] = [
// Still in alpha:
// 'jitgraph', // Several issues need to be fixed before this can be enabled, most notably it does not work properly with the RL.
- // Disabled by default sicne they contact external sites:
+ // Disabled by default since they contact external sites:
// 'googlebar',
// 'googlepie',
@@ -84,11 +86,6 @@ if( array_key_exists( 'ExtHashTables', $GLOBALS['wgAutoloadClasses'] ) && define
$GLOBALS['srfgFormats'][] = 'hash';
}
-// Enable the excel format only if PHPExcel can be loaded.
-if( class_exists( 'PHPExcel' ) ){
- $GLOBALS['srfgFormats'][] = 'excel';
-}
-
// Used for Array and Hash formats.
// Allows value as string or object instances of Title or Article classes or an array
// where index 0 is the page title and 1 is the namespace-index (by default NS_MAIN)
diff --git a/www/wiki/extensions/SemanticResultFormats/README.md b/www/wiki/extensions/SemanticResultFormats/README.md
index f2cd9fe4..4806f992 100644
--- a/www/wiki/extensions/SemanticResultFormats/README.md
+++ b/www/wiki/extensions/SemanticResultFormats/README.md
@@ -13,10 +13,9 @@ installation independently. For more information, visit the [SRF homepage][srf]
## Requirements
-- PHP 5.6 or later
-- MediaWiki 1.27 or later
+- PHP 7.0 or later
+- MediaWiki 1.31 or later
- Semantic MediaWiki 3.0 or later
-- MySQL 5 or later or SQLite 3 or later
## Installation
diff --git a/www/wiki/extensions/SemanticResultFormats/RELEASE-NOTES.md b/www/wiki/extensions/SemanticResultFormats/RELEASE-NOTES.md
index 824be8e0..2c63772c 100644
--- a/www/wiki/extensions/SemanticResultFormats/RELEASE-NOTES.md
+++ b/www/wiki/extensions/SemanticResultFormats/RELEASE-NOTES.md
@@ -1,4 +1,26 @@
-These are the release notes for the [Semantic Result Formats](https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Result_Formats) MediaWiki extension.
+These are the release notes for the [Semantic Result Formats](https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Result_Formats) (a.k.a SRF) MediaWiki extension.
+
+## SRF 3.1.0
+
+Released on August 18, 2019.
+
+* Minimum requirement for
+ * PHP changed to version 7.0 and later
+ * MediaWiki changed to version 1.31 and later
+* Added compatibility with Semantic MediaWiki 3.1.x
+* Improved compatibility with PHP 7.2+
+* Added `spreadsheet` format (by Stephan Gambke)
+* Deprecated `excel` format (by Stephan Gambke)
+* Added `gantt` result format (by Sebastian Schmid)
+* Added `filename` parameter to the `vcard` format (by James Hong Kong)
+* Added `template` parameter to the `outline` format (by James Hong Kong)
+* Added css `class` parameter to the `tree` format (by Stephan Gambke)
+* Improved `timeseries` format (by Christian Zagrodnick)
+ * Fixed `uncaught exception: Invalid dimensions for plot`
+ * Only correct plot height when there are tabs
+* Other bug fixes and code improvements
+* Made the extension installable without the `php-gd` PHP extension
+* Updated translations (by translatewiki.net community)
## SRF 3.0.1
diff --git a/www/wiki/extensions/SemanticResultFormats/Resources.php b/www/wiki/extensions/SemanticResultFormats/Resources.php
index ce2f004c..26871a9e 100644
--- a/www/wiki/extensions/SemanticResultFormats/Resources.php
+++ b/www/wiki/extensions/SemanticResultFormats/Resources.php
@@ -235,7 +235,7 @@ return [
'styles' => 'dygraphs/resources/ext.srf.dygraphs.css',
'dependencies' => [
'jquery.client',
- 'jquery.async',
+ 'ext.jquery.async',
'ext.srf.util',
'ext.smw.tooltip',
'ext.dygraphs.combined',
@@ -473,7 +473,7 @@ return [
'styles' => 'jqplot/resources/ext.srf.jqlpot.chart.css',
'dependencies' => [
'ext.jquery.jqplot.core',
- 'jquery.async',
+ 'ext.jquery.async',
'ext.srf.util',
'ext.srf.jqplot.themes'
]
@@ -571,7 +571,6 @@ return [
'scripts' => 'timeline/resources/ext.srf.timeline.js',
'dependencies' => [
'ext.smile.timeline',
- 'mediawiki.legacy.wikibits'
],
'position' => 'top',
'targets' => [ 'mobile', 'desktop' ]
@@ -634,7 +633,6 @@ return [
'JitGraph/base.css',
],
'dependencies' => [
- 'mediawiki.legacy.wikibits',
'ext.srf.jquery.progressbar',
'ext.srf.jit',
],
@@ -866,7 +864,7 @@ return [
'ext.srf.timeseries.flot' => $formatModule + [
'scripts' => 'timeseries/resources/ext.srf.timeseries.flot.js',
'dependencies' => [
- 'jquery.async',
+ 'ext.jquery.async',
'ext.jquery.flot',
'ext.srf.util',
'ext.srf.flot.core'
@@ -1012,6 +1010,12 @@ return [
'dependencies' => 'ext.srf.datatables'
],
+ // Mermaid Format
+ 'ext.srf.gantt' => $formatModule + [
+ 'scripts' => 'Gantt/resources/ext.gantt.js',
+ 'dependencies' => 'ext.mermaid'
+ ]
+
// Boilerplate example registration
/*
// Simple implementation
diff --git a/www/wiki/extensions/SemanticResultFormats/SemanticResultFormats.hooks.php b/www/wiki/extensions/SemanticResultFormats/SemanticResultFormats.hooks.php
index cda03e33..fba34807 100644
--- a/www/wiki/extensions/SemanticResultFormats/SemanticResultFormats.hooks.php
+++ b/www/wiki/extensions/SemanticResultFormats/SemanticResultFormats.hooks.php
@@ -189,19 +189,13 @@ final class SRFHooks {
// Intro text, do not escape the message here as it contains
// href links
- $preferences['srf-prefs-intro'] =
- [
- 'type' => 'info',
- 'label' => '&#160;',
- 'default' => Html::rawElement(
- 'span',
- [ 'class' => 'srf-prefs-intro plainlinks' ],
- wfMessage( 'srf-prefs-intro-text' )->parseAsBlock()
- ),
- 'section' => 'smw/srf',
- 'raw' => 1,
- 'rawrow' => 1,
- ];
+ $preferences['srf-prefs-intro'] = [
+ 'type' => 'info',
+ 'label' => '&#160;',
+ 'default' => wfMessage( 'srf-prefs-intro-text' )->parseAsBlock(),
+ 'section' => 'smw/srf',
+ 'raw' => 1,
+ ];
// Enable auto update during a page refresh
$preferences['srf-prefs-eventcalendar-options-update-default'] = [
diff --git a/www/wiki/extensions/SemanticResultFormats/SemanticResultFormats.php b/www/wiki/extensions/SemanticResultFormats/SemanticResultFormats.php
index 90d89f53..36a66555 100644
--- a/www/wiki/extensions/SemanticResultFormats/SemanticResultFormats.php
+++ b/www/wiki/extensions/SemanticResultFormats/SemanticResultFormats.php
@@ -109,10 +109,10 @@ class SemanticResultFormats {
'eventline' => 'SRFTimeline',
'vcard' => 'SRF\vCard\vCardFileExportPrinter',
'icalendar' => 'SRF\iCalendar\iCalendarFileExportPrinter',
- 'bibtex' => 'SRFBibTeX',
+ 'bibtex' => 'SRF\BibTex\BibTexFileExportPrinter',
'calendar' => 'SRFCalendar',
'eventcalendar' => 'SRF\EventCalendar',
- 'outline' => 'SRFOutline',
+ 'outline' => 'SRF\Outline\OutlineResultPrinter',
'sum' => 'SRFMath',
'product' => 'SRFMath',
'average' => 'SRFMath',
@@ -125,7 +125,7 @@ class SemanticResultFormats {
'jitgraph' => 'SRFJitGraph',
'jqplotchart' => 'SRFjqPlotChart',
'jqplotseries' => 'SRFjqPlotSeries',
- 'graph' => 'SRFGraph',
+ 'graph' => 'SRF\Graph\GraphPrinter',
'process' => 'SRFProcess',
'gallery' => 'SRF\Gallery',
'tagcloud' => 'SRF\TagCloud',
@@ -147,8 +147,8 @@ class SemanticResultFormats {
'dygraphs' => 'SRFDygraphs',
'incoming' => 'SRFIncoming',
'media' => 'SRF\MediaPlayer',
- 'excel' => 'SRF\SRFExcel',
- 'datatables' => 'SRF\DataTables'
+ 'datatables' => 'SRF\DataTables',
+ 'gantt' => 'SRF\Gantt\GanttPrinter'
];
$formatAliases = [
@@ -161,6 +161,11 @@ class SemanticResultFormats {
'jqplotseries' => [ 'jqplot series' ],
];
+ if ( class_exists( '\PhpOffice\PhpSpreadsheet\Spreadsheet' ) ) {
+ $formatClasses['spreadsheet'] = 'SRF\SpreadsheetPrinter';
+ $formatAliases['spreadsheet'] = [ 'excel' ];
+ }
+
foreach ( $GLOBALS['srfgFormats'] as $format ) {
if ( array_key_exists( $format, $formatClasses ) ) {
$GLOBALS['smwgResultFormats'][$format] = $formatClasses[$format];
diff --git a/www/wiki/extensions/SemanticResultFormats/build/travis/install-semantic-result-formats.sh b/www/wiki/extensions/SemanticResultFormats/build/travis/install-semantic-result-formats.sh
index cc75d251..fb79ef4b 100644
--- a/www/wiki/extensions/SemanticResultFormats/build/travis/install-semantic-result-formats.sh
+++ b/www/wiki/extensions/SemanticResultFormats/build/travis/install-semantic-result-formats.sh
@@ -26,6 +26,12 @@ function installToMediaWikiRoot {
installPHPUnitWithComposer
installSMWWithComposer
+
+ if [ "$MERMAID" != "" ]
+ then
+ composer require 'mediawiki/mermaid='$MERMAID --update-with-dependencies
+ fi
+
composer require mediawiki/semantic-result-formats "dev-master"
cd extensions
@@ -57,6 +63,11 @@ function updateConfiguration {
# SMW#1732
echo 'wfLoadExtension( "SemanticMediaWiki" );' >> LocalSettings.php
+ if [ "$MERMAID" != "" ]
+ then
+ echo 'wfLoadExtension( "Mermaid" );' >> LocalSettings.php
+ fi
+
echo 'wfLoadExtension( "SemanticResultFormats" );' >> LocalSettings.php
echo 'error_reporting(E_ALL| E_STRICT);' >> LocalSettings.php
diff --git a/www/wiki/extensions/SemanticResultFormats/composer.json b/www/wiki/extensions/SemanticResultFormats/composer.json
index 2c3ace08..abb877c5 100644
--- a/www/wiki/extensions/SemanticResultFormats/composer.json
+++ b/www/wiki/extensions/SemanticResultFormats/composer.json
@@ -44,14 +44,16 @@
"source": "https://github.com/SemanticMediaWiki/SemanticResultFormats"
},
"require": {
- "php": ">=5.6.0",
+ "php": ">=7.0",
"composer/installers": "1.*,>=1.0.1",
"mediawiki/semantic-media-wiki": "~3.0",
"nicmart/tree": "^0.2.7",
"data-values/geo": "~4.0|~3.0|~2.0",
- "symfony/css-selector": "^3.3"
+ "symfony/css-selector": "^3.3",
+ "mediawiki/mermaid": "~2.1"
},
"suggest": {
+ "phpoffice/phpspreadsheet": "Required for 'format=spreadsheet'",
"phpoffice/phpexcel": "Required for 'format=excel'",
"mediawiki/graph-viz": "Required for 'format=graph' and 'format=process'"
},
@@ -71,13 +73,14 @@
},
"extra": {
"branch-alias": {
- "dev-master": "3.0.x-dev"
+ "dev-master": "3.1.x-dev"
}
},
"config": {
"process-timeout": 0
},
"scripts":{
+ "test": "php ../../tests/phpunit/phpunit.php -c phpunit.xml.dist",
"phpunit": "php ../../tests/phpunit/phpunit.php -c phpunit.xml.dist",
"integration": "composer phpunit -- --testsuite=semantic-result-formats-integration"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/docs/COMPATIBILITY.md b/www/wiki/extensions/SemanticResultFormats/docs/COMPATIBILITY.md
new file mode 100644
index 00000000..e340b7b2
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/docs/COMPATIBILITY.md
@@ -0,0 +1,111 @@
+This document holds the **compatibility information** for the Semantic Result Formats (SRF) extension.
+
+- For a full list of changes in each release, see the [release notes](https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/RELEASE-NOTES.md).
+- For instructions on how to install the latest version, see the [installation instructions](https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/docs/INSTALL.md).
+
+### Platform compatibility
+
+The PHP and MediaWiki version ranges listed are those in which SRF is known to work. It might also
+work with more recent versions of PHP and MediaWiki, though this is not guaranteed. Increases of
+minimum requirements are indicated in bold.
+
+<table>
+ <tr>
+ <th>SRF</th>
+ <th>PHP</th>
+ <th>MediaWiki</th>
+ <th>Semantic MediaWiki</th>
+ <th>Release status</th>
+ </tr>
+ <tr>
+ <th>3.2.x</th>
+ <td><strong>7.1.0</strong> - 7.4.x</td>
+ <td>1.31 - 1.33+</td>
+ <td>3.0.x - 3.1.x+</td>
+ <td>Future release</td>
+ <tr>
+ <tr>
+ <th>3.1.x</th>
+ <td><strong>7.0.0</strong> - 7.3.x</td>
+ <td><strong>1.31</strong> - 1.33</td>
+ <td>3.0.x - 3.1.x</td>
+ <td><strong>Stable release</strong></td>
+ <tr>
+ <tr>
+ <th>3.0.x</th>
+ <td><strong>5.6.0</strong> - 7.1.x</td>
+ <td><strong>1.27</strong> - 1.33</td>
+ <td><strong>3.0.x</strong></td>
+ <td>Obsolete release, no support</td>
+ <tr>
+ <tr>
+ <th>2.5.x</th>
+ <td><strong>5.5.0</strong> - 7.0.x</td>
+ <td><strong>1.23</strong> - 1.29</td>
+ <td>2.1.x - 2.5.x</td>
+ <td>Obsolete release, no support</td>
+ <tr>
+ <th>2.4.x</th>
+ <td>5.3.2 - 7.0.x</td>
+ <td>1.19 - 1.28</td>
+ <td>2.1.x</td>
+ <td>Obsolete release, no support</td>
+ </tr>
+ <tr>
+ <th>2.3.x</th>
+ <td>5.3.2 - 5.6.x</td>
+ <td>1.19 - 1.25</td>
+ <td>2.1.x</td>
+ <td>Obsolete release, no support</td>
+ </tr>
+ <tr>
+ <th>2.2.x</th>
+ <td>5.3.2 - 5.6.x</td>
+ <td>1.19 - 1.25</td>
+ <td>2.1.x</td>
+ <td>Obsolete release, no support</td>
+ </tr>
+ <tr>
+ <th>2.1.x</th>
+ <td>5.3.2 - 5.6.x</td>
+ <td>1.19 - 1.24</td>
+ <td>2.1.x</td>
+ <td>Obsolete release, no support</td>
+ </tr>
+ <tr>
+ <th>2.0.x</th>
+ <td>5.3.2 - 5.5.x</td>
+ <td>1.19 - 1.23</td>
+ <td>2.0.x</td>
+ <td>Obsolete release, no support</td>
+ </tr>
+ <tr>
+ <th>1.9.x</th>
+ <td><strong>5.3.2</strong> - 5.5.x</td>
+ <td><strong>1.19</strong> - 1.23</td>
+ <td>1.9.x</td>
+ <td>Obsolete release, no support</td>
+ </tr>
+ <tr>
+ <th>1.8.x</th>
+ <td>5.2.0 - 5.5.x</td>
+ <td><strong>1.17</strong> - 1.22</td>
+ <td>1.8.x</td>
+ <td>Obsolete release, no support</td>
+ </tr>
+ <tr>
+ <th>1.7.x</th>
+ <td>5.2.0 - 5.4.x</td>
+ <td>1.16 - 1.19</td>
+ <td>1.7.x</td>
+ <td>Obsolete release, no support</td>
+ </tr>
+</table>
+
+**Note:**
+* It is strongly recommended to also always upgrade the underlying MediaWiki software to supported versions.
+See the [version lifecycle](https://www.mediawiki.org/wiki/Version_lifecycle) for current information on
+supported versions.
+* It is strongly recommended to also always upgrade the underlying Semantic MediaWiki software to supported
+versions. See the page on [compatibility](https://www.semantic-mediawiki.org/wiki/Help:Compatibility) for
+current information on supported versions.
diff --git a/www/wiki/extensions/SemanticResultFormats/docs/INSTALL.md b/www/wiki/extensions/SemanticResultFormats/docs/INSTALL.md
index 42fba85c..39087a47 100644
--- a/www/wiki/extensions/SemanticResultFormats/docs/INSTALL.md
+++ b/www/wiki/extensions/SemanticResultFormats/docs/INSTALL.md
@@ -1,161 +1,10 @@
-# Installation
+This document holds the **installation and configuration instructions** for the [Semantic Result Formats](README.md) (SRF) extension.
+
+- For information on the release series, see the [version overview](https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/VERSIONS.md).
+- For a full list of changes in each release, see the [release notes](https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/RELEASE-NOTES.md).
+- For instructions on how to install the latest version, see the [installation instructions](https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/docs/INSTALL.md).
-These are the installation and configuration instructions for [Semantic Result Formats](README.md) (SRF).
-
-## Versions
-
-<table>
- <tr>
- <th></th>
- <th>Status</th>
- <th>Release date</th>
- <th>Git branch</th>
- </tr>
- <tr>
- <th><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/docs/RELEASE-NOTES.md">SRF 3.0.1</a></th>
- <td>Stable version</td>
- <td>2019-03-27</td>
- <td><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/tree/3.0.x">3.0.x</a></td>
- </tr>
- <tr>
- <th><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/docs/RELEASE-NOTES.md">SRF 2.5.6</a></th>
- <td>Obsolete version</td>
- <td>2018-09-07</td>
- <td><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/tree/2.5.x">2.5.x</a></td>
- </tr>
- <tr>
- <th><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/2.5.x/RELEASE-NOTES.md">SRF 2.4.3</a></th>
- <td>Obsolete version</td>
- <td>2017-05-06</td>
- <td><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/tree/2.4.x">2.4.x</a></td>
- </tr>
- <tr>
- <th><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/2.4.x/RELEASE-NOTES.md">SRF 2.3.0</a></th>
- <td>Obsolete version</td>
- <td>2015-09-24</td>
- <td><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/tree/2.3">2.3</a></td>
- </tr>
- <tr>
- <th><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/docs/RELEASE-NOTES.md">SRF 2.2.0</a></th>
- <td>Obsolete version</td>
- <td>2015-07-30</td>
- <td><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/tree/2.2">2.2</a></td>
- </tr>
- <tr>
- <th><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/docs/RELEASE-NOTES.md">SRF 2.1.2</a></th>
- <td>Obsolete version</td>
- <td>2015-02-26</td>
- <td><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/tree/2.1.2">2.1.2</a></td>
- </tr>
- <tr>
- <th><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/docs/RELEASE-NOTES.md">SRF 2.0.0</a></th>
- <td>Obsolete version</td>
- <td>2014-08-06</td>
- <td><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/tree/2.0">2.0</a></td>
- </tr>
- <tr>
- <th><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/docs/RELEASE-NOTES.md">SRF 1.9.1</a></th>
- <td>Obsolete version</td>
- <td>2014-04-25</td>
- <td><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/tree/1.9.1">1.9.1</a></td>
- </tr>
- <tr>
- <th><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/docs/RELEASE-NOTES.md">SRF 1.9.0</a></th>
- <td>Obsolete version</td>
- <td>2014-01-10</td>
- <td><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/tree/1.9">1.9</a></td>
- </tr>
- <tr>
- <th><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/blob/master/docs/RELEASE-NOTES.md">SRF 1.8.0</a></th>
- <td>Obsolete version</td>
- <td>2012-12-02</td>
- <td><a href="https://github.com/SemanticMediaWiki/SemanticResultFormats/tree/1.8">1.8</a></td>
- </tr>
-</table>
-
-### Platform compatibility
-
-The PHP and MediaWiki version ranges listed are those in which SRF is known to work. It might also
-work with more recent versions of PHP and MediaWiki, though this is not guaranteed. Increases of
-minimum requirements are indicated in bold.
-
-<table>
- <tr>
- <th></th>
- <th>PHP</th>
- <th>MediaWiki</th>
- <th>Semantic MediaWiki</th>
- </tr>
- <tr>
- <th>SRF 3.0.x</th>
- <td><strong>5.6.x</strong> - latest</td>
- <td><strong>1.27</strong> - latest</td>
- <td><strong>3.0.x</strong></td>
- <tr>
- <tr>
- <th>SRF 2.5.x</th>
- <td><strong>5.5.x</strong> - 7.0.x</td>
- <td><strong>1.23</strong> - 1.29</td>
- <td>2.1.x - 2.5.x</td>
- <tr>
- <th>SRF 2.4.x</th>
- <td>5.3.2 - 7.0.x</td>
- <td>1.19 - 1.28</td>
- <td>2.1.x</td>
- </tr>
- <tr>
- <th>SRF 2.3.x</th>
- <td>5.3.2 - 5.6.x</td>
- <td>1.19 - 1.25</td>
- <td>2.1.x</td>
- </tr>
- <tr>
- <th>SRF 2.2.x</th>
- <td>5.3.2 - 5.6.x</td>
- <td>1.19 - 1.25</td>
- <td>2.1.x</td>
- </tr>
- <tr>
- <th>SRF 2.1.x</th>
- <td>5.3.2 - 5.6.x</td>
- <td>1.19 - 1.24</td>
- <td>2.1.x</td>
- </tr>
- <tr>
- <th>SRF 2.0.x</th>
- <td>5.3.2 - 5.5.x</td>
- <td>1.19 - 1.23</td>
- <td>2.0.x</td>
- </tr>
- <tr>
- <th>SRF 1.9.x</th>
- <td><strong>5.3.2</strong> - 5.5.x</td>
- <td><strong>1.19</strong> - 1.23</td>
- <td>1.9.x</td>
- </tr>
- <tr>
- <th>SRF 1.8.x</th>
- <td>5.2.0 - 5.5.x</td>
- <td><strong>1.17</strong> - 1.22</td>
- <td>1.8.x</td>
- </tr>
- <tr>
- <th>SRF 1.7.x</th>
- <td>5.2.0 - 5.4.x</td>
- <td>1.16 - 1.19</td>
- <td>1.7.x</td>
- </tr>
-</table>
-
-**Note:**
-* It is strongly recommended to also always upgrade the underlying MediaWiki software to supported versions.
-See the [version lifecycle](https://www.mediawiki.org/wiki/Version_lifecycle) for current information on
-supported versions.
-* It is strongly recommended to also always upgrade the underlying Semantic MediaWiki software to supported
-versions. See the page on [compatibility](https://www.semantic-mediawiki.org/wiki/Help:Compatibility) for
-current information on supported versions.
-
-## Installation
+# Installation
The recommended way to install Semantic Result Formats is using [Composer](http://getcomposer.org) with
[MediaWiki's built-in support for Composer](https://www.mediawiki.org/wiki/Composer).
@@ -165,20 +14,13 @@ instructions provided.
### Step 1
-Change to the base directory of your MediaWiki installation. This is where the "LocalSettings.php"
-file is located. If you have not yet installed Composer do it now by running the following command
-in your shell:
-
- wget https://getcomposer.org/composer.phar
-
-### Step 2
-
-If you do not have a "composer.local.json" file yet, create one and add the following content to it:
+Change to the base directory of your MediaWiki installation. If you do not have a "composer.local.json" file yet,
+create one and add the following content to it:
```
{
"require": {
- "mediawiki/semantic-result-formats": "~3.0"
+ "mediawiki/semantic-result-formats": "~3.1"
}
}
```
@@ -186,11 +28,11 @@ If you do not have a "composer.local.json" file yet, create one and add the foll
If you already have a "composer.local.json" file add the following line to the end of the "require"
section in your file:
- "mediawiki/semantic-result-formats": "~3.0"
+ "mediawiki/semantic-result-formats": "~3.1"
Remember to add a comma to the end of the preceding line in this section.
-### Step 3
+### Step 2
Run the following command in your shell:
@@ -199,17 +41,12 @@ Run the following command in your shell:
Note if you have Git installed on your system add the `--prefer-source` flag to the above command. Also
note that it may be necessary to run this command twice. If unsure do it twice right away.
-### Step 4
+### Step 3
Add the following line to the end of your "LocalSettings.php" file:
wfLoadExtension( 'SemanticResultFormats' );
-### Verify installation success
-
-As final step, you can verify SRF got installed by looking at the "Special:Version" page on your wiki and
-check that it is listed in the semantic extensions section.
-
## Configuration
A default set of formats is enabled. These are the formats that satisfy the following criteria:
diff --git a/www/wiki/extensions/SemanticResultFormats/docs/README.md b/www/wiki/extensions/SemanticResultFormats/docs/README.md
index 2e35ccc0..898bcf8e 100644
--- a/www/wiki/extensions/SemanticResultFormats/docs/README.md
+++ b/www/wiki/extensions/SemanticResultFormats/docs/README.md
@@ -1,6 +1,9 @@
+## General documentation
-* [Installation](INSTALL.md)
-* [Extension:Semantic Result Formats](https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Result_Formats)
+* [Installation and configuration](INSTALL.md)
+* [Release notes (changes in each version)](../RELEASE-NOTES.md)
+* [Platform compatibility per version](COMPATIBILITY.md)
+* [Homepage](https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Result_Formats)
## Technical documentation
diff --git a/www/wiki/extensions/SemanticResultFormats/extension.json b/www/wiki/extensions/SemanticResultFormats/extension.json
index 66d24818..4af484ef 100644
--- a/www/wiki/extensions/SemanticResultFormats/extension.json
+++ b/www/wiki/extensions/SemanticResultFormats/extension.json
@@ -1,20 +1,23 @@
{
"name": "SemanticResultFormats",
- "version": "3.0.1",
+ "version": "3.1.0",
"author": [
"James Hong Kong",
"Stephan Gambke",
- "Jeroen De Dauw",
+ "[https://www.entropywins.wtf/mediawiki Jeroen De Dauw]",
"Yaron Koren",
"..."
],
- "url": "https://www.semantic-mediawiki.org/wiki/Extension:Semantic_Result_Formats",
+ "url": "https://www.semantic-mediawiki.org/wiki/Semantic_Result_Formats",
"descriptionmsg": "srf-desc",
"namemsg": "srf-name",
"license-name": "GPL-2.0-or-later",
"type": "semantic",
"requires": {
- "MediaWiki": ">= 1.27"
+ "MediaWiki": ">= 1.31",
+ "extensions": {
+ "SemanticMediaWiki": ">= 3.0"
+ }
},
"MessagesDirs": {
"SemanticResultFormats": [
@@ -26,5 +29,5 @@
"SemanticResultFormats::onExtensionFunction"
],
"load_composer_autoloader":true,
- "manifest_version": 1
+ "manifest_version": 2
}
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/Gantt/GanttPrinter.php b/www/wiki/extensions/SemanticResultFormats/formats/Gantt/GanttPrinter.php
new file mode 100644
index 00000000..9b59fdf0
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/formats/Gantt/GanttPrinter.php
@@ -0,0 +1,284 @@
+<?php
+/**
+ * SMW result printer for Gantt Diagrams using mermaidjs.
+ * https://github.com/knsv/mermaid
+ *
+ * In order to use this printer you need to have
+ * the Mermaid MediaWiki extension installed.
+ * https://www.mediawiki.org/wiki/Extension:Mermaid
+ *
+ * @file Gantt.php
+ * @ingroup SemanticResultFormats
+ *
+ * @licence GNU GPL v2+
+ * @author Sebastian Schmid
+ */
+
+namespace SRF\Gantt;
+
+use SMWOutputs;
+use SMWQueryResult;
+use SMWResultPrinter;
+use SMWDITime;
+use SMWDIBlob;
+use Html;
+
+class GanttPrinter extends SMWResultPrinter {
+
+ protected $mGantt = null;
+ protected $mErrors = [];
+
+ public function getName() {
+ return wfMessage( 'srf-printername-gantt' )->text();
+ }
+
+ public function getParamDefinitions( array $definitions ) {
+ $params = parent::getParamDefinitions( $definitions );
+
+ $params[] = [
+ 'type' => 'string',
+ 'name' => 'diagramtitle',
+ 'message' => 'srf-paramdesc-gantt-diagramtitle',
+ 'default' => ''
+ ];
+
+ $params[] = [
+ 'type' => 'string',
+ 'name' => 'theme',
+ 'message' => 'srf-paramdesc-gantt-diagramtheme',
+ 'default' => 'default'
+ ];
+
+ $params[] = [
+ 'type' => 'string',
+ 'name' => 'axisformat',
+ 'message' => 'srf-paramdesc-gantt-axisformat',
+ 'default' => '%m/%d/%Y'
+ ];
+
+ $params[] = [
+ 'type' => 'string',
+ 'name' => 'statusmapping',
+ 'message' => 'srf-paramdesc-gantt-statusmapping',
+ 'default' => ''
+ ];
+
+ $params[] = [
+ 'type' => 'string',
+ 'name' => 'prioritymapping',
+ 'message' => 'srf-paramdesc-gantt-prioritymapping',
+ 'default' => ''
+ ];
+
+ $params[] = [
+ 'type' => 'integer',
+ 'name' => 'titletopmargin',
+ 'message' => 'srf-paramdesc-gantt-titletopmargin',
+ 'default' => 25
+ ];
+
+ $params[] = [
+ 'type' => 'integer',
+ 'name' => 'barheight',
+ 'message' => 'srf-paramdesc-gantt-barheight',
+ 'default' => 20
+ ];
+
+ $params[] = [
+ 'type' => 'integer',
+ 'name' => 'leftpadding',
+ 'message' => 'srf-paramdesc-gantt-leftpadding',
+ 'default' => 75
+ ];
+
+ $params[] = [
+ 'type' => 'integer',
+ 'name' => 'bargap',
+ 'message' => 'srf-paramdesc-gantt-bargap',
+ 'default' => 4
+ ];
+
+ return $params;
+ }
+
+ /**
+ * Handle (set) the result format parameters
+ *
+ * @see SMWResultPrinter::handleParameters()
+ */
+ protected function handleParameters( array $params, $outputmode ) {
+
+ //Set header params
+ $this->params['title'] = trim( $params['diagramtitle'] );
+ $this->params['axisformat'] = trim( $params['axisformat'] );
+ $this->params['statusmapping'] = $this->getValidatedMapping( $params[ 'statusmapping' ], 'statusmapping', [ 'active', 'done' ] );
+ $this->params['prioritymapping'] = $this->getValidatedMapping( $params[ 'prioritymapping' ], 'prioritymapping', [ 'crit' ] );
+ $this->params['theme'] = $this->getValidatedTheme($params['theme']);
+
+ $this->mGantt = $this->getGantt();
+ }
+
+ /**
+ * Return serialised results in specified format.
+ * @param SMWQueryResult $queryResult
+ * @param $outputmode
+ * @return string
+ */
+ protected function getResultText( SMWQueryResult $queryResult, $outputmode ) {
+
+ // Show warning if Extension:Mermaid is not available
+ if ( !class_exists( 'Mermaid' ) && !class_exists( 'Mermaid\\MermaidParserFunction' ) ) {
+ $queryResult->addErrors( [wfMessage('')->text()] );
+ return '';
+ }
+
+ // Load general Modules
+ SMWOutputs::requireResource( 'ext.srf.gantt' );
+
+ //Add Tasks & Sections
+ while ( $row = $queryResult->getNext() ) {
+
+ $status = [];
+ $priority = [];
+ $startDate = '';
+ $endDate = '';
+ $taskID = '';
+ $taskTitle = '';
+ $sections = [];
+
+ // Loop through all field of a row
+ foreach ( $row as $field ) {
+
+ $fieldLabel = $field->getPrintRequest()->getLabel();
+
+ //get values
+ foreach ( $field->getContent() as $dataItem ) {
+
+ switch ( $fieldLabel ) {
+ case 'section':
+ $sections[$dataItem->getTitle()->getPrefixedDBKey()] = $dataItem->getSortKey();
+ break;
+ case 'task':
+ if ( $dataItem instanceof SMWDIBlob ) {
+ $taskTitle = $dataItem->getString();
+ $taskID = $field->getResultSubject()->getTitle()->getPrefixedDBKey();
+ }
+ break;
+ case 'startdate':
+ if ( $dataItem instanceof SMWDITime ) {
+ $startDate = $dataItem->getMwTimestamp();
+ }
+ break;
+ case 'enddate':
+ if ( $dataItem instanceof SMWDITime ) {
+ $endDate = $dataItem->getMwTimestamp();
+ }
+ break;
+ case 'status':
+ if ( $dataItem instanceof SMWDIBlob ) {
+ $status[] = $dataItem->getString();
+ }
+ break;
+ case 'priority':
+ if ( $dataItem instanceof SMWDIBlob ) {
+ $priority[] = $dataItem->getString();
+ }
+ break;
+ }
+ }
+ }
+
+ // Add section/Task
+ // Title, TaskID, StartDate and EndDate are required
+ if ( $taskID !== '' && $taskTitle !== '' && $startDate !== '' && $endDate !== '' ) {
+ $this->mGantt->addTask( $taskID, $taskTitle, $status, $priority, $startDate, $endDate );
+
+ // If no section was found, put task into a dummy section object
+ // "gantt-no-section#21780240" is used to identify Tasks that with no section (dummy section)
+ if ( count( $sections ) == 0 ) {
+ $this->mGantt->addSection( 'gantt-no-section#21780240', '', $startDate, $endDate, $taskID );
+ } else {
+ foreach ( $sections as $sectionID => $sectionTitle ) {
+ $this->mGantt->addSection( $sectionID, $sectionTitle, $startDate, $endDate, $taskID );
+ }
+ }
+ }
+ }
+
+ // Improve unique id by adding a random number
+ $id = uniqid( 'srf-gantt-' . rand( 1, 10000 ) );
+
+ // Add gantt configurations
+ $config = [
+ 'theme' => $this->params['theme'],
+ 'gantt' => [
+ 'leftPadding' => intval( $this->params['leftpadding'] ),
+ 'titleTopMargin' => intval( $this->params['titletopmargin'] ),
+ 'barHeight' => intval( $this->params['barheight'] ),
+ 'barGap' => intval( $this->params['bargap'] )
+ ]
+ ];
+
+
+ // Manage Output
+ if ( !empty( $this->mErrors ) ) {
+ return $queryResult->addErrors( $this->mErrors );
+ } else {
+ return Html::rawElement( 'div', [
+ 'id' => $id,
+ 'class' => 'srf-gantt',
+ 'data-mermaid' => html_entity_decode( json_encode( [
+ 'content' => $this->mGantt->getGanttOutput(),
+ 'config' => $config
+ ]))
+ ], Html::rawElement( 'div', [ 'class' => 'mermaid-dots' ]));
+ }
+ }
+
+ private function getGantt(){
+ return new Gantt( $this->params );
+ }
+
+ /**
+ * Return valid theme as string
+ * @param String $theme
+ *
+ * @return string
+ */
+ private function getValidatedTheme( $theme ) {
+ $theme = trim( $theme );
+
+ if ( !in_array( $this->params['theme'], [ 'default', 'neutral', 'dark', 'forest' ] ) ) {
+ $this->mErrors[] = wfMessage( 'srf-error-gantt-theme' )->text();
+ }
+
+ return $theme;
+ }
+
+
+ private function getValidatedMapping( $params, $mappingType, array $mappingKeys){
+ //Validate mapping
+ $mapping = [];
+
+ if ( !empty( $params ) ) {
+ $paramMapping = explode( ';', trim( $params ) );
+
+ foreach ( $paramMapping as $pm ) {
+ $pmKeyVal = explode( '=>', $pm, 2);
+
+ // if no key value pair
+ if ( count( $pmKeyVal ) !== 2 ) {
+ $this->mErrors[] = wfMessage( 'srf-error-gantt-mapping-assignment', $mappingType )->text();
+ } else {
+ $mapping[trim( $pmKeyVal[0] )] = trim( $pmKeyVal[1] );
+
+ if(!in_array(trim( $pmKeyVal[1] ), $mappingKeys)){
+ $this->mErrors[] = wfMessage( 'srf-error-gantt-mapping-keywords' )->text();
+ }
+ }
+ }
+ return $mapping;
+ }
+ return '';
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/Gantt/resources/ext.gantt.js b/www/wiki/extensions/SemanticResultFormats/formats/Gantt/resources/ext.gantt.js
new file mode 100644
index 00000000..77067319
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/formats/Gantt/resources/ext.gantt.js
@@ -0,0 +1,81 @@
+/*!
+ * @file
+ * @ingroup SMW
+ *
+ * @licence GNU GPL v2+
+ * @author Sebastian Schmid
+ */
+
+( function ($, mw) {
+
+ 'use strict';
+
+ mw.loader.using(['mediawiki.api', 'ext.mermaid']).then(function () {
+
+ $(document).ready(function () {
+
+ $('.srf-gantt').each(function () {
+
+ var id = $(this).attr('id') + '-diagram';
+ var data = $(this).data('mermaid');
+
+ $(this).find('.mermaid-dots').hide();
+ $(this).append('<div id=' + id + '> ' + data.content + ' </div>');
+ mermaid.initialize(data.config);
+ mermaid.init(undefined, $("#" + id));
+
+ // replace <esc>35</esc> with # Tag
+ $(".srf-gantt svg text:contains('<esc>35</esc>')").each(function () {
+ var text = $(this).text().replace('<esc>35</esc>', '#');
+ $(this).text(text);
+ });
+
+ // word wrapping in <text>
+ $('.srf-gantt text.sectionTitle').each(function(index, value){
+ forceTextWrappingOn( this, data.config.gantt.leftPadding);
+ });
+ });
+ });
+ });
+
+ /*
+ * Credits
+ * Project: https://gist.github.com/jkappers/3892971
+ * Author jkappers (Joshua Kappers)
+ */
+ function forceTextWrappingOn(node, width) {
+ var svgns = "http://www.w3.org/2000/svg";
+
+ if(node.firstChild != null){
+ var chars = node.firstChild.nodeValue.split(' '),
+ x = parseInt(node.getAttribute('x'), 10),
+ y = parseInt(node.getAttribute('y'), 10),
+ nodeBB = node.getBBox(),
+ index = 0,
+ tspan, tspanWidth, textNode;
+
+ node.removeChild(node.firstChild);
+
+ for (var c in chars) {
+ if (chars.hasOwnProperty(c)) {
+ tspanWidth = tspan == null ? 0 : tspan.getComputedTextLength();
+ if (tspanWidth > width || tspanWidth === 0) {
+ if(index !== 0){
+ y = y + nodeBB.height;
+ }
+ tspan = document.createElementNS(svgns, 'tspan');
+ tspan.setAttribute('x', x);
+ tspan.setAttribute('y', y);
+ node.appendChild(tspan);
+ index = 0;
+ }
+
+ textNode = document.createTextNode(index === 0 ? chars[c] : " " + chars[c]);
+ tspan.appendChild(textNode);
+ index++;
+ }
+ }
+ }
+ }
+
+}(jQuery, mediaWiki) );
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/Gantt/src/Gantt.php b/www/wiki/extensions/SemanticResultFormats/formats/Gantt/src/Gantt.php
new file mode 100644
index 00000000..28e6f95f
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/formats/Gantt/src/Gantt.php
@@ -0,0 +1,203 @@
+<?php
+/**
+ * File holding the Gantt class
+ *
+ * - Add sections and tasks and
+ * manage the relations between them
+ * - Sort elements based on the sortkey
+ * - Creates config for gantt diagram
+ *
+ * @author Sebastian Schmid
+ * @file
+ * @ingroup SemanticResultFormats
+ */
+
+namespace SRF\Gantt;
+
+class Gantt {
+
+ private $mTitle;
+ private $mAxisFormat;
+ private $mSections = [];
+ private $mTasks = [];
+ private $mPriorityMapping;
+ private $mStatusMapping;
+
+ public function __construct( $headerParam ) {
+ $this->setTitle( $headerParam['title'] );
+ $this->setAxisFormat( $headerParam['axisformat'] );
+ $this->setStatusMapping( $headerParam['statusmapping'] );
+ $this->setPriorityMapping( $headerParam['prioritymapping'] );
+ }
+
+ private function setPriorityMapping( $priorityMapping ) {
+ $this->mPriorityMapping = $priorityMapping;
+ }
+
+ private function getPriorityMapping() {
+ return $this->mPriorityMapping;
+ }
+
+ private function setStatusMapping( $statusMapping ) {
+ $this->mStatusMapping = $statusMapping;
+ }
+
+ private function getStatusMapping() {
+ return $this->mStatusMapping;
+ }
+
+ private function setAxisFormat( $axisFormat ) {
+ $this->mAxisFormat = $axisFormat;
+ }
+
+ private function getAxisFormat() {
+ return $this->mAxisFormat;
+ }
+
+ private function setTitle( $title ) {
+ $this->mTitle = $title;
+ }
+
+ private function getTitle() {
+ return $this->mTitle;
+ }
+
+ private function getSections() {
+ return $this->mSections;
+ }
+
+ private function getTasks() {
+ return $this->mTasks;
+ }
+
+ /**
+ * Adds a new Task to array
+ *
+ * @param string $taskID
+ * @param string $taskTitle
+ * @param array $status
+ * @param array $priority
+ * @param string $startDate
+ * @param string $endDate
+ *
+ */
+
+ public function addTask( $taskID, $taskTitle, $status, $priority, $startDate, $endDate ) {
+ $task = new GanttTask();
+ $task->setID( $taskID );
+ $task->setTitle( $taskTitle );
+ $task->setTaskParam( $status, $this->getStatusMapping(), 'status' );
+ $task->setTaskParam( $priority, $this->getPriorityMapping(), 'priority' );
+ $task->setStartDate( $startDate );
+ $task->setEndDate( $endDate );
+ $this->mTasks[$taskID] = $task;
+ }
+
+
+ /**
+ * Creats a new Section with related tasks
+ *
+ * @param string $sectionID
+ * @param string $sectionTitle
+ * @param string $startDate
+ * @param string $endDate
+ * @param string $taskID
+ *
+ */
+ public function addSection( $sectionID, $sectionTitle, $startDate, $endDate, $taskID ) {
+
+ $sections = $this->getSections();
+
+ if ( array_key_exists( $sectionID, $sections ) ) {
+
+ if ( $sections[$sectionID]->getEarliestStartDate() > $startDate ) {
+ $sections[$sectionID]->setEarliestStartDate( $startDate );
+ }
+ if ( $sections[$sectionID]->getLatestEndDate() < $endDate ) {
+ $sections[$sectionID]->setLatestEndDate( $endDate );
+ }
+ $sections[$sectionID]->addTask( $taskID );
+
+ } else {
+ $this->createNewSection( $sectionID, $sectionTitle, $startDate, $endDate, $taskID );
+ }
+ }
+
+ private function createNewSection( $sectionID, $sectionTitle, $startDate, $endDate, $taskID ) {
+ $ganttSection = new GanttSection();
+ //check if the id in the object is realy needed or is it enough to have it as array key
+ $ganttSection->setID( $sectionID );
+ $ganttSection->setTitle( $sectionTitle );
+ $ganttSection->setEarliestStartDate( $startDate );
+ $ganttSection->setLatestEndDate( $endDate );
+ $ganttSection->addTask( $taskID );
+
+ $this->mSections[$sectionID] = $ganttSection;
+ }
+
+ /**
+ * Creates output for mermaidjs
+ *
+ * @return string
+ */
+ public function getGanttOutput() {
+
+ $sections = $this->getSections();
+ $tasks = $this->getTasks();
+
+ /*
+ * Bring the "section" with no title to the first position.
+ * This "section" is the one that hold tasks without any section.
+ * If we don't display it at the beginning we have to put them into a dummy section
+ */
+ foreach ( $sections as $key => $section ) {
+ if ( $section->getTitle() === '' ) {
+ $noSection = $section;
+ unset( $sections[$key] );
+ }
+ }
+ // push now the dummy task to the first place of the array
+ if ( isset( $noSection ) ) {
+ array_unshift( $sections, $noSection );
+ }
+
+ $title = $this->getTitle();
+ $axisFormat = $this->getAxisFormat();
+
+ $mermaidOut = "gantt\n";
+ $mermaidOut .= "dateFormat YYYY-MM-DD\n";
+ $mermaidOut .= ( !empty( $title ) ) ? "title $title\n" : '';
+ $mermaidOut .= "axisFormat $axisFormat\n";
+
+ // Output section and all related Issues
+ foreach ( $sections as $section ) {
+ if ( $section->getTitle() !== "" ) {
+ $mermaidOut .= 'section ' . $section->getTitle() . "\n";
+ }
+
+ //loop through related section tasks
+ foreach ( $section->getTasks() as $sectionTask ) {
+
+ $status = $tasks[$sectionTask]->getStatus();
+
+ // Get Date from timestamp
+ $date = date_create();
+ date_timestamp_set( $date, $tasks[$sectionTask]->getStartDate() );
+ $startDate = date_format( $date, 'Y-m-d' ) . ', ';
+ date_timestamp_set( $date, $tasks[$sectionTask]->getEndDate() );
+ $endDate = date_format( $date, 'Y-m-d' );
+
+ //get Priority
+ $priority = $tasks[$sectionTask]->getPriority();
+
+ $mermaidOut .= $tasks[$sectionTask]->getTitle() . "\t :" . $priority . $status . $startDate . $endDate .
+ "\n";
+ }
+ }
+
+ //Hashtags mark a Comment in Mermaid, so we need to replace it with <esc>35</esc> to replace it again after rendering
+ $mermaidOut = str_replace( '#', '<esc>35</esc>', $mermaidOut );
+
+ return $mermaidOut;
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/Gantt/src/GanttSection.php b/www/wiki/extensions/SemanticResultFormats/formats/Gantt/src/GanttSection.php
new file mode 100644
index 00000000..a7938117
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/formats/Gantt/src/GanttSection.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * File holding the GanttSection class
+ *
+ * Creats Section with params
+ *
+ * @author Sebastian Schmid
+ * @file
+ * @ingroup SemanticResultFormats
+ */
+
+namespace SRF\Gantt;
+
+class GanttSection {
+
+ private $mTitle;
+ private $mID;
+ private $mEarliestStartDate;
+ private $mLatestEndDate;
+ private $mTasks = [];
+
+ public function setTitle( $title ) {
+ $this->mTitle = $title;
+ }
+
+ public function getTitle() {
+ return $this->mTitle;
+ }
+
+ public function setID( $id ) {
+ $this->mID = $id;
+ }
+
+ public function getID() {
+ return $this->mID;
+ }
+
+ public function setEarliestStartDate( $earliestStartDate ) {
+ $this->mEarliestStartDate = $earliestStartDate;
+ }
+
+ public function getEarliestStartDate() {
+ return $this->mEarliestStartDate;
+ }
+
+ public function setLatestEndDate( $latestEndDate ) {
+ $this->mLatestEndDate = $latestEndDate;
+ }
+
+ public function getLatestEndDate() {
+ return $this->mLatestEndDate;
+ }
+
+ public function getTasks() {
+ return $this->mTasks;
+ }
+
+ // If we reorder the tasks we need to reset it with the ordered tasks
+ public function setTasks( $tasks ) {
+ $this->mTasks = $tasks;
+ }
+
+ public function addTask( $task ) {
+ $this->mTasks[] = $task;
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/Gantt/src/GanttTask.php b/www/wiki/extensions/SemanticResultFormats/formats/Gantt/src/GanttTask.php
new file mode 100644
index 00000000..964f493a
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/formats/Gantt/src/GanttTask.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * File holding the GanttTask class
+ *
+ * Creates Tasks with params
+ *
+ * @author Sebastian Schmid
+ * @file
+ * @ingroup SemanticResultFormats
+ */
+
+namespace SRF\Gantt;
+
+
+class GanttTask {
+
+ private $mTitle;
+ private $mID;
+ private $mStatus = '';
+ private $mPriority = '';
+ private $mStartDate;
+ private $mEndDate;
+
+
+ public function setTitle( $title ) {
+ $this->mTitle = $title;
+ }
+
+ public function getTitle() {
+ return $this->mTitle;
+ }
+
+ public function setID( $id ) {
+ $this->mID = $id;
+ }
+
+ public function getID() {
+ return $this->mID;
+ }
+
+ public function setStatus($status){
+ $this->mStatus = $this->mStatus . $status . ', ';
+ }
+
+ public function setPriority($priority){
+ $this->mPriority = $this->mPriority . $priority . ', ';
+ }
+
+ /**
+ * Either set the status or priority of the task
+ *
+ * @param array $params
+ * @param string $paramMapping
+ * @param string $type
+ *
+ */
+ public function setTaskParam( $params, $paramMapping, $type ) {
+
+ // skip if $paramMapping is empty and
+ // output errormessage if wrong mapping
+ if ( !empty( $paramMapping ) ) {
+
+ foreach ( $paramMapping as $pKey => $pVal ) {
+ if ( in_array( $pKey, $params ) ) {
+ if ( $type === 'status' ) {
+ $this->setStatus( trim( $pVal ) );
+ }
+ if ( $type === 'priority' ) {
+ $this->setPriority( trim( $pVal ) );
+ }
+ }
+ }
+ }
+ }
+
+ public function getStatus() {
+ return $this->mStatus;
+ }
+
+ public function getPriority() {
+ return $this->mPriority;
+ }
+
+ public function setStartDate( $startDate ) {
+ $this->mStartDate = $startDate;
+ }
+
+ public function getStartDate() {
+ return $this->mStartDate;
+ }
+
+ public function setEndDate( $endDate ) {
+ $this->mEndDate = $endDate;
+ }
+
+ public function getEndDate() {
+ return $this->mEndDate;
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/bibtex/SRF_BibTeX.php b/www/wiki/extensions/SemanticResultFormats/formats/bibtex/SRF_BibTeX.php
deleted file mode 100644
index 87d3bcdc..00000000
--- a/www/wiki/extensions/SemanticResultFormats/formats/bibtex/SRF_BibTeX.php
+++ /dev/null
@@ -1,444 +0,0 @@
-<?php
-
-/**
- * Printer class for creating BibTeX exports
- *
- * For details on availble keys see the README
- *
- * Example of a book :
- *
- * @Book{abramowitz1964homf,
- * author = "Milton Abramowitz and Irene A. Stegun",
- * title = "Handbook of Mathematical Functions",
- * publisher = "Dover",
- * year = 1964,
- * address = "New York",
- * edition = "ninth Dover printing, tenth GPO printing"
- * }
- *
- * @file
- * @ingroup SemanticResultFormats
- *
- * @author Markus Krötzsch
- * @author Denny Vrandecic
- * @author Frank Dengler
- * @author Steren Giannini
- * @ingroup SemanticResultFormats
- */
-class SRFBibTeX extends SMWExportPrinter {
-
- protected $m_title = '';
- protected $m_description = '';
-
- /**
- * @see SMWIExportPrinter::getMimeType
- *
- * @since 1.8
- *
- * @param SMWQueryResult $queryResult
- *
- * @return string
- */
- public function getMimeType( SMWQueryResult $queryResult ) {
- return 'text/bibtex';
- }
-
- /**
- * @see SMWIExportPrinter::getFileName
- *
- * @since 1.8
- *
- * @param SMWQueryResult $queryResult
- *
- * @return string|boolean
- */
- public function getFileName( SMWQueryResult $queryResult ) {
- if ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
- return str_replace( ' ', '_', $this->getSearchLabel( SMW_OUTPUT_WIKI ) ) . '.bib';
- } else {
- return 'BibTeX.bib';
- }
- }
-
- public function getQueryMode( $context ) {
- return ( $context == SMWQueryProcessor::SPECIAL_PAGE ) ? SMWQuery::MODE_INSTANCES : SMWQuery::MODE_NONE;
- }
-
- public function getName() {
- return wfMessage( 'srf_printername_bibtex' )->text();
- }
-
- protected function getResultText( SMWQueryResult $res, $outputmode ) {
- global $wgSitename;
- $result = '';
-
- if ( $outputmode == SMW_OUTPUT_FILE ) { // make file
- if ( $this->m_title == '' ) {
- $this->m_title = $wgSitename;
- }
-
- $items = [];
-
- while ( $row = $res->getNext() ) {
- $items[] = $this->getItemForResultRow( $row )->text();
- }
-
- $result = implode( '', $items );
- } else { // just make link to export
- if ( $this->getSearchLabel( $outputmode ) ) {
- $label = $this->getSearchLabel( $outputmode );
- } else {
- $label = wfMessage( 'srf_bibtex_link' )->inContentLanguage()->text();
- }
-
- $link = $res->getQueryLink( $label );
- $link->setParameter( 'bibtex', 'format' );
-
- if ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
- $link->setParameter( $this->getSearchLabel( SMW_OUTPUT_WIKI ), 'searchlabel' );
- }
-
- $result .= $link->getText( $outputmode, $this->mLinker );
- $this->isHTML = ( $outputmode == SMW_OUTPUT_HTML ); // yes, our code can be viewed as HTML if requested, no more parsing needed
- }
-
- return $result;
- }
-
- /**
- * Gets a SMWBibTeXEntry for the row.
- *
- * @since 1.6
- *
- * @param $row array of SMWResultArray
- *
- * @return SMWBibTeXEntry
- */
- protected function getItemForResultRow( array /* of SMWResultArray */
- $row ) {
- $address = '';
- $annote = '';
- $author = '';
- $booktitle = '';
- $chapter = '';
- $crossref = '';
- $doi = '';
- $edition = '';
- $editor = '';
- $eprint = '';
- $howpublished = '';
- $institution = '';
- $journal = '';
- $key = '';
- $month = '';
- $note = '';
- $number = '';
- $organization = '';
- $pages = '';
- $publisher = '';
- $school = '';
- $series = '';
- $title = '';
- $type = '';
- $url = '';
- $volume = '';
- $year = '';
-
- foreach ( $row as /* SMWResultArray */
- $field ) {
- $req = $field->getPrintRequest();
- $label = strtolower( $req->getLabel() );
- $var = false;
-
- switch ( $label ) {
- case 'type':
- $var =& $type;
- break;
- case 'address':
- $var =& $address;
- break;
- case 'annote':
- $var =& $annote;
- break;
- case 'booktitle':
- $var =& $booktitle;
- break;
- case 'chapter':
- $var =& $chapter;
- break;
- case 'crossref':
- $var =& $crossref;
- break;
- case 'doi':
- $var =& $doi;
- break;
- case 'edition':
- $var =& $edition;
- break;
- case 'eprint':
- $var =& $eprint;
- break;
- case 'howpublished':
- $var =& $howpublished;
- break;
- case 'institution':
- $var =& $institution;
- break;
- case 'journal':
- $var =& $journal;
- break;
- case 'key':
- $var =& $key;
- break;
- case 'note':
- $var =& $note;
- break;
- case 'number':
- $var =& $number;
- break;
- case 'organization':
- $var =& $organization;
- break;
- case 'pages':
- $var =& $pages;
- break;
- case 'publisher':
- $var =& $publisher;
- break;
- case 'school':
- $var =& $school;
- break;
- case 'series':
- $var =& $series;
- break;
- case 'title':
- $var =& $title;
- break;
- case 'url':
- $var =& $url;
- break;
- case 'year':
- $var =& $year;
- break;
- case 'month':
- $var =& $month;
- break;
- case 'volume':
- case 'journal_volume':
- $var =& $volume;
- break;
- }
-
- if ( $var !== false ) {
- $dataValue = $field->getNextDataValue();
-
- if ( $dataValue !== false ) {
- $var = $dataValue->getShortWikiText();
- }
-
- unset( $var );
- } else {
- switch ( $label ) {
- case 'author':
- case 'authors':
- case 'editor' :
- case 'editors':
- $wikiTexts = [];
- while ( ( /* SMWDataValue */
- $dataValue = $field->getNextDataValue() ) !== false ) {
- $wikiTexts[] = $dataValue->getShortWikiText();
- }
- $wikiText = $GLOBALS['wgLang']->listToText( $wikiTexts );
-
- if ( $label == 'author' || $label == 'authors' ) {
- $author = $wikiText;
- } else {
- $editor = $wikiText;
- }
- break;
- case 'date':
- $dataValue = $field->getNextDataValue();
-
- if ( $dataValue !== false && get_class( $dataValue ) == 'SMWTimeValue' ) {
- $year = $dataValue->getYear();
- $month = $dataValue->getMonth();
- }
- break;
- }
- }
- }
-
- return new SMWBibTeXEntry(
- $type,
- $address,
- $annote,
- $author,
- $booktitle,
- $chapter,
- $crossref,
- $doi,
- $edition,
- $editor,
- $eprint,
- $howpublished,
- $institution,
- $journal,
- $key,
- $month,
- $note,
- $number,
- $organization,
- $pages,
- $publisher,
- $school,
- $series,
- $title,
- $url,
- $volume,
- $year
- );
- }
-}
-
-/**
- * Represents a single entry in an BibTeX
- *
- * @ingroup SMWQuery
- */
-class SMWBibTeXEntry {
-
- private $bibTeXtype;
- private $URI;
- private $fields = [];
-
- public function __construct( $type, $address, $annote, $author, $booktitle, $chapter, $crossref, $doi, $edition, $editor, $eprint, $howpublished, $institution, $journal, $key, $month, $note, $number, $organization, $pages, $publisher, $school, $series, $title, $url, $volume, $year ) {
- if ( $type ) {
- $this->bibTeXtype = ucfirst( $type );
- } else {
- $this->bibTeXtype = 'Book';
- }
-
- $fields = [];
-
- if ( $address ) {
- $fields['address'] = $address;
- }
- if ( $annote ) {
- $fields['annote'] = $annote;
- }
- if ( $author ) {
- $fields['author'] = $author;
- }
- if ( $booktitle ) {
- $fields['booktitle'] = $booktitle;
- }
- if ( $chapter ) {
- $fields['chapter'] = $chapter;
- }
- if ( $crossref ) {
- $fields['crossref'] = $crossref;
- }
- if ( $doi ) {
- $fields['doi'] = $doi;
- }
- if ( $edition ) {
- $fields['edition'] = $edition;
- }
- if ( $editor ) {
- $fields['editor'] = $editor;
- }
- if ( $eprint ) {
- $fields['eprint'] = $eprint;
- }
- if ( $howpublished ) {
- $fields['howpublished'] = $howpublished;
- }
- if ( $institution ) {
- $fields['institution'] = $institution;
- }
- if ( $journal ) {
- $fields['journal'] = $journal;
- }
- if ( $key ) {
- $fields['key'] = $key;
- }
- if ( $month ) {
- $fields['month'] = $month;
- }
- if ( $note ) {
- $fields['note'] = $note;
- }
- if ( $number ) {
- $fields['number'] = $number;
- }
- if ( $organization ) {
- $fields['organization'] = $organization;
- }
- if ( $pages ) {
- $fields['pages'] = $pages;
- }
- if ( $publisher ) {
- $fields['publisher'] = $publisher;
- }
- if ( $school ) {
- $fields['school'] = $school;
- }
- if ( $series ) {
- $fields['series'] = $series;
- }
- if ( $title ) {
- $fields['title'] = $title;
- }
- if ( $url ) {
- $fields['url'] = $url;
- }
- if ( $volume ) {
- $fields['volume'] = $volume;
- }
- if ( $year ) {
- $fields['year'] = $year;
- }
-
- $this->fields = $fields;
-
- // generating the URI: author last name + year + first letters of title
- $URI = '';
- if ( $author ) {
- $authors = explode( ',', $author );
- $authors = explode( wfMessage( 'and' )->text(), $authors[0] );
- $arrayAuthor = explode( ' ', $authors[0], 2 );
- $URI .= str_replace( ' ', '', $arrayAuthor[array_key_exists( 1, $arrayAuthor ) ? 1 : 0] );
- }
-
- if ( $year ) {
- $URI .= $year;
- }
-
- if ( $title ) {
- foreach ( explode( ' ', $title ) as $titleWord ) {
- $charsTitleWord = preg_split( '//', $titleWord, -1, PREG_SPLIT_NO_EMPTY );
-
- if ( !empty( $charsTitleWord ) ) {
- $URI .= $charsTitleWord[0];
- }
- }
- }
-
- $this->URI = strtolower( $URI );
- }
-
- /**
- * Creates the BibTeX output for a single item.
- */
- public function text() {
- $text = '@' . $this->bibTeXtype . '{' . $this->URI . ",\r\n";
-
- foreach ( $this->fields as $key => $value ) {
- $text .= ' ' . $key . ' = "' . $value . '", ' . "\r\n";
- }
-
- $text .= "}\r\n\r\n";
-
- return $text;
- }
-}
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/calendar/resources/ext.srf.formats.eventcalendar.js b/www/wiki/extensions/SemanticResultFormats/formats/calendar/resources/ext.srf.formats.eventcalendar.js
index 0220031d..1867ad8f 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/calendar/resources/ext.srf.formats.eventcalendar.js
+++ b/www/wiki/extensions/SemanticResultFormats/formats/calendar/resources/ext.srf.formats.eventcalendar.js
@@ -1110,6 +1110,13 @@
} );
}
+ // Allow to fetch the `srf.eventcalendar.fullCalendarRefresh` and trigger a click
+ // event to restore the fullCalendar in case the instance was part of tab (hidden
+ // during initialization)
+ $( document ).on( 'srf.eventcalendar.fullCalendarRefresh', function( event ) {
+ context.find( '.srf-calendarbutton-refresh' ).trigger( 'click' );
+ } );
+
// console.log( 'Data', data, 'Objects', _calendar );
} );
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/dygraphs/SRF_Dygraphs.php b/www/wiki/extensions/SemanticResultFormats/formats/dygraphs/SRF_Dygraphs.php
index 28a91508..02ca3f1b 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/dygraphs/SRF_Dygraphs.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/dygraphs/SRF_Dygraphs.php
@@ -90,27 +90,29 @@ class SRFDygraphs extends SMWResultPrinter {
while ( ( $dataValue = $field->getNextDataValue() ) !== false ) { // Data values
// Jump the column (indicated by continue) because we don't want the data source being part of the annotation array
- if ( $dataValue->getDataItem()->getDIType(
- ) == SMWDataItem::TYPE_WIKIPAGE && $this->params['datasource'] === 'raw' && !$dataSource ) {
+ $dataItem = $dataValue->getDataItem();
+
+ if ( $dataItem->getDIType() === SMWDataItem::TYPE_WIKIPAGE ) {
+ $title = $dataItem->getTitle();
+ }
+
+ if ( $dataItem->getDIType() == SMWDataItem::TYPE_WIKIPAGE && $this->params['datasource'] === 'raw' && !$dataSource ) {
// Support data source = raw which pulls the url from a wikipage in raw format
$aggregatedValues['subject'] = $this->makePageFromTitle(
- $dataValue->getTitle()
+ $title
)->getLongHTMLText( $this->getLinker( $field->getResultSubject() ) );
- $aggregatedValues['url'] = $dataValue->getTitle()->getLocalURL( 'action=raw' );
+ $aggregatedValues['url'] = $title->getLocalURL( 'action=raw' );
$dataSource = true;
continue;
- } elseif ( $dataValue->getDataItem()->getDIType(
- ) == SMWDataItem::TYPE_WIKIPAGE && $this->params['datasource'] === 'file' && $dataValue->getTitle(
- )->getNamespace() === NS_FILE && !$dataSource ) {
+ } elseif ( $dataItem->getDIType() == SMWDataItem::TYPE_WIKIPAGE && $this->params['datasource'] === 'file' && $title->getNamespace() === NS_FILE && !$dataSource ) {
// Support data source = file which pulls the url from a uploaded file
$aggregatedValues['subject'] = $this->makePageFromTitle(
- $dataValue->getTitle()
+ $title
)->getLongHTMLText( $this->getLinker( $field->getResultSubject() ) );
- $aggregatedValues['url'] = wfFindFile( $dataValue->getTitle() )->getUrl();
+ $aggregatedValues['url'] = wfFindFile( $title )->getUrl();
$dataSource = true;
continue;
- } elseif ( $dataValue->getDataItem()->getDIType(
- ) == SMWDataItem::TYPE_URI && $this->params['datasource'] === 'url' && !$dataSource ) {
+ } elseif ( $dataItem->getDIType() == SMWDataItem::TYPE_URI && $this->params['datasource'] === 'url' && !$dataSource ) {
// Support data source = url, pointing to an url data source
$aggregatedValues['link'] = $dataValue->getShortHTMLText( $this->getLinker( false ) );
$aggregatedValues['url'] = $dataValue->getURL();
@@ -125,7 +127,7 @@ class SRFDygraphs extends SMWResultPrinter {
// text -> A longer description of the annotation
// @see http://dygraphs.com/annotations.html
if ( in_array( $propertyLabel, [ 'series', 'x', 'shortText', 'text' ] ) ) {
- if ( $dataValue->getDataItem()->getDIType() == SMWDataItem::TYPE_NUMBER ) {
+ if ( $dataItem->getDIType() == SMWDataItem::TYPE_NUMBER ) {
// Set unit if available
$dataValue->setOutputFormat( $this->params['unit'] );
// Check if unit is available
@@ -325,4 +327,4 @@ class SRFDygraphs extends SMWResultPrinter {
return $params;
}
-} \ No newline at end of file
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/excel/SRF_Excel.php b/www/wiki/extensions/SemanticResultFormats/formats/excel/SRF_Excel.php
deleted file mode 100644
index 8cd0321b..00000000
--- a/www/wiki/extensions/SemanticResultFormats/formats/excel/SRF_Excel.php
+++ /dev/null
@@ -1,364 +0,0 @@
-<?php
-
-namespace SRF;
-
-use ImagePage;
-use PHPExcel;
-use PHPExcel_Cell_DataType;
-use PHPExcel_IOFactory;
-use Sanitizer;
-use SMW\FileExportPrinter;
-use SMWQueryResult;
-use Title;
-
-/**
- * @author Kim Eik
- * @since 1.9
- */
-class SRFExcel extends FileExportPrinter {
-
- const HEADER_ROW_OFFSET = 1;
-
- /**
- * @var int
- */
- protected $rowNum;
-
- /**
- * @var int
- */
- protected $colNum;
-
- /**
- * @var \PHPExcel_Worksheet
- */
- protected $sheet;
-
- protected $styled = false;
-
- /**
- * Some printers do not mainly produce embeddable HTML or Wikitext, but
- * produce stand-alone files. An example is RSS or iCalendar. This function
- * returns the mimetype string that this file would have, or FALSE if no
- * standalone files are produced.
- *
- * If this function returns something other than FALSE, then the printer will
- * not be regarded as a printer that displays in-line results. This is used to
- * determine if a file output should be generated in Special:Ask.
- *
- * @since 1.8
- *
- * @param SMWQueryResult $queryResult
- *
- * @return string
- */
- public function getMimeType( SMWQueryResult $queryResult ) {
- return "application/vnd.ms-excel";
- }
-
- public function getFileName( SMWQueryResult $queryResult ) {
-
- return $this->params['filename'] ? $this->params['filename'] : round( microtime( true ) * 1000 ) . '.xls';
- }
-
- public function outputAsFile( SMWQueryResult $queryResult, array $params ) {
- if ( $this->isPHPExcelInstalled() ) {
- parent::outputAsFile( $queryResult, $params );
- } else {
- header( 'Cache-Control: no-store, no-cache, must-revalidate' );
- echo $this->getResult( $queryResult, $params, SMW_OUTPUT_FILE );
- }
- }
-
- /**
- * @param $definitions \ParamProcessor\ParamDefinition[]
- *
- * @return array
- */
- public function getParamDefinitions( array $definitions ) {
- $params = parent::getParamDefinitions( $definitions );
-
- $definitions['searchlabel']->setDefault( wfMessage( 'srf-excel-link' )->inContentLanguage()->text() );
-
- $params['templatefile'] = [
- 'type' => 'string',
- 'name' => 'templatefile',
- 'default' => '',
- 'message' => 'srf-paramdesc-excel-templatefile',
- ];
-
- $params['filename'] = [
- 'type' => 'string',
- 'name' => 'filename',
- 'default' => '',
- 'message' => 'srf-paramdesc-excel-filename',
- ];
-
- return $params;
- }
-
- /**
- * Return serialised results in specified format.
- */
- protected function getResultText( SMWQueryResult $res, $outputMode ) {
-
- if ( $outputMode === SMW_OUTPUT_FILE ) {
- return $this->getResultFileContents( $res );
- }
-
- $this->isHTML = ( $outputMode === SMW_OUTPUT_HTML );
- return $this->getLink( $res, $outputMode )->getText( $outputMode, $this->mLinker );
- }
-
- /*
- * Turns the PHPExcel document object into a string
- */
- /**
- * @param $document
- *
- * @return string
- */
- protected function writeDocumentToString( $document ) {
- $objWriter = PHPExcel_IOFactory::createWriter( $document, 'Excel5' );
-
- ob_start();
- $objWriter->save( 'php://output' );
- return ob_get_clean();
- }
-
- /**
- * Populates the PHPExcel document with the query data
- *
- * @param $res SMWQueryResult the query result
- */
- protected function populateDocumentWithQueryData( $res ) {
- while ( $row = $res->getNext() ) {
- $this->rowNum++;
- $this->colNum = 0;
- $this->readRowData( $row );
- }
- }
-
- /**
- * @param SMWQueryResult $res
- *
- * @return string
- */
- protected function getResultFileContents( SMWQueryResult $res ) {
- if ( !$this->isPHPExcelInstalled() ) {
- throw new \RuntimeException( wfMessage( 'srf-excel-missing-phpexcel' )->parse() );
- }
-
- $document = $this->createExcelDocument();
- $this->sheet = $document->getSheet( 0 );
-
- $this->rowNum = 0;
- //Get headers
- if ( $this->mShowHeaders ) {
- $this->populateDocumentWithHeaders( $res );
- $this->rowNum++;
- }
-
- //Get data rows
- $this->populateDocumentWithQueryData( $res );
-
- $document->getActiveSheet()->getDefaultRowDimension()->setRowHeight();
-
- $result = $this->writeDocumentToString( $document );
- return $result;
- }
-
- /**
- * Sets or appends a string value at the given col,row location
- *
- * If there already exists a value at a given col,row location, then
- * convert the cell to a string and append the data value. Creating
- * a list of comma separated entries.
- *
- * @param $object \SMWDataValue the raw data value object
- */
- protected function setOrAppendStringDataValue( $object ) {
- $type = PHPExcel_Cell_DataType::TYPE_STRING;
- $value = $object->getWikiValue();
- $value = Sanitizer::decodeCharReferences( $value );
- $value = PHPExcel_Cell_DataType::checkString( $value );
-
- $cell = $this->sheet->getCellByColumnAndRow( $this->colNum, $this->rowNum );
- $existingValue = $cell->getValue();
- if ( $existingValue ) {
- $value = $existingValue . ', ' . $value;
- }
- $cell->setValueExplicit( $value, $type );
- }
-
- /**
- * Sets a numeric value at the given col,row location
- *
- * @param $object \SMWDataValue the raw data value object
- */
- protected function setNumberDataValue( $object ) {
- $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
- $value = $object->getDataItem()->getNumber();
-
- $this->sheet->getCellByColumnAndRow( $this->colNum, $this->rowNum )
- ->setValueExplicit( $value, $type );
- }
-
- /**
- * Sets a quantity value at the given col,row location
- *
- * @param $object \SMWDataValue the raw data value object
- */
- protected function setQuantityDataValue( $object ) {
- $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
- $unit = $object->getUnit();
- $value = $object->getNumber();
-
- $this->sheet->getCellByColumnAndRow( $this->colNum, $this->rowNum )
- ->setValueExplicit( $value, $type );
-
- if ( !$this->styled ) {
- $this->sheet->getStyleByColumnAndRow( $this->colNum, $this->rowNum )
- ->getNumberFormat()
- ->setFormatCode( '0 "' . $unit . '"' );
- }
- }
-
- /**
- * Sets a date/time value at the given col,row location
- *
- * @param \SMWTimeValue $object the raw data value object
- */
- protected function setTimeDataValue( \SMWTimeValue $object ) {
- $type = PHPExcel_Cell_DataType::TYPE_NUMERIC;
- $value = \PHPExcel_Shared_Date::stringToExcel( str_replace( 'T', ' ', $object->getISO8601Date() ) );
-
- $this->sheet
- ->getCellByColumnAndRow( $this->colNum, $this->rowNum )
- ->setValueExplicit( $value, $type );
-
- if ( !$this->styled ) {
- $this->sheet
- ->getStyleByColumnAndRow( $this->colNum, $this->rowNum )
- ->getNumberFormat()
- ->setFormatCode( \PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY );
- }
- }
-
- /**
- * Populates the PHPExcel sheet with the headers from the result query
- *
- * @param SMWQueryResult $res The query result
- */
- protected function populateDocumentWithHeaders( SMWQueryResult $res ) {
- $this->colNum = 0;
- foreach ( $res->getPrintRequests() as $pr ) {
- $header = $pr->getLabel();
- if ( $this->showLabel( $header ) ) {
- $this->sheet->setCellValueByColumnAndRow( $this->colNum, self::HEADER_ROW_OFFSET, $header )
- ->getStyleByColumnAndRow( $this->colNum, self::HEADER_ROW_OFFSET )
- ->getFont()
- ->setBold( true );
- $this->colNum++;
- }
- }
- }
-
- /**
- * Creates a new PHPExcel document and returns it
- *
- * @return PHPExcel
- */
- protected function createExcelDocument() {
-
- $fileTitle = Title::newFromText( $this->params['templatefile'], NS_FILE );
-
- if ( $fileTitle !== null && $fileTitle->exists() ) {
-
- $filePage = new ImagePage( $fileTitle, $this );
-
- $virtualFile = $filePage->getDisplayedFile();
- $virtualFilePath = $virtualFile->getPath();
-
- $localFile = $virtualFile->getRepo()->getLocalReference( $virtualFilePath );
- $localFilePath = $localFile->getPath();
-
- $objPHPExcel = PHPExcel_IOFactory::load( $localFilePath );
-
- $this->styled = true;
-
- } else {
-
- $objPHPExcel = new PHPExcel();
-
- }
-
- // Set document properties
- $objPHPExcel->getProperties()->setCreator( "SemanticMediaWiki PHPExcel Export" );
-
- return $objPHPExcel;
- }
-
- /**
- * Check for the existence of the extra mainlabel.
- *
- * @param $label
- *
- * @return bool
- */
- private function showLabel( $label ) {
- return !( array_key_exists( "mainlabel", $this->params ) && $label === $this->params["mainlabel"] . '#' );
- }
-
- protected function readFieldValue( $field ) {
- $valueCount = 0;
- while ( ( $object = $field->getNextDataValue() ) !== false ) {
- if ( $valueCount === 0 ) {
- $this->setValueAccordingToType( $object );
- } else {
- $this->setOrAppendStringDataValue( $object );
- }
- $valueCount++;
- }
- }
-
- /**
- * Checks the type of the value, and set's it in the sheet accordingly
- *
- * @param $object
- */
- protected function setValueAccordingToType( $object ) {
- //NOTE: must check against subclasses before superclasses
- if ( $object instanceof \SMWQuantityValue ) {
- $this->setQuantityDataValue( $object );
- } else {
- if ( $object instanceof \SMWNumberValue ) {
- $this->setNumberDataValue( $object );
- } else {
- if ( $object instanceof \SMWTimeValue ) {
- $this->setTimeDataValue( $object );
- } else {
- $this->setOrAppendStringDataValue( $object );
- }
- }
- }
- }
-
- /**
- * @param $row
- */
- protected function readRowData( $row ) {
- foreach ( $row as $field ) {
- if ( $this->showLabel( $field->getPrintRequest()->getLabel() ) ) {
- $this->readFieldValue( $field );
- $this->colNum++;
- }
- }
- }
-
- private function isPHPExcelInstalled() {
- return class_exists( "PHPExcel" );
- }
-
-}
-
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/ResultItem.php b/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/ResultItem.php
index 619d81f1..ab5c57ba 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/ResultItem.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/ResultItem.php
@@ -83,7 +83,7 @@ class ResultItem {
$sorted[] = $dataItem->getSortKey();
} elseif ( $dataItem instanceof SMWDIWikiPage ) {
$values[] = $dataValue->getShortWikiText();
- $sorted[] = $dataValue->getSortKey();
+ $sorted[] = $dataItem->getSortKey();
} else {
$values[] = $dataValue->getShortWikiText();
$sorted[] = $dataValue->getShortWikiText();
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/CalendarView.php b/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/CalendarView.php
index c828e5a4..0ac5441b 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/CalendarView.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/CalendarView.php
@@ -75,7 +75,7 @@ class CalendarView extends View {
// found specified column for title
if ( $datavalue !== false ) {
if ( $datavalue instanceof \SMWWikiPageValue ) {
- $data['url'] = $datavalue->getTitle()->getLocalURL();
+ $data['url'] = $datavalue->getDataItem()->getTitle()->getLocalURL();
}
$data['title'] = $datavalue->getShortHTMLText();
}
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/MapView.php b/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/MapView.php
index aed54d8f..ceade356 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/MapView.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/MapView.php
@@ -4,7 +4,6 @@ namespace SRF\Filtered\View;
use DataValues\Geo\Parsers\LatLongParser;
use Exception;
-use Message;
use SMWPropertyValue;
use SRF\Filtered\ResultItem;
@@ -64,7 +63,7 @@ class MapView extends View {
$value = $field->getNextDataItem();
}
- } elseif ( class_exists( 'DataValues\Geo\Parsers\GeoCoordinateParser' ) ) {
+ } else {
$coordParser = new LatLongParser();
while ( $value instanceof \SMWDataItem ) {
@@ -78,11 +77,6 @@ class MapView extends View {
}
}
- } else {
- $this->getQueryPrinter()->addError(
- Message::newFromKey( 'srf-filtered-map-geocoordinateparser-missing-error' )->inContentLanguage(
- )->text()
- );
}
return [ 'positions' => $values, ];
@@ -162,7 +156,6 @@ class MapView extends View {
'name' => 'map view height',
'message' => 'srf-paramdesc-filtered-map-height',
'default' => 'auto',
- // 'islist' => false,
];
$params['zoom'] = [
@@ -170,7 +163,6 @@ class MapView extends View {
'name' => 'map view zoom',
'message' => 'srf-paramdesc-filtered-map-zoom',
'default' => '',
- // 'islist' => false,
];
$params['minZoom'] = [
@@ -178,7 +170,6 @@ class MapView extends View {
'name' => 'map view min zoom',
'message' => 'srf-paramdesc-filtered-map-min-zoom',
'default' => '',
- // 'islist' => false,
];
$params['maxZoom'] = [
@@ -186,7 +177,6 @@ class MapView extends View {
'name' => 'map view max zoom',
'message' => 'srf-paramdesc-filtered-map-max-zoom',
'default' => '',
- // 'islist' => false,
];
//markercluster
@@ -195,7 +185,6 @@ class MapView extends View {
'name' => 'map view marker cluster',
'message' => 'srf-paramdesc-filtered-map-marker-cluster',
'default' => true,
- // 'islist' => false,
];
$params['marker cluster max zoom'] = [
@@ -203,7 +192,6 @@ class MapView extends View {
'name' => 'map view marker cluster max zoom',
'message' => 'srf-paramdesc-filtered-map-marker-cluster-max-zoom',
'default' => '',
- // 'islist' => false,
];
//clustermaxradius - maxClusterRadius: The maximum radius that a cluster will cover from the central marker (in pixels). Default 80.
@@ -212,7 +200,6 @@ class MapView extends View {
'name' => 'map view marker cluster radius',
'message' => 'srf-paramdesc-filtered-map-marker-cluster-max-radius',
'default' => '',
- // 'islist' => false,
];
//clusterzoomonclick - zoomToBoundsOnClick: When you click a cluster we zoom to its bounds.
@@ -221,7 +208,6 @@ class MapView extends View {
'name' => 'map view marker cluster zoom on click',
'message' => 'srf-paramdesc-filtered-map-marker-cluster-zoom-on-click',
'default' => true,
- // 'islist' => false,
];
self::$viewParams = $params;
@@ -328,4 +314,4 @@ class MapView extends View {
return $this->getMapProvider() === '' ? 'srf-filtered-map-provider-missing-error' : null;
}
-} \ No newline at end of file
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/TableView.php b/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/TableView.php
index c1f6b0b2..7f3c7664 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/TableView.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/filtered/src/View/TableView.php
@@ -86,12 +86,12 @@ class TableView extends View {
private function getTableHeaders() {
$headers = [];
- /**
- * Get first QueryResult and assign array members to variables
- *
- * @var \SRF\Filtered\ResultItem $queryResultValue
- */
- list( , $queryResultValue ) = each( $this->getQueryResults() );
+ $queryResults = $this->getQueryResults();
+ $queryResultValue = reset( $queryResults );
+
+ if ( !is_a( $queryResultValue, ResultItem::class ) ) {
+ return '';
+ }
foreach ( $queryResultValue->getValue() as $field ) {
$printRequest = $field->getPrintRequest();
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/gallery/Gallery.php b/www/wiki/extensions/SemanticResultFormats/formats/gallery/Gallery.php
index 18abb24c..0599c54f 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/gallery/Gallery.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/gallery/Gallery.php
@@ -216,7 +216,7 @@ class Gallery extends ResultPrinter {
if ( $resultArray->getPrintRequest()->getLabel() == $imageProperty ) {
while ( ( $dataValue = $resultArray->getNextDataValue() ) !== false ) { // Property values
if ( $dataValue->getTypeID() == '_wpg' ) {
- $images[] = $dataValue->getTitle();
+ $images[] = $dataValue->getDataItem()->getTitle();
}
}
} elseif ( $label == $captionProperty ) {
@@ -269,10 +269,13 @@ class Gallery extends ResultPrinter {
* @var \SMWResultArray $firstField
*/
$firstField = $row[0];
+
+ /** @var \SMWDataValue $nextObject */
$nextObject = $firstField->getNextDataValue();
if ( $nextObject !== false ) {
- $imgTitle = method_exists( $nextObject, 'getTitle' ) ? $nextObject->getTitle() : null;
+ $dataItem = $nextObject->getDataItem();
+ $imgTitle = method_exists( $dataItem, 'getTitle' ) ? $dataItem->getTitle() : null;
// Ensure the title belongs to the image namespace
if ( $imgTitle instanceof Title && $imgTitle->getNamespace() === NS_FILE ) {
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/media/MediaPlayer.php b/www/wiki/extensions/SemanticResultFormats/formats/media/MediaPlayer.php
index 18f02046..613895d3 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/media/MediaPlayer.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/media/MediaPlayer.php
@@ -139,7 +139,6 @@ class MediaPlayer extends ResultPrinter {
// Get other data value item details
$value = $this->getDataValueItem(
$propertyLabel,
- $dataValue->getDataItem()->getDIType(),
$dataValue,
$mediaType,
$mimeType,
@@ -208,29 +207,37 @@ class MediaPlayer extends ResultPrinter {
*
* @return mixed
*/
- private function getDataValueItem( &$label, $type, SMWDataValue $dataValue, &$mediaType, &$mimeType, &$rowData ) {
+ private function getDataValueItem( &$label, SMWDataValue $dataValue, &$mediaType, &$mimeType, &$rowData ) {
- if ( $type == SMWDataItem::TYPE_WIKIPAGE && $dataValue->getTitle()->getNamespace() === NS_FILE ) {
+ $dataItem = $dataValue->getDataItem();
+ $type = $dataItem->getDIType();
- if ( $label === 'source' && $mimeType === null ) {
+ if ( $type === SMWDataItem::TYPE_WIKIPAGE ) {
- // Identify the media source
- // and get media information
- list( $mediaType, $mimeType, $source ) = $this->getMediaSource( $dataValue->getTitle() );
- $label = $mimeType;
- return $source;
- } elseif ( $label === 'poster' ) {
- $mediaType = 'video';
+ $title = $dataItem->getTitle();
- // Get the cover art image url
- $source = wfFindFile( $dataValue->getTitle() );
- return $source->getUrl();
+ if ( $title instanceof Title && $title->getNamespace() === NS_FILE ) {
+
+ if ( $label === 'source' && $mimeType === null ) {
+
+ // Identify the media source
+ // and get media information
+ list( $mediaType, $mimeType, $source ) = $this->getMediaSource( $title );
+ $label = $mimeType;
+ return $source;
+ } elseif ( $label === 'poster' ) {
+ $mediaType = 'video';
+
+ // Get the cover art image url
+ $source = wfFindFile( $title );
+ return $source->getUrl();
+ }
}
}
if ( $type == SMWDataItem::TYPE_URI ) {
- $source = $dataValue->getDataItem()->getURI();
+ $source = $dataItem->getURI();
$mimeType = '';
// Get file extension from the URI
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php b/www/wiki/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php
deleted file mode 100644
index 8e9d2529..00000000
--- a/www/wiki/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php
+++ /dev/null
@@ -1,257 +0,0 @@
-<?php
-
-/**
- * A class to print query results in an outline format, along with some
- * helper classes to handle the aggregation
- */
-
-/**
- * Represents a single item, or page, in the outline - contains both the
- * SMWResultArray and an array of some of its values, for easier aggregation
- */
-class SRFOutlineItem {
-
- var $mRow;
- var $mVals;
-
- function __construct( $row ) {
- $this->mRow = $row;
- $this->mVals = [];
- }
-
- function addFieldValue( $field_name, $field_val ) {
- if ( array_key_exists( $field_name, $this->mVals ) ) {
- $this->mVals[$field_name][] = $field_val;
- } else {
- $this->mVals[$field_name] = [ $field_val ];
- }
- }
-
- function getFieldValues( $field_name ) {
- if ( array_key_exists( $field_name, $this->mVals ) ) {
- return $this->mVals[$field_name];
- } else {
- return [ wfMessage( 'srf_outline_novalue' )->text() ];
- }
- }
-}
-
-/**
- * A tree structure for holding the outline data
- */
-class SRFOutlineTree {
-
- var $mTree;
- var $mUnsortedItems;
-
- function __construct( $items = [] ) {
- $this->mTree = [];
- $this->mUnsortedItems = $items;
- }
-
- function addItem( $item ) {
- $this->mUnsortedItems[] = $item;
- }
-
- function categorizeItem( $vals, $item ) {
- foreach ( $vals as $val ) {
- if ( array_key_exists( $val, $this->mTree ) ) {
- $this->mTree[$val]->mUnsortedItems[] = $item;
- } else {
- $this->mTree[$val] = new SRFOutlineTree( [ $item ] );
- }
- }
- }
-
- function addProperty( $property ) {
- if ( count( $this->mUnsortedItems ) > 0 ) {
- foreach ( $this->mUnsortedItems as $item ) {
- $cur_vals = $item->getFieldValues( $property );
- $this->categorizeItem( $cur_vals, $item );
- }
- $this->mUnsortedItems = null;
- } else {
- foreach ( $this->mTree as $i => $node ) {
- $this->mTree[$i]->addProperty( $property );
- }
- }
- }
-}
-
-class SRFOutline extends SMWResultPrinter {
-
- protected $mOutlineProperties = [];
- protected $mInnerFormat = '';
-
- protected function handleParameters( array $params, $outputmode ) {
- parent::handleParameters( $params, $outputmode );
- $this->mOutlineProperties = $params['outlineproperties'];
- }
-
- public function getName() {
- return wfMessage( 'srf_printername_outline' )->text();
- }
-
- /**
- * Code mostly copied from SMW's SMWListResultPrinter::getResultText()
- */
- function printItem( $item ) {
- $first_col = true;
- $found_values = false; // has anything but the first column been printed?
- $result = "";
- foreach ( $item->mRow as $orig_ra ) {
- // handling is somewhat simpler for SMW 1.5+
- $realFunction = [ 'SMWQueryResult', 'getResults' ];
- if ( is_callable( $realFunction ) ) {
- // make a new copy of this, so that the call to
- // getNextText() will work again
- $ra = clone ( $orig_ra );
- } else {
- // make a new copy of this, so that the call to
- // getNextText() will work again
- $ra = new SMWResultArray( $orig_ra->getContent(), $orig_ra->getPrintRequest() );
- }
- $val = $ra->getPrintRequest()->getText( SMW_OUTPUT_WIKI, null );
- if ( in_array( $val, $this->mOutlineProperties ) ) {
- continue;
- }
- $first_value = true;
- while ( ( $text = $ra->getNextText( SMW_OUTPUT_WIKI, $this->mLinker ) ) !== false ) {
- if ( !$first_col && !$found_values ) { // first values after first column
- $result .= ' (';
- $found_values = true;
- } elseif ( $found_values || !$first_value ) {
- // any value after '(' or non-first values on first column
- $result .= ', ';
- }
- if ( $first_value ) { // first value in any column, print header
- $first_value = false;
- if ( $this->mShowHeaders && ( '' != $ra->getPrintRequest()->getLabel() ) ) {
- $result .= $ra->getPrintRequest()->getText( SMW_OUTPUT_WIKI, $this->mLinker ) . ' ';
- }
- }
- $result .= $text; // actual output value
- }
- $first_col = false;
- }
- if ( $found_values ) {
- $result .= ')';
- }
- return $result;
- }
-
- function printTree( $outline_tree, $level = 0 ) {
- $text = "";
- if ( !is_null( $outline_tree->mUnsortedItems ) ) {
- $text .= "<ul>\n";
- foreach ( $outline_tree->mUnsortedItems as $item ) {
- $text .= "<li>{$this->printItem($item)}</li>\n";
- }
- $text .= "</ul>\n";
- }
- if ( $level > 0 ) {
- $text .= "<ul>\n";
- }
- $num_levels = count( $this->mOutlineProperties );
- // set font size and weight depending on level we're at
- $font_level = $level;
- if ( $num_levels < 4 ) {
- $font_level += ( 4 - $num_levels );
- }
- if ( $font_level == 0 ) {
- $font_size = 'x-large';
- } elseif ( $font_level == 1 ) {
- $font_size = 'large';
- } elseif ( $font_level == 2 ) {
- $font_size = 'medium';
- } else {
- $font_size = 'small';
- }
- if ( $font_level == 3 ) {
- $font_weight = 'bold';
- } else {
- $font_weight = 'regular';
- }
- foreach ( $outline_tree->mTree as $key => $node ) {
- $text .= "<p style=\"font-size: $font_size; font-weight: $font_weight;\">$key</p>\n";
- $text .= $this->printTree( $node, $level + 1 );
- }
- if ( $level > 0 ) {
- $text .= "</ul>\n";
- }
- return $text;
- }
-
- protected function getResultText( SMWQueryResult $res, $outputmode ) {
- $print_fields = [];
- foreach ( $res->getPrintRequests() as $pr ) {
- $field_name = $pr->getText( $outputmode, $this->mLinker );
- // only print it if it's not already part of the
- // outline
- if ( !in_array( $field_name, $this->mOutlineProperties ) ) {
- $print_fields[] = $field_name;
- }
- }
-
- // for each result row, create an array of the row itself
- // and all its sorted-on fields, and add it to the initial
- // 'tree'
- $outline_tree = new SRFOutlineTree();
- while ( $row = $res->getNext() ) {
- $item = new SRFOutlineItem( $row );
- foreach ( $row as $field ) {
- $field_name = $field->getPrintRequest()->getText( SMW_OUTPUT_HTML );
- if ( in_array( $field_name, $this->mOutlineProperties ) ) {
- while ( ( $object = $field->getNextDataValue() ) !== false ) {
- $field_val = $object->getLongWikiText( $this->mLinker );
- $item->addFieldValue( $field_name, $field_val );
- }
- }
- }
- $outline_tree->addItem( $item );
- }
-
- // now, cycle through the outline properties, creating the
- // tree
- foreach ( $this->mOutlineProperties as $outline_prop ) {
- $outline_tree->addProperty( $outline_prop );
- }
- $result = $this->printTree( $outline_tree );
-
- // print further results footer
- if ( $this->linkFurtherResults( $res ) ) {
- $link = $res->getQueryLink();
- if ( $this->getSearchLabel( $outputmode ) ) {
- $link->setCaption( $this->getSearchLabel( $outputmode ) );
- }
- $link->setParameter( 'outline', 'format' );
- if ( array_key_exists( 'outlineproperties', $this->params ) ) {
- $link->setParameter( $this->params['outlineproperties'], 'outlineproperties' );
- }
- $result .= $link->getText( $outputmode, $this->mLinker ) . "\n";
- }
- return $result;
- }
-
- /**
- * @see SMWResultPrinter::getParamDefinitions
- *
- * @since 1.8
- *
- * @param $definitions array of IParamDefinition
- *
- * @return array of IParamDefinition|array
- */
- public function getParamDefinitions( array $definitions ) {
- $params = parent::getParamDefinitions( $definitions );
-
- $params['outlineproperties'] = [
- 'islist' => true,
- 'default' => [],
- 'message' => 'srf_paramdesc_outlineproperties',
- ];
-
- return $params;
- }
-
-}
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/slideshow/SRF_SlideShow.php b/www/wiki/extensions/SemanticResultFormats/formats/slideshow/SRF_SlideShow.php
index 6c62aba8..81b92304 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/slideshow/SRF_SlideShow.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/slideshow/SRF_SlideShow.php
@@ -34,11 +34,11 @@ class SRFSlideShow extends SMWResultPrinter {
// build an array of article IDs contained in the result set
$objects = [];
- foreach ( $res->getResults() as $key => $object ) {
+ foreach ( $res->getResults() as $key => $dataItem ) {
- $objects[] = [ $object->getTitle()->getArticleId() ];
+ $objects[] = [ $dataItem->getTitle()->getArticleId() ];
- $html .= $key . ': ' . $object->getSerialization() . "<br>\n";
+ $html .= $key . ': ' . $dataItem->getSerialization() . "<br>\n";
}
// build an array of data about the printrequests
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/slideshow/SRF_SlideShowApi.php b/www/wiki/extensions/SemanticResultFormats/formats/slideshow/SRF_SlideShowApi.php
index 9cc856fc..b1c2430c 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/slideshow/SRF_SlideShowApi.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/slideshow/SRF_SlideShowApi.php
@@ -87,18 +87,19 @@ class SRFSlideShowApi extends ApiBase {
}
// query SMWQueryProcessor and set query result as API call result
+ $query = SMWQueryProcessor::createQuery(
+ '[[' . $title . ']]',
+ $queryParams,
+ SMWQueryProcessor::INLINE_QUERY,
+ '',
+ $printouts
+ );
+
$this->getResult()->addValue(
null,
$requestParams['pageid'],
- SMWQueryProcessor::getResultFromQueryString(
- '[[' . $title . ']]',
- $queryParams,
- $printouts,
- SMW_OUTPUT_HTML,
- SMWQueryProcessor::INLINE_QUERY
- )
+ SMWQueryProcessor::getResultFromQuery( $query, $queryParams, SMW_OUTPUT_HTML, SMWQueryProcessor::INLINE_QUERY )
);
-
}
/**
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/spreadsheet/SpreadsheetPrinter.php b/www/wiki/extensions/SemanticResultFormats/formats/spreadsheet/SpreadsheetPrinter.php
new file mode 100644
index 00000000..7a59bb63
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/formats/spreadsheet/SpreadsheetPrinter.php
@@ -0,0 +1,461 @@
+<?php
+
+namespace SRF;
+
+use ImagePage;
+use PhpOffice\PhpSpreadsheet\Calculation\DateTime;
+use PhpOffice\PhpSpreadsheet\Cell\Cell;
+use PhpOffice\PhpSpreadsheet\Cell\DataType;
+use PhpOffice\PhpSpreadsheet\IOFactory;
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
+use PhpOffice\PhpSpreadsheet\Worksheet\Row;
+use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
+use Sanitizer;
+use SMW\FileExportPrinter;
+use SMW\Query\ExportPrinter;
+use SMWDataValue;
+use SMWQueryResult;
+use SMWResultArray;
+use Title;
+
+/**
+ * @author Kim Eik
+ * @since 1.9
+ */
+class SpreadsheetPrinter extends FileExportPrinter {
+
+ const HEADER_ROW_OFFSET = 1;
+
+ protected $fileFormats = [
+ 'xlsx' => [
+ 'writer' => 'Xlsx',
+ 'mimetype' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ 'extension' => '.xlsx',
+ ],
+ 'xls' => [
+ 'writer' => 'Xls',
+ 'mimetype' => 'aapplication/vnd.ms-excel',
+ 'extension' => '.xls',
+ ],
+ 'ods' => [
+ 'writer' => 'Ods',
+ 'mimetype' => 'application/vnd.oasis.opendocument.spreadsheet',
+ 'extension' => '.ods',
+ ],
+ 'csv' => [
+ 'writer' => 'Csv',
+ 'mimetype' => 'text/csv',
+ 'extension' => '.csv',
+ ],
+ ];
+
+ protected $styled = false;
+ protected $fileFormat;
+
+ /**
+ * @see ExportPrinter::getMimeType()
+ *
+ * @since 1.8
+ *
+ * @param SMWQueryResult $queryResult
+ *
+ * @return string
+ */
+ public function getMimeType( SMWQueryResult $queryResult ) {
+ return $this->fileFormat[ 'mimetype' ];
+ }
+
+ /**
+ * @see ExportPrinter::getFileName
+ *
+ * @param SMWQueryResult $queryResult
+ *
+ * @return string
+ */
+ public function getFileName( SMWQueryResult $queryResult ) {
+ return ( $this->params[ 'filename' ] ?: base_convert( uniqid(), 16, 36 ) ) . $this->fileFormat[ 'extension' ];
+ }
+
+ /**
+ * @see ExportPrinter::outputAsFile
+ *
+ * @param SMWQueryResult $queryResult
+ * @param array $params
+ */
+ public function outputAsFile( SMWQueryResult $queryResult, array $params ) {
+
+ if ( array_key_exists( 'fileformat', $params) && array_key_exists( $params[ 'fileformat' ]->getValue(), $this->fileFormats )) {
+ $this->fileFormat = $this->fileFormats[ $params[ 'fileformat' ]->getValue() ];
+ } else {
+ $this->fileFormat = $this->fileFormats[ 'xlsx' ];
+ }
+
+ parent::outputAsFile( $queryResult, $params );
+ }
+
+ /**
+ * @param $definitions \ParamProcessor\ParamDefinition[]
+ *
+ * @return array
+ */
+ public function getParamDefinitions( array $definitions ) {
+ $params = parent::getParamDefinitions( $definitions );
+
+ $definitions[ 'searchlabel' ]->setDefault( wfMessage( 'srf-spreadsheet-link' )->inContentLanguage()->text() );
+
+ $params[ 'templatefile' ] = [
+ 'type' => 'string',
+ 'name' => 'templatefile',
+ 'default' => '',
+ 'message' => 'srf-paramdesc-spreadsheet-templatefile',
+ ];
+
+ $params[ 'filename' ] = [
+ 'type' => 'string',
+ 'name' => 'filename',
+ 'default' => '',
+ 'message' => 'srf-paramdesc-spreadsheet-filename',
+ ];
+
+ $params[ 'fileformat' ] = [
+ 'type' => 'string',
+ 'name' => 'fileformat',
+ 'default' => 'xlsx',
+ 'tolower' => true,
+ 'message' => 'srf-paramdesc-spreadsheet-fileformat',
+ ];
+
+ return $params;
+ }
+
+ /*
+ * Turns the PhpSpreadsheet document object into a string
+ */
+
+ /**
+ * Return serialised results in specified format.
+ *
+ * @throws \PhpOffice\PhpSpreadsheet\Exception
+ * @throws \PhpOffice\PhpSpreadsheet\Reader\Exception
+ */
+ protected function getResultText( SMWQueryResult $queryResult, $outputMode ) {
+
+ if ( $outputMode === SMW_OUTPUT_FILE ) {
+ return $this->getResultFileContents( $queryResult );
+ }
+
+ $this->isHTML = ( $outputMode === SMW_OUTPUT_HTML );
+ return $this->getLink( $queryResult, $outputMode )->getText( $outputMode, $this->mLinker );
+ }
+
+ /**
+ * @param SMWQueryResult $queryResult
+ *
+ * @return string
+ * @throws \PhpOffice\PhpSpreadsheet\Exception
+ * @throws \PhpOffice\PhpSpreadsheet\Reader\Exception
+ */
+ protected function getResultFileContents( SMWQueryResult $queryResult ) {
+
+ $spreadsheet = $this->createSpreadsheet();
+ $worksheet = $spreadsheet->getSheet( 0 );
+
+ $this->populateWorksheet( $worksheet, $queryResult );
+
+ //$spreadsheet->getActiveSheet()->getDefaultRowDimension()->setRowHeight();
+
+ for ( $i = 0; $i < count( $queryResult->getPrintRequests() ); $i++ ) {
+ $worksheet->getColumnDimensionByColumn( $i )->setAutoSize( true );
+ }
+
+ $result = $this->getStringFromSpreadsheet( $spreadsheet );
+ return $result;
+ }
+
+ /**
+ * Creates a new PhpSpreadsheet document and returns it
+ *
+ * @return Spreadsheet
+ * @throws \PhpOffice\PhpSpreadsheet\Reader\Exception
+ */
+ protected function createSpreadsheet() {
+
+ $fileTitle = Title::newFromText( $this->params[ 'templatefile' ], NS_FILE );
+
+ if ( $fileTitle !== null && $fileTitle->exists() ) {
+
+ $spreadsheet = $this->createSpreadsheetFromTemplate( $fileTitle );
+
+ $this->styled = true;
+
+ } else {
+
+ $spreadsheet = new Spreadsheet();
+
+ }
+
+ // Set document properties
+ $spreadsheet->getProperties()->setCreator( 'SemanticMediaWiki Spreadsheet Export' );
+
+ return $spreadsheet;
+ }
+
+ /**
+ * @param $fileTitle
+ *
+ * @return Spreadsheet
+ * @throws \PhpOffice\PhpSpreadsheet\Reader\Exception
+ */
+ private function createSpreadsheetFromTemplate( $fileTitle ) {
+ $filePage = new ImagePage( $fileTitle, $this );
+
+ $virtualFile = $filePage->getDisplayedFile();
+ $virtualFilePath = $virtualFile->getPath();
+
+ $localFile = $virtualFile->getRepo()->getLocalReference( $virtualFilePath );
+ $localFilePath = $localFile->getPath();
+
+ return IOFactory::load( $localFilePath );
+ }
+
+ /**
+ * @param SMWQueryResult $queryResult
+ * @param $worksheet
+ *
+ * @throws \PhpOffice\PhpSpreadsheet\Exception
+ */
+ protected function populateWorksheet( Worksheet $worksheet, SMWQueryResult $queryResult ) {
+
+ $rowIterator = $worksheet->getRowIterator( self::HEADER_ROW_OFFSET );
+
+ //Get headers
+ if ( $this->mShowHeaders ) {
+ $this->populateHeaderRow( $rowIterator->current(), $queryResult );
+ $rowIterator->next();
+ }
+
+ while ( $resultRow = $queryResult->getNext() ) {
+
+ //Get data rows
+ $this->populateRow( $rowIterator->current(), $resultRow );
+ $rowIterator->next();
+ }
+ }
+
+ /**
+ * Populates the PhpSpreadsheet sheet with the headers from the result query
+ *
+ * @param Row $row
+ * @param SMWQueryResult $queryResult The query result
+ *
+ * @return Row
+ * @throws \PhpOffice\PhpSpreadsheet\Exception
+ */
+ protected function populateHeaderRow( Row $row, SMWQueryResult $queryResult ) {
+
+ $printRequests = $queryResult->getPrintRequests();
+ $cellIterator = $row->getCellIterator();
+
+ foreach ( $printRequests as $printRequest ) {
+
+ $cell = $cellIterator->current();
+
+ $cell->setValue( $printRequest->getLabel() );
+
+ $cell->getStyle()
+ ->getFont()
+ ->setBold( true );
+
+ $cellIterator->next();
+
+ }
+
+ return $row;
+ }
+
+ /**
+ * Populates the PhpSpreadsheet document with the query data
+ *
+ * @param Row $row
+ * @param $resultRow
+ *
+ * @throws \PhpOffice\PhpSpreadsheet\Exception
+ */
+ protected function populateRow( Row $row, $resultRow ) {
+
+ $cellIterator = $row->getCellIterator();
+
+ foreach ( $resultRow as $resultField ) {
+
+ $this->populateCell( $cellIterator->current(), $resultField );
+ $cellIterator->next();
+ }
+ }
+
+ /**
+ * @param Cell $cell
+ * @param SMWResultArray $field
+ *
+ * @throws \PhpOffice\PhpSpreadsheet\Exception
+ */
+ protected function populateCell( Cell $cell, SMWResultArray $field ) {
+
+ $dataItems = $field->getContent();
+
+ if ( $dataItems === false ) {
+ return;
+ }
+
+ if ( count( $dataItems ) > 1 ) {
+
+ $values = [];
+
+ while ( $value = $field->getNextText( SMW_OUTPUT_FILE ) ) {
+ $values[] = $value;
+ }
+
+ $cell->setValueExplicit( join( ', ', $values ), DataType::TYPE_STRING );
+
+ } else {
+
+ $nextDataValue = $field->getNextDataValue();
+
+ if ( $nextDataValue !== false ) {
+ $this->populateCellAccordingToType( $cell, $nextDataValue );
+ }
+
+ }
+ }
+
+ /**
+ * Checks the type of the value, and set's it in the sheet accordingly
+ *
+ * @param Cell $cell
+ * @param SMWDataValue $value
+ *
+ * @throws \PhpOffice\PhpSpreadsheet\Exception
+ */
+ protected function populateCellAccordingToType( Cell $cell, SMWDataValue $value ) {
+
+ //NOTE: must check against subclasses before superclasses
+ if ( $value instanceof \SMWQuantityValue ) {
+
+ $this->setQuantityDataValue( $cell, $value );
+
+ } elseif ( $value instanceof \SMWNumberValue ) {
+
+ $this->setNumberDataValue( $cell, $value );
+
+ } elseif ( $value instanceof \SMWTimeValue ) {
+
+ $this->setTimeDataValue( $cell, $value );
+
+ } else {
+
+ $this->setStringDataValue( $cell, $value );
+
+ }
+
+ }
+
+ /**
+ * Sets a quantity value at the given col,row location
+ *
+ * @param Cell $cell
+ * @param \SMWQuantityValue $value SMWDataValue the raw data value object
+ *
+ * @throws \PhpOffice\PhpSpreadsheet\Exception
+ */
+ protected function setQuantityDataValue( Cell $cell, \SMWQuantityValue $value ) {
+
+ $type = DataType::TYPE_NUMERIC;
+ $unit = $value->getUnit();
+ $number = $value->getNumber();
+
+ $cell->setValueExplicit( $number, $type );
+
+ if ( !$this->styled ) {
+ $cell->getStyle()
+ ->getNumberFormat()
+ ->setFormatCode( '0 "' . $unit . '"' );
+ }
+ }
+
+ /**
+ * Sets a numeric value at the given col,row location
+ *
+ * @param Cell $cell
+ * @param \SMWNumberValue $value SMWDataValue the raw data value object
+ *
+ * @throws \PhpOffice\PhpSpreadsheet\Exception
+ */
+ protected function setNumberDataValue( Cell $cell, \SMWNumberValue $value ) {
+
+ $type = DataType::TYPE_NUMERIC;
+ $number = $value->getNumber();
+
+ $cell->setValueExplicit( $number, $type );
+ }
+
+ /**
+ * Sets a date/time value at the given col,row location
+ *
+ * @param Cell $cell
+ * @param \SMWTimeValue $value the raw data value object
+ *
+ * @throws \PhpOffice\PhpSpreadsheet\Exception
+ */
+ protected function setTimeDataValue( Cell $cell, \SMWTimeValue $value ) {
+
+ $type = DataType::TYPE_NUMERIC;
+ $number = DateTime::DATEVALUE( str_replace( 'T', ' ', $value->getISO8601Date() ) );
+
+ $cell->setValueExplicit( $number, $type );
+
+ if ( !$this->styled ) {
+ $cell->getStyle()
+ ->getNumberFormat()
+ ->setFormatCode( NumberFormat::FORMAT_DATE_DDMMYYYY );
+ }
+ }
+
+ /**
+ * Sets or appends a string value at the given col,row location
+ *
+ * If there already exists a value at a given col,row location, then
+ * convert the cell to a string and append the data value. Creating
+ * a list of comma separated entries.
+ *
+ * @param Cell $cell
+ * @param $value SMWDataValue the raw data value object
+ *
+ * @throws \PhpOffice\PhpSpreadsheet\Exception
+ */
+ protected function setStringDataValue( Cell $cell, SMWDataValue $value ) {
+
+ $type = DataType::TYPE_STRING;
+ $text = $value->getWikiValue();
+ $text = Sanitizer::decodeCharReferences( $text );
+ $text = DataType::checkString( $text );
+
+ $cell->setValueExplicit( $text, $type );
+ }
+
+ /**
+ * @param Spreadsheet $spreadsheet
+ *
+ * @return string
+ * @throws \PhpOffice\PhpSpreadsheet\Writer\Exception
+ */
+ protected function getStringFromSpreadsheet( Spreadsheet $spreadsheet ) {
+
+ $writer = IOFactory::createWriter( $spreadsheet, $this->fileFormat[ 'writer' ] );
+
+ ob_start();
+ $writer->save( 'php://output' );
+ return ob_get_clean();
+ }
+
+}
+
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/tagcloud/TagCloud.php b/www/wiki/extensions/SemanticResultFormats/formats/tagcloud/TagCloud.php
index 2ad18154..a10a7ab7 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/tagcloud/TagCloud.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/tagcloud/TagCloud.php
@@ -119,11 +119,20 @@ class TagCloud extends ResultPrinter {
continue;
}
+ $value = null;
+
// Get the HTML for the tag content. Pages are linked, other stuff is just plaintext.
- if ( $dataValue->getTypeID() === '_wpg' && $dataValue->getTitle() instanceof Title ) {
- $value = $dataValue->getTitle()->getPrefixedText();
- $html = $dataValue->getLongText( $outputMode, $this->getLinker( $isSubject ) );
- } else {
+ if ( $dataValue->getTypeID() === '_wpg' ) {
+
+ $title = $dataValue->getDataItem()->getTitle();
+
+ if ( $title instanceof Title ) {
+ $value = $title->getPrefixedText();
+ $html = $dataValue->getLongText( $outputMode, $this->getLinker( $isSubject ) );
+ }
+ }
+
+ if ( $value === null ) {
$html = $dataValue->getShortText( $outputMode, $this->getLinker( false ) );
$value = $html;
}
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/timeline/SRF_Timeline.php b/www/wiki/extensions/SemanticResultFormats/formats/timeline/SRF_Timeline.php
index 9618ff64..0af1a110 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/timeline/SRF_Timeline.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/timeline/SRF_Timeline.php
@@ -341,7 +341,7 @@ class SRFTimeline extends SMWResultPrinter {
if ( $pr->getMode() == SMWPrintRequest::PRINT_THIS ) {
$curarticle = $object->getLongText( $outputmode, $l );
- $cururl = $object->getTitle()->getFullUrl();
+ $cururl = $object->getDataItem()->getTitle()->getFullUrl();
}
// NOTE: type Title of $object implied
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/timeseries/resources/ext.srf.timeseries.flot.js b/www/wiki/extensions/SemanticResultFormats/formats/timeseries/resources/ext.srf.timeseries.flot.js
index 46c16fd4..ec4b4f64 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/timeseries/resources/ext.srf.timeseries.flot.js
+++ b/www/wiki/extensions/SemanticResultFormats/formats/timeseries/resources/ext.srf.timeseries.flot.js
@@ -135,7 +135,10 @@
// Tabs height can vary (due to CSS) therefore after tabs instance was
// created get the height
var _tabs = chart.find( '.ui-tabs-nav' );
- container.find( '.' + plotClass ).css( { 'height': height - _tabs.outerHeight() , 'width': width } );
+ if (_tabs.length > 0) {
+ height -= _tabs.outerHeight();
+ }
+ container.find( '.' + plotClass ).css( { 'height': height, 'width': width } );
// Draw chart
container.srfFlotTimeSeries( 'chart', settings );
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/tree/TreeResultPrinter.php b/www/wiki/extensions/SemanticResultFormats/formats/tree/TreeResultPrinter.php
index d29fed80..a5011d0e 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/tree/TreeResultPrinter.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/tree/TreeResultPrinter.php
@@ -137,7 +137,11 @@ class TreeResultPrinter extends ListResultPrinter {
$this->setQueryResult( null );
- return Html::rawElement( 'div', [ 'class' => 'srf-tree' ], $resultText );
+ if ( trim( $this->params[ 'class' ] ) === '' ) {
+ return $resultText;
+ }
+
+ return Html::rawElement( 'div', [ 'class' => $this->params[ 'class' ] ], $resultText );
}
/**
@@ -194,6 +198,11 @@ class TreeResultPrinter extends ListResultPrinter {
'message' => 'smw-paramdesc-template-arguments',
];
+ $params['class'] = [
+ 'default' => '',
+ 'message' => 'srf-paramdesc-class',
+ ];
+
return $params;
}
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/valuerank/SRF_ValueRank.php b/www/wiki/extensions/SemanticResultFormats/formats/valuerank/SRF_ValueRank.php
index f3df915e..eba7fd3f 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/valuerank/SRF_ValueRank.php
+++ b/www/wiki/extensions/SemanticResultFormats/formats/valuerank/SRF_ValueRank.php
@@ -92,7 +92,7 @@ class SRFValueRank extends SMWResultPrinter {
// Get the HTML for the tag content. Pages are linked, other stuff is just plaintext.
if ( $dataValue->getTypeID() == '_wpg' ) {
- $value = $dataValue->getTitle()->getText();
+ $value = $dataValue->getDataItem()->getTitle()->getText();
$html = $dataValue->getLongText( $outputMode, $this->getLinker( $isSubject ) );
} else {
$html = $dataValue->getShortText( $outputMode, $this->getLinker( false ) );
@@ -262,4 +262,4 @@ class SRFValueRank extends SMWResultPrinter {
return $params;
}
-} \ No newline at end of file
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/ar.json b/www/wiki/extensions/SemanticResultFormats/i18n/ar.json
index 19386d1c..7961fa47 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/ar.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/ar.json
@@ -8,9 +8,8 @@
]
},
"srf-desc": "صيغ نتائج إضافية لاستعلامات ميدياويكي الدلالية",
- "srf-name": "صيغ النتائج الدلالية",
- "prefs-srf": "تمديد:صيغ النتيجة الدلالية",
- "srf-prefs-intro-text": "لقد قمت بتثبيت ملحق صيغ النتائج الدلالية، للحصول على مساعدة إضافية; الرجاء زيارة صفحة المساعدة [https://www.semantic-mediawiki.org/wiki/Help:Result_formats صيغ النتائج].",
+ "prefs-srf": "صيغ النتيجة الدلالية",
+ "srf-prefs-intro-text": "لقد قمت بتثبيت ملحق صيغ النتائج الدلالية، الرجاء زيارة صفحة المساعدة [https://www.semantic-mediawiki.org/wiki/Help:Result_formats صيغ النتائج] للحصول على مساعدة إضافية فيما يتعلق بتفضيلات المستخدم.",
"prefs-srf-eventcalendar-options": "خيارات تقويم الحدث",
"srf-prefs-eventcalendar-options-update-default": "تمكين [https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Automatic_updates التحديثات التلقائية] لأحداث التقويم أثناء تحديث الصفحة",
"srf-prefs-eventcalendar-options-paneview-default": "تمكين عرض الجزء بشكل افتراضي",
@@ -128,7 +127,7 @@
"srf-paramdesc-paneview": "حدد موضع الجزء الذي يحتوي على مخطط سطر صغي،. القيم المسموح بها: \"أسفل\" و\"أعلى\" و\"لا شيء\"، الافتراضي: \"أسفل\"",
"srf-paramdesc-infotext": "عرض معلومات إضافية على علامة التبويب معلومات المقابلة",
"srf-paramdesc-clicktarget": "حدد صفحة أو سلسلة استعلام كهدف عند النقر على تاريخ التقويم.",
- "srf-ui-gridview-label-item": "بند البيانات",
+ "srf-ui-gridview-label-item": "عنصر البيانات",
"srf-ui-gridview-label-value": "قيمة البيانات",
"srf-ui-gridview-label-series": "سلسلة البيانات",
"srf-ui-gridview-label-chart-tab": "رسم بياني",
@@ -267,7 +266,6 @@
"srf-filtered-noscript-error": "لا يمكن عرض النتائج نظرا لعدم تمكين جافا سكريبت; انتقل إلى $1.",
"srf-filtered-noscript-link-caption": "النتائج في شكل جدول",
"srf-filtered-map-provider-missing-error": "لم يتم تحديد موفر الخريطة للعرض \"الخريطة\".",
- "srf-filtered-map-geocoordinateparser-missing-error": "لم يتم العثور على محلل الإحداثيات; تحتاج إلى تثبيت 'قيم البيانات/الجغرافية'.",
"srf-filtered-value-filter-and": "و",
"srf-filtered-value-filter-or": "أو",
"srf-filtered-value-filter-placeholder": "حدد قيمة مرشح",
@@ -327,9 +325,24 @@
"srf-ui-mediaplayer-label-repeat-off": "كرر",
"srf-ui-mediaplayer-label-full-screen": "ملء الشاشة",
"srf-ui-mediaplayer-label-restore-screen": "استعادة الشاشة",
- "srf-excel-link": "إكسل",
- "srf-excel-missing-phpexcel": "تعذر تصدير MS-Excel لأنه لم يتم تثبيت الإضافة [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel].",
- "srf-paramdesc-excel-filename": "اسم ملف التنزيل للملف الذي تم إنشاؤه",
- "srf-paramdesc-excel-templatefile": "اسم ملف إكسيل من نطاق ''ملف'' المستخدم لتنسيق الملف الذي تم إنشاؤه",
- "srf-paramdesc-icalendar-timezone": "قائمة مفصولة بفواصل بالمناطق الزمنية"
+ "srf-spreadsheet-link": "جدول ممتد",
+ "srf-paramdesc-spreadsheet-filename": "اسم ملف لتنزيل ملف جدول البيانات المنشأ",
+ "srf-paramdesc-spreadsheet-fileformat": "التنسيق الذي سيتم إنتاجه لملف جدول البيانات، القيم المسموح بها: xlsx وxls وods وcsv، الافتراضي: xlsx",
+ "srf-paramdesc-spreadsheet-templatefile": "اسم ملف جدول ممتد من نطاق ''ملف'' المستخدمة لتنسيق الملف المنشأ",
+ "srf-paramdesc-icalendar-timezone": "قائمة مفصولة بفواصل بالمناطق الزمنية",
+ "srf-paramdesc-gantt-diagramtitle": "اسم المخطط",
+ "srf-paramdesc-gantt-diagramtheme": "موضوع الرسم البياني",
+ "srf-paramdesc-gantt-axisformat": "المحور السيني: صيغة التاريخ",
+ "srf-paramdesc-gantt-sortkey": "مفتاح لفرز الأقسام والمهام",
+ "srf-paramdesc-gantt-titletopmargin": "الهامش العلوي من عنوان المخطط",
+ "srf-paramdesc-gantt-barheight": "ارتفاع أشرطة المهام",
+ "srf-paramdesc-gantt-leftpadding": "عرض عنوان القسم",
+ "srf-paramdesc-gantt-bargap": "المسافة العمودية لشريط المهام من الهامش",
+ "srf-error-gantt-mapping-assignment": "تعيين خاطئ للقيم المعينة في '''$1'''",
+ "srf-error-gantt-mapping-keywords": "المفتاح المستخدم في وسيط التعيين غير معتمد",
+ "srf-error-gantt-theme": "'''السمة''' التي اخترتها غير مدعومة",
+ "srf-error-gantt-sortkey": "'''مفتاح الفرز''' الذي اخترته غير مدعوم",
+ "srf-error-gantt-mermaid-not-installed": "امتداد Mermaid يحتاج إلى تثبيت.",
+ "srf-printername-gantt": "جانت",
+ "srf-paramdesc-nodelabel": "استخدام تسمية عقدة الرسم البياني، القيم المسموح بها: عنوان العرض."
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/ast.json b/www/wiki/extensions/SemanticResultFormats/i18n/ast.json
index 61ca58f2..31a71611 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/ast.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/ast.json
@@ -5,7 +5,6 @@
]
},
"srf-desc": "Formatos de resultancies adicionales pa consultes de Semantic MediaWiki",
- "srf-name": "Formatos de resultancia semántica",
"prefs-srf": "Estensión:Formatos de resultancies semántiques",
"srf-prefs-intro-text": "Tienes instalada la estensión Formatos de resultancia semántica. Pa llograr ayuda adicional, visita la páxina d'ayuda sobre los [https://@www.semantic-mediawiki.org/wiki/Help:Result_formats formatos de les resultancies].",
"prefs-srf-eventcalendar-options": "Opciones de calendariu d'actividaes",
@@ -261,7 +260,6 @@
"srf-filtered-noscript-error": "Nun pueden amosase los resultaos porque nun ta activáu Javascript. Visita $1.",
"srf-filtered-noscript-link-caption": "resultaos en forma de tabla",
"srf-filtered-map-provider-missing-error": "Nun s'indicó un orixe de mapa pa la vista «mapa».",
- "srf-filtered-map-geocoordinateparser-missing-error": "Nun s'alcontró l'analizador de coordenaes xeográfiques. Precises instalar 'data-values/geo'.",
"srf-filtered-value-filter-and": "Y",
"srf-filtered-value-filter-or": "O",
"srf-filtered-value-filter-placeholder": "Seleccionar un valor de filtru",
@@ -321,9 +319,5 @@
"srf-ui-mediaplayer-label-repeat-off": "Desactivar repetición",
"srf-ui-mediaplayer-label-full-screen": "Pantalla completa",
"srf-ui-mediaplayer-label-restore-screen": "Restaurar la pantalla",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Nun pudo esportase a MS-Excel porque la estensión [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] nun ta instalada.",
- "srf-paramdesc-excel-filename": "El nome de ficheru de la descarga pal ficheru xeneráu",
- "srf-paramdesc-excel-templatefile": "El nome d'un ficheru d'Excel del espaciu de nomes «Ficheru» utilizáu pa dar formatu al ficheru xeneráu",
"srf-paramdesc-icalendar-timezone": "Llista d'estayes horaries separaes con comes"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/br.json b/www/wiki/extensions/SemanticResultFormats/i18n/br.json
index 159f2a73..301f753c 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/br.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/br.json
@@ -11,7 +11,6 @@
]
},
"srf-desc": "Furmadoù ouzhpenn evit ar rekedoù Semantic MediaWiki",
- "srf-name": "Furmadoù an disoc'hoù semantek",
"srf-module-loading": "O kargañ...",
"srf-paramdesc-height": "Uhelder",
"srf-paramdesc-width": "Ledander",
@@ -135,6 +134,5 @@
"srf-ui-mediaplayer-label-unmute": "Gant son",
"srf-ui-mediaplayer-label-repeat": "Adober",
"srf-ui-mediaplayer-label-full-screen": "Skramm leun",
- "srf-ui-mediaplayer-label-restore-screen": "Assevel ar skramm",
- "srf-excel-link": "Excel"
+ "srf-ui-mediaplayer-label-restore-screen": "Assevel ar skramm"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/ca.json b/www/wiki/extensions/SemanticResultFormats/i18n/ca.json
index 867ebf6f..b20e83ef 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/ca.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/ca.json
@@ -10,7 +10,7 @@
]
},
"srf-desc": "Formats addicionals per a les consultes en línia del Semantic MediaWiki.",
- "srf-name": "Semantic Result Formats",
+ "prefs-srf": "Formats de resultats semàntics",
"srf-module-loading": "S'està carregant...",
"srf-paramdesc-height": "Alçada",
"srf-paramdesc-width": "Amplada",
@@ -115,6 +115,7 @@
"srf-ui-eventcalendar-label-listday": "Dia (llista)",
"srf-ui-eventcalendar-label-allday": "Tot el dia",
"srf-paramdesc-unit": "Unitat",
+ "srf-printername-media": "Reproductor multimèdia",
"srf-ui-mediaplayer-label-previous": "Anterior",
"srf-ui-mediaplayer-label-play": "Reprodueix",
"srf-ui-mediaplayer-label-pause": "Posa en pausa",
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/cs.json b/www/wiki/extensions/SemanticResultFormats/i18n/cs.json
index cbf1b8ef..42824070 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/cs.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/cs.json
@@ -2,26 +2,62 @@
"@metadata": {
"authors": [
"Vks",
- "XenoPheX"
+ "XenoPheX",
+ "Dvorapa",
+ "Jaroslav Cerny",
+ "Nemo bis"
]
},
+ "srf-desc": "Další formáty inline požadavků rozšíření Semantic MediaWiki",
+ "prefs-srf": "Rozšíření:Formáty sémantických výsledků",
+ "srf-prefs-intro-text": "Nainstalovali jste si rozšíření Formáty sémantických výsledků. Podporu k tomuto rozšíření najdete na stránce nápovědy [https://www.semantic-mediawiki.org/wiki/Help:Result_formats k formátům výsledků].",
+ "prefs-srf-eventcalendar-options": "Volby kalendáře událostí",
+ "srf-prefs-eventcalendar-options-update-default": "Povolit [https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Automatic_updates automatické aktualizace] událostí kalendáře během aktualizace stránky",
+ "srf-prefs-eventcalendar-options-paneview-default": "Povolit implicitně zobrazení podokna",
+ "prefs-srf-datatables-options": "Volby datových tabulek",
+ "srf-prefs-datatables-options-update-default": "Povolit [https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Automatic_updates automatické aktualizace] obsahu tabulky během aktualizace stránky",
+ "srf-prefs-datatables-options-cache-default": "Povolit [https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Local_storage místní úložiště] pro zkrácení času odezvy",
"srf-module-loading": "Načítání...",
+ "srf-paramdesc-layout": "Dostupné rozložení",
"srf-paramdesc-height": "Výška",
"srf-paramdesc-width": "Šířka",
+ "srf-paramdesc-class": "Zadejte další třídu stylu CSS",
+ "srf-module-nomatch": "Nenalezena žádná shoda",
+ "srf-paramdesc-charttype": "Dostupný typ grafu",
"srf-navigation-previous": "Předchozí",
"srf-ui-navigation-prev": "Předch.",
"srf-ui-navigation-next": "Další",
"srf-ui-common-label-source": "Zdroj",
"srf-ui-common-label-datasource": "Zdroj dat",
+ "srf-ui-common-label-ajax-error": "Server ohlásil nezdařenou komunikaci pro toto $1. Zkuste obnovit stránku nebo se obraťte na $2.",
+ "srf-ui-common-label-request-object": "objekt požadavku",
+ "srf-ui-common-label-help-section": "část nápovědy",
"srf-ui-tooltip-title-options": "Nastavení",
"srf-ui-tooltip-title-scope": "Rozsah",
- "srf-error-missing-layout": "Rozložení chybí",
+ "srf-ui-tooltip-title-legend": "Legenda",
+ "srf-ui-tooltip-title-filter": "Filtr",
+ "srf-ui-common-label-refresh": "Obnovit",
+ "srf-ui-common-label-parameters": "Parametry",
+ "srf-ui-common-label-query": "Dotaz",
+ "srf-ui-common-label-paneview": "Zobrazení podokna",
+ "srf-ui-common-label-daterange": "Časové období",
+ "srf-ui-widgets-label-parameter-limit": "Parametr limitu",
+ "srf-error-option-mix": "Volba ($1) není dostupná",
+ "srf-error-option-link-all": "Volba ($1) vyžaduje, aby parametr \"link\" měl hodnotu \"all\"",
+ "srf-error-missing-layout": "Diagram nebo graf nelze zobrazit, protože chybí rozložení.",
+ "srf-error-jqplot-bubble-data-length": "Diagram nebo graf nelze zobrazit, protože chybí data.",
+ "srf-error-jqplot-stackseries-data-length": "Diagram nebo graf nelze zobrazit, protože pruhy nebo čáry nemají shodný počet prvků.",
+ "srf-warn-empy-chart": "Diagram nebo graf je prázdný, protože chybí data.",
+ "srf-paramdesc-color": "Barva položek kalendáře",
"srfc_previousmonth": "Předchozí měsíc",
"srfc_nextmonth": "Další měsíc",
"srfc_today": "Dnes",
"srfc_gotomonth": "Přejdi na měsíc",
"srf_printername_calendar": "Měsíční kalendář",
"srf_paramdesc_calendarlang": "Kód jazyka, ve kteréem bude zobrazován kalendář",
+ "srf_paramdesc_calendarcolors": "Barva jednotlivých datových vlastností (příklad: \"Datum začátku=>green,Datum konce=>#09c\")",
+ "srf-paramdesc-calendar-startmonth": "Počáteční zobrazený měsíc kalendáře (výchozí = aktuální měsíc)",
+ "srf-paramdesc-calendar-startyear": "Počáteční zobrazený rok kalendáře (výchozí = aktuální rok)",
"srf_printername_vcard": "export vCard",
"srf_printername_icalendar": "export iCalendar",
"srf_paramdesc_icalendartitle": "titulek souboru s kalendářem",
@@ -29,47 +65,266 @@
"srf_printername_bibtex": "export BibTeX",
"srf_outline_novalue": "Žádná hodnota",
"srf_printername_outline": "Náčrtek",
+ "srf_paramdesc_outlineproperties": "Seznam vlastností, které budou zobrazeny jako záhlaví osnovy, oddělené čárkami",
"srf_printername_sum": "Součet čísel",
"srf_printername_average": "Průměr čísel",
"srf_printername_max": "Maximum mezi čísly",
"srf_printername_min": "Minimum mezi čísly",
+ "srf_paramdesc_limit": "Maximální počet stránek zahrnutých do dotazu",
"srf_printername_product": "Součin čísel",
"srf_printername_median": "Medián čísel",
"srf-paramdesc-default": "Výchozí hodnota, která se zobrazí, když neexistují žádné číselné výsledky",
+ "srf_printername_earliest": "Nejdřívější čas",
+ "srf_printername_latest": "Nejpozdější čas",
+ "srf_printername_timeline": "Časová osa",
+ "srf_printername_eventline": "Časová osa událostí",
+ "srf_paramdesc_timelinebands": "Určuje, které pruhy jsou zobrazeny ve výsledku.",
+ "srf_paramdesc_timelineposition": "Určuje událost, na kterou se časová osa na začátku vystředí.",
+ "srf_paramdesc_timelinestart": "Název vlastnosti použité k definování prvního časového bodu",
+ "srf_paramdesc_timelineend": "Název vlastnosti použité k definování druhého časového bodu",
+ "srf_paramdesc_timelinesize": "Výška časové osy",
+ "srf-timeline-allresults": "Další výsledky pro tento dotaz.",
+ "srf-timeline-nojs": "K zobrazení interaktivní časové osy musíte mít povolen JavaScript.",
+ "srf_paramdesc_views": "Zobrazené pohledy",
+ "srf_paramdesc_facets": "Sada vlastností zobrazených na každé stránce",
+ "srf_paramdesc_lens": "Název šablony, přes kterou se zobrazí vlastnosti stránky",
+ "srf_printername_googlebar": "Pruhový graf Google",
+ "srf_printername_googlepie": "Výsečový graf Google",
+ "srf-printername-jqplotchart": "Graf jqPlot",
+ "srf-printername-jqplotseries": "Řada jqPlot",
+ "srf_paramdesc_chartheight": "Určuje výšku diagramu nebo grafu (v pixelech)",
+ "srf_paramdesc_chartwidth": "Určuje šířku diagramu nebo grafu (v pixelech nebo procentech)",
"srf_paramdesc_charttitle": "Název grafu",
+ "srf_paramdesc_barcolor": "Určuje barvy grafu",
+ "srf_paramdesc_bardirection": "Určuje směr grafu",
+ "srf-paramdesc-direction": "Určuje směr diagramu nebo grafu",
+ "srf_paramdesc_barnumbersaxislabel": "Popisek osy čísel",
+ "srf-paramdesc-labelaxislabel": "Popisek osy popisků",
+ "srf-paramdesc-ticklabels": "Povolit zobrazení popisků značek",
+ "srf-paramdesc-minvalue": "Minimální hodnota zobrazená na ose Y",
+ "srf-paramdesc-pointlabels": "Zobrazit datové body definované v grafu",
+ "srf-paramdesc-chartlegend": "Umístění legendy grafu",
+ "srf-paramdesc-datalabels": "Popisky dat diagramu/grafu",
+ "srf-paramdesc-charttext": "Popisný text grafu",
+ "srf-paramdesc-chartclass": "Další třída CSS",
+ "srf-paramdesc-renderer": "Vyberte vykreslovač diagramu/grafu",
+ "srf-paramdesc-filling": "Individuální volba výplně",
+ "srf-paramdesc-theme": "Vyberte motiv mřížky",
+ "srf-paramdesc-chartcolor": "Přiřadit individuální barvy grafu",
+ "srf-paramdesc-colorscheme": "Vyberte barevné schéma",
+ "srf-paramdesc-valueformat": "Určuje pravidlo formátování hodnot",
+ "srf-paramdesc-highlighter": "Zobrazit zvýrazňovač datového bodu",
+ "srf-paramdesc-smoothlines": "Použít algoritmus vyhlazování ve spojnicových grafech",
+ "srf-paramdesc-stackseries": "Zobrazit graf jako skládané řady",
+ "srf-paramdesc-seriesgroup": "Vybrat seskupení řad",
+ "srf-paramdesc-serieslabel": "Určuje popisek řady",
+ "srf-paramdesc-grouplabel": "Určuje popisek skupiny",
+ "srf-paramdesc-chartcursor": "Volba zobrazení ukazatele v grafu",
+ "srf-paramdesc-trendline": "Povolit současné zobrazení grafu a jeho spojnice trendu",
+ "srf-paramdesc-gridview": "Zobrazit současně graf i sady dat. Povolené hodnoty: \"none\" a \"tabs\". Výchozí hodnota: \"none\"",
+ "srf-paramdesc-paneview": "Určuje umístění podokna s malým spojnicovým grafem. Povolené hodnoty: \"bottom\", \"top\" a \"none\". Výchozí hodnota: \"bottom\"",
+ "srf-paramdesc-infotext": "Zobrazit další informace na odpovídající informační záložce",
+ "srf-paramdesc-clicktarget": "Definuje stránku nebo řetězec dotazu jako cíl kliknutí na datum v kalendáři.",
+ "srf-ui-gridview-label-item": "Datová položka",
+ "srf-ui-gridview-label-value": "Datová hodnota",
+ "srf-ui-gridview-label-series": "Datová řada",
"srf-ui-gridview-label-chart-tab": "Graf",
+ "srf-ui-gridview-label-data-tab": "Data",
+ "srf-ui-gridview-label-info-tab": "Informace",
+ "srf_printername_gallery": "Galerie",
+ "srf_paramdesc_perrow": "Počet obrázků na 1 řádek",
+ "srf_paramdesc_widths": "Šířka obrázků",
+ "srf_paramdesc_heights": "Výška obrázků",
+ "srf_paramdesc_autocaptions": "Použít název souboru jako titulek, není-li žádný zadán",
+ "srf_paramdesc_fileextensions": "Při použití názvu souboru jako titulku zobrazit také příponu souboru",
+ "srf_paramdesc_captionproperty": "Název sémantické vlastnosti přítomné v dotazovaných stránkách, které budou použity jako titulek",
+ "srf_paramdesc_imageproperty": "Název sémantické vlastnosti přítomné v dotazovaných stránkách, která odkazuje na používané obrázky. Je-li vlastnost nastavena, nebudou dotazované stránky zobrazeny jako obrázky",
+ "srf-paramdesc-redirects": "Název sémantické vlastnosti přítomné v dotazovaných stránkách, která obsahuje cíl přesměrování",
+ "srf-paramdesc-navigation": "Ovládací prvek rozložení výstupu",
+ "srf-paramdesc-overlay": "Povolit překrytí obrázků",
"srf-gallery-navigation-previous": "Předchozí",
"srf-gallery-navigation-next": "Následujicí",
"srf-gallery-overlay-count": "Obrázek $1 z $2",
+ "srf-gallery-image-url-error": "Obrázek nebyl nalezen.",
"srf_printername_tagcloud": "Oblak nálepek",
+ "srf_paramdesc_includesubject": "Zahrnout také názvy předmětů",
+ "srf_paramdesc_increase": "Jak zvětšit velikost značek",
+ "srf_paramdesc_tagorder": "Pořadí značek",
+ "srf_paramdesc_mincount": "Minimální počet výskytů hodnoty k zařazení do seznamu",
+ "srf_paramdesc_minsize": "Velikost nejmenších značek v procentech",
+ "srf_paramdesc_maxsize": "Velikost největších značek v procentech",
+ "srf_paramdesc_maxtags": "Maximální počet značek v cloudu",
+ "srf-paramdesc-excludetags": "Vyloučit značky (oddělovač: \";\")",
+ "srf_printername_valuerank": "Postavení značky",
"srf_printername_array": "Pole",
+ "srf_paramdesc_pagetitle": "Mají být zobrazeny nadpisy stránek jako položky ve výstupu, nebo vynechány?",
+ "srf_paramdesc_hidegaps": "Mají být tištěny a odděleny pomocí oddělovačů vyžadované, ale nedostupné hodnoty vlastností a záznamů, nebo vynechány?",
+ "srf_paramdesc_arrayname": "Je-li zadáno a je-li dostupné rozšíření ArrayExtension, vytvoří se pole se zadaným názvem (bez viditelného výstupu)",
+ "srf_paramdesc_propsep": "Oddělovač mezi požadovanými vlastnostmi",
+ "srf_paramdesc_manysep": "Oddělovač mezi hodnotami vícehodnotových vlastností",
+ "srf_paramdesc_recordsep": "Oddělovač mezi hodnotami vlastností záznamu",
+ "srf_paramdesc_headersep": "Oddělovač mezi názvem vlastnosti a hodnotou, když je \"headers\" nastaveno na \"show\" nebo \"plain\"",
"srf_printername_hash": "Asociativní pole (Haš)",
+ "srf_paramdesc_hashname": "Je-li zadáno a je-li dostupné rozšíření HashTables, vytvoří se hash se zadaným názvem (bez viditelného výstupu)",
"srf-printername-graph": "Graf",
- "srf_paramdesc_graphname": "Název",
- "srf_paramdesc_graphsize": "Velikost grafu (v pixelech)",
- "srf_paramdesc_graphlabel": "Popisek grafu",
- "srf_paramdesc_rankdir": "Směr šipky",
- "srf_paramdesc_graphcolor": "Barva grafu",
+ "srf-paramdesc-graph-relation": "Určuje, zda předměty nebo vlastnosti názvů jsou nadřízené či podřízené prvky",
+ "srf-paramdesc-graph-nameprop": "Nastaví vlastnost, která bude použita jako předmět namísto skutečného předmětu, např. název stránky",
+ "srf-paramdesc-graph-nodeshape": "Nastaví tvar všech uzlů ve grafu",
+ "srf-paramdesc-graphname": "Nastaví název grafu",
+ "srf-paramdesc-graphsize": "Nastaví velikost grafu v pixelech",
+ "srf-paramdesc-graphlegend": "Určuje, zda bude zobrazena legenda grafu",
+ "srf-paramdesc-graphlabel": "Nastaví popisek grafu",
+ "srf-paramdesc-rankdir": "Nastaví směr šipek",
+ "srf-paramdesc-graphlink": "Určuje, zda mají uzly odkazovat na příslušné wiki stránky",
+ "srf-paramdesc-graphcolor": "Nastaví barvu grafu",
+ "srf-paramdesc-graph-wwl": "Nastaví limit zalomení slova (jako počet znaků)",
+ "srf-paramdesc-clustercolor": "Nastaví barvy rámečků shluku",
+ "srf-paramdesc-highlight": "Určí uzel, který bude zvýrazněn",
+ "srf-paramdesc-highlightcolor": "Nastaví barvu písma zvýrazněného uzlu",
+ "srf-paramdesc-redlinkcolor": "Nastaví barvu písma odkazů na neexistující stránky",
+ "srf-paramdesc-processcategory": "Nastaví kategorii wiki, která bude shromažďovat procesní kroky",
+ "srf-paramdesc-showroles": "Zobrazí odpovídající role v grafu",
+ "srf-paramdesc-showstatus": "Určuje, zda má být vykreslen stav procesního kroku",
+ "srf-paramdesc-showresources": "Zobrazí v grafu odpovídající zdroje",
+ "srf-paramdesc-showdiscussion": "Určuje, zda má být vykreslena diskuze",
+ "srf-paramdesc-showredlinks": "Určuje, zda budou odkazy na neexistující stránky zaškrtnuty a zvýrazněny",
+ "srf-paramdesc-showcompound": "Určuje, zda mají být zvýrazněny složené uzly, např. dílčí procesy",
+ "srf-paramdesc-debug": "Určuje, zda má být kód grafu procesů zobrazen uvnitř značek PRE",
+ "srf-paramdesc-graphvalidation": "Zobrazí červeně ty procesní kroky, které nemají přiřazenou roli",
+ "srf-printername-datatables": "Datové tabulky",
+ "srf-ui-datatables-label-conditions": "Podmínky",
+ "srf-ui-datatables-label-parameters": "Parametry",
+ "srf-ui-datatables-label-filters": "Filtry sloupce a hledání",
+ "srf-ui-datatables-label-information": "Informace",
+ "srf-ui-datatables-panel-disclaimer": "Parametry a podmínky lze změnit, ale všechny změny jsou dočasné a po aktualizaci stránky se ztratí",
+ "srf-ui-datatables-label-update-success": "Aktualizace tabulky byla úspěšná",
+ "srf-ui-datatables-label-update-error": "Aktualizace tabulky selhala.",
+ "srf-ui-datatables-label-placeholder-column-search": "Hledat...",
+ "srf-ui-datatables-label-content-cache": "Obsah byl odvozen z místní cache.",
+ "srf-ui-datatables-label-content-server": "Obsah byl odvozen ze serveru.",
+ "srf-ui-datatables-label-multiselect-column-header": "Dostupné sloupce",
+ "srf-ui-datatables-label-multiselect-column-noneselectedtext": "Nastavení filtru",
+ "srf-ui-datatables-label-multiselect-column-selectedtext": "Sloupce jsou vidět",
+ "srf-ui-datatables-label-sEmptyTable": "V tabulce nejsou dostupná žádná data",
+ "srf-ui-datatables-label-sInfo": "Zobrazují se položky _START_ až _END_ z _TOTAL_ celkem",
+ "srf-ui-datatables-label-sInfoEmpty": "Zobrazují se položky 0 až 0 z 0 celkem",
+ "srf-ui-datatables-label-sInfoFiltered": "(filtrováno z _MAX_ položek celkem)",
+ "srf-ui-datatables-label-sInfoThousands": ",",
+ "srf-ui-datatables-label-sLengthMenu": "Zobrazují se položky _MENU_",
+ "srf-ui-datatables-label-sLoadingRecords": "Načítání...",
+ "srf-ui-datatables-label-sProcessing": "Zpracovává se...",
+ "srf-ui-datatables-label-sSearch": "Hledat:",
+ "srf-ui-datatables-label-sZeroRecords": "Nenalezeny žádné odpovídající záznamy",
+ "srf-ui-datatables-label-oPaginate-sFirst": "První",
+ "srf-ui-datatables-label-oPaginate-sLast": "Poslední",
+ "srf-ui-datatables-label-oPaginate-sNext": "Další",
+ "srf-ui-datatables-label-oPaginate-sPrevious": "Předchozí",
+ "srf-ui-datatables-label-oAria-sSortAscending": ": po aktivaci bude sloupec seřazen vzestupně",
+ "srf-ui-datatables-label-oAria-sSortDescending": ": po aktivaci bude sloupec seřazen sestupně",
"srf-printername-tree": "Strom",
+ "srf-printername-ultree": "Funkce UItree",
+ "srf-printername-oltree": "Funkce OItree",
+ "srf-tree-noparentprop": "není zadána nadřízená vlastnost. Strom nelze vytvořit bez určené nadřízené vlastnosti.",
+ "srf-tree-rootinvalid": "$1 není platný nadpis stránky.",
+ "srf-tree-circledetected": "Při pokusu o vložení $1 do stromu byl rozpoznán kruhový odkaz.",
+ "srf-paramdesc-tree-parent": "Vlastnost obsahující nadřízenou stránku",
+ "srf-paramdesc-tree-root": "Kořenová stránka stromu",
+ "srf-paramdesc-tree-startlevel": "Počáteční úroveň stromu, např. pro integraci do jiného stromu",
"srf-printername-slideshow": "Prezentace",
+ "srf-paramdesc-delay": "Prodleva mezi snímky v sekundách",
+ "srf-paramdesc-navigation-controls": "Zobrazit navigační prvky nebo ne",
+ "srf-paramdesc-effect": "Efekt použitý při přechodu ze snímku na další snímek",
+ "srf-printername-filtered": "Filtrováno",
+ "srf-paramdesc-filtered-views": "Pohledy, které mají být dostupné v zobrazení výsledků.",
+ "srf-paramdesc-filtered-filter-position": "Pozice filtrů ve vztahu k zobrazením. Povolené hodnoty: \"top\", \"bottom\". Default: \"top\".",
+ "srf-paramdesc-filtered-list-type": "Typ seznamu. Povolené hodnoty: \"list\", \"ul\", \"ol\". Výchozí: \"list\".",
+ "srf-paramdesc-filtered-list-template": "Šablona, která bude použita pro formátování položek seznamu.",
+ "srf-paramdesc-filtered-list-named-args": "Název argumentu předaného do šablony.",
+ "srf-paramdesc-filtered-list-introtemplate": "Název šablony, která se zobrazí před výsledky dotazu, pokud nějaké jsou.",
+ "srf-paramdesc-filtered-list-outrotemplate": "Název šablony, která se zobrazí za výsledky dotazu, pokud nějaké jsou.",
+ "srf-paramdesc-filtered-calendar-start": "Výpis obsahující počáteční datum události.",
+ "srf-paramdesc-filtered-calendar-end": "Výpis obsahující koncové datum události.",
+ "srf-paramdesc-filtered-calendar-title": "Výpis obsahující nadpis události. Nelze použít spolu se šablonou nadpisu.",
+ "srf-paramdesc-filtered-calendar-title-template": "Šablona použitá k formátování nadpisu událostí v kalendáři.",
+ "srf-paramdesc-filtered-map-position": "Výpis obsahující geografické umístění.",
+ "srf-paramdesc-filtered-map-icon": "Výpis určující použitou ikonu mapy.",
+ "srf-paramdesc-filtered-map-icons": "Mapování hodnot na ikony, které bude použito pro tyto hodnoty v mapě.",
+ "srf-paramdesc-filtered-map-height": "Výška mapy.",
+ "srf-paramdesc-filtered-map-zoom": "Úroveň přiblížení při načtení mapy. Uživatel může tento údaj změnit.<br>Viz: <i>minimální přiblížení zobrazení mapy</i> a <i>maximální přiblížení zobrazení mapy</i>",
+ "srf-paramdesc-filtered-map-min-zoom": "Minimální volitelná úroveň přiblížení mapy",
+ "srf-paramdesc-filtered-map-max-zoom": "Maximální volitelná úroveň přiblížení mapy",
+ "srf-paramdesc-filtered-map-marker-cluster": "Vypne nebo zapne shlukování značek.",
+ "srf-paramdesc-filtered-map-marker-cluster-max-zoom": "Maximální úroveň přiblížení, ve které jsou značky mapě stále ve shlucích. Nad touto úrovní budou značky vždy samostatně.",
+ "srf-paramdesc-filtered-map-marker-cluster-max-radius": "Maximální poloměr oblasti zabrané shlukem od centrální značky (v obrazových bodech). Výchozí hodnota je 80.",
+ "srf-paramdesc-filtered-map-marker-cluster-zoom-on-click": "Je-li zapnuto, shluk se po kliknutí zvětší tak, že pokryje celou zobrazenou plochu.",
"srf-filtered-selectorlabel-list": "Seznam",
+ "srf-filtered-selectorlabel-table": "Tabulka",
"srf-filtered-selectorlabel-calendar": "Kalendář",
+ "srf-filtered-selectorlabel-map": "Mapa",
+ "srf-filtered-noscript-error": "Výsledky nelze zobrazit, protože není zapnutý Javascript. Přejděte na $1.",
+ "srf-filtered-noscript-link-caption": "výsledky v tabulkovém formátu",
+ "srf-filtered-map-provider-missing-error": "Pro zobrazení mapy není zadán žádný poskytovatel.",
+ "srf-filtered-value-filter-and": "A",
+ "srf-filtered-value-filter-or": "NEBO",
+ "srf-filtered-value-filter-placeholder": "Vyberte hodnotu filtru",
+ "srf-printername-d3chart": "Graf D3",
+ "srf-printername-timeseries": "Graf časových řad",
+ "srf-paramdesc-group": "Řady seskupeny podle",
"srf-paramdesc-zoom": "Povolit přiblížení",
+ "srf-paramdesc-datatable": "Povolit tabulku dat",
+ "srf-timeseries-zoom-out-of-range": "V rozsahu přiblížení nejsou žádná dostatečná data",
+ "srf-printername-sparkline": "Minigraf",
+ "srf-printername-listwidget": "Widget seznamu",
+ "srf-paramdesc-listtype": "Určuje typ seznamu",
+ "srf-paramdesc-widget": "Dostupný widget",
"srf-paramdesc-pageitems": "Položek na stránku",
+ "srf-printername-eventcalendar": "Kalendář událostí",
"srf-paramdesc-calendarfirstday": "Den, kterým začíná týden",
"srf-paramdesc-calendardefaultview": "Výchozí zobrazení po načtení kalendáře",
+ "srf-paramdesc-calendarstart": "Začátek kalendáře (hodnoty typu datum nebo datum/čas)",
+ "srf-paramdesc-calendarlegend": "Určuje umístění legendy a volby přiřazeného filtru",
+ "srf-paramdesc-dayview": "Aktivovat zobrazení dne kliknutím na číslo dne",
"srf-ui-eventcalendar-label-today": "Dnes",
"srf-ui-eventcalendar-label-month": "Měsíc",
"srf-ui-eventcalendar-label-week": "Týden",
"srf-ui-eventcalendar-label-day": "Den",
+ "srf-ui-eventcalendar-label-listmonth": "Měsíc (seznam)",
+ "srf-ui-eventcalendar-label-listweek": "Týden (seznam)",
+ "srf-ui-eventcalendar-label-listday": "Den (seznam)",
"srf-ui-eventcalendar-label-allday": "Celý den",
+ "srf-ui-eventcalendar-label-update-success": "Aktualizace kalendáře událostí byla úspěšná.",
+ "srf-ui-eventcalendar-label-update-error": "Aktualizace kalendáře událostí selhala.",
+ "srf-ui-eventcalendar-click-popup": "Chcete vytvořit událost?",
+ "srf-printername-dygraphs": "Graf knihovny Dygraphs",
+ "srf-paramdesc-datasource": "Zdroj, ze kterého jsou data dostupná. Povolené hodnoty: \"file\", \"raw\" a \"url\". Výchozí hodnota: \"file\"",
+ "srf-paramdesc-errorbar": "Použitá chybová úsečka. Povolené hodnoty: \"fraction\" (intervaly důvěry pro hodnoty), \"sigma\" (standardní odchylka hodnot) a \"range\" (vlastní rozsah hodnot)",
+ "srf-paramdesc-movingaverage": "Zobrazí průměr za počet dnů (0 = žádný klouzavý průměr)",
"srf-paramdesc-yaxislabel": "Popisek, který se objeví na ose y",
"srf-paramdesc-xaxislabel": "Popisek, který se objeví na ose x",
+ "srf-paramdesc-unit": "Jednotka",
+ "srf-printername-pagewidget": "Widget stránky",
+ "srf-printername-incoming": "Příchozí vlastnosti",
+ "srf-paramdesc-count": "Určuje, zda má být evidován počet příchozích vlastností",
+ "srf-paramdesc-min": "Minimální nebo prahová hodnota",
+ "srf-paramdesc-excludeproperty": "Vyloučit vlastnost ze sady výsledků",
+ "srf-printername-media": "Přehrávač médií",
+ "srf-paramdesc-mediainspector": "Zobrazuje detailní informace o zadaném mediálním prvku",
"srf-ui-mediaplayer-label-previous": "Předchozí",
"srf-ui-mediaplayer-label-play": "Přehrát",
"srf-ui-mediaplayer-label-pause": "Pozastavit",
"srf-ui-mediaplayer-label-next": "Následujicí",
"srf-ui-mediaplayer-label-stop": "Zastavit",
+ "srf-ui-mediaplayer-label-mute": "Ztlumit",
+ "srf-ui-mediaplayer-label-unmute": "Zapnout zvuk",
+ "srf-ui-mediaplayer-label-volume-max": "Maximální hlasitost",
+ "srf-ui-mediaplayer-label-shuffle": "Náhodné přehrávání",
+ "srf-ui-mediaplayer-label-shuffle-off": "Vypnout náhodné přehrávání",
"srf-ui-mediaplayer-label-repeat": "Opakovat",
- "srf-ui-mediaplayer-label-full-screen": "Celá obrazovka"
+ "srf-ui-mediaplayer-label-repeat-off": "Vypnout opakování",
+ "srf-ui-mediaplayer-label-full-screen": "Celá obrazovka",
+ "srf-ui-mediaplayer-label-restore-screen": "Obnovit obrazovku",
+ "srf-spreadsheet-link": "Tabulka",
+ "srf-paramdesc-spreadsheet-filename": "Formát vytvořeného souboru. Povolené hodnoty: xlsx, xls, ods, csv. Výchozí hodnota: xlsx",
+ "srf-paramdesc-spreadsheet-templatefile": "Název tabulkového souboru z prostoru názvů ''Soubor'', který je použit k formátování vytvořeného souboru",
+ "srf-paramdesc-icalendar-timezone": "Seznam časových pásem oddělených čárkami"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/da.json b/www/wiki/extensions/SemanticResultFormats/i18n/da.json
new file mode 100644
index 00000000..339b43b4
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/da.json
@@ -0,0 +1,99 @@
+{
+ "@metadata": {
+ "authors": [
+ "Saederup92",
+ "Kranix"
+ ]
+ },
+ "srf-module-loading": "Indlæser...",
+ "srf-paramdesc-height": "Højde",
+ "srf-paramdesc-width": "Bredde",
+ "srf-navigation-previous": "Forrige",
+ "srf-ui-navigation-prev": "Forrige",
+ "srf-ui-navigation-next": "Næste",
+ "srf-ui-common-label-source": "Kilde",
+ "srf-ui-common-label-datasource": "Datakilde",
+ "srf-ui-tooltip-title-scope": "Afgrænsning",
+ "srf-ui-tooltip-title-filter": "Filtrer",
+ "srf-ui-common-label-parameters": "Parametre",
+ "srf-ui-common-label-query": "Forespørgsel",
+ "srfc_previousmonth": "Forrige måned",
+ "srfc_nextmonth": "Næste måned",
+ "srfc_today": "I dag",
+ "srfc_gotomonth": "Gå til måned",
+ "srf_printername_calendar": "Månedlig kalender",
+ "srf_outline_novalue": "Ingen værdi",
+ "srf_printername_sum": "Sum af tal",
+ "srf_printername_average": "Gennemsnit af tal",
+ "srf_printername_max": "Højeste tal",
+ "srf_printername_min": "Mindste tal",
+ "srf_printername_earliest": "Tidligste tidspunkt",
+ "srf_printername_latest": "Seneste tidspunkt",
+ "srf_printername_timeline": "Tidslinje",
+ "srf_paramdesc_timelinesize": "Højden på tidslinjen",
+ "srf_paramdesc_charttitle": "Titlen på diagrammet",
+ "srf-ui-gridview-label-item": "Dataelement",
+ "srf-ui-gridview-label-value": "Dataværdi",
+ "srf-ui-gridview-label-series": "Datarække",
+ "srf-ui-gridview-label-chart-tab": "Diagram",
+ "srf-ui-gridview-label-data-tab": "Data",
+ "srf-ui-gridview-label-info-tab": "Info",
+ "srf_printername_gallery": "Galleri",
+ "srf_paramdesc_widths": "Bredden på billederne",
+ "srf_paramdesc_heights": "Højden på billederne",
+ "srf-gallery-navigation-previous": "Forrige",
+ "srf-gallery-navigation-next": "Næste",
+ "srf-gallery-overlay-count": "Billede $1 af $2",
+ "srf-gallery-image-url-error": "Billedet blev ikke fundet.",
+ "srf_printername_array": "Array",
+ "srf-printername-graph": "Graf",
+ "srf-ui-datatables-label-parameters": "Parametre",
+ "srf-ui-datatables-label-information": "Information",
+ "srf-ui-datatables-label-placeholder-column-search": "Søg...",
+ "srf-ui-datatables-label-multiselect-column-header": "Tilgængelige kolonner",
+ "srf-ui-datatables-label-multiselect-column-selectedtext": "Kolonner er synlige",
+ "srf-ui-datatables-label-sLoadingRecords": "Indlæser...",
+ "srf-ui-datatables-label-sProcessing": "Bearbejder...",
+ "srf-ui-datatables-label-sSearch": "Søg:",
+ "srf-ui-datatables-label-oPaginate-sFirst": "Første",
+ "srf-ui-datatables-label-oPaginate-sLast": "Sidste",
+ "srf-ui-datatables-label-oPaginate-sNext": "Næste",
+ "srf-ui-datatables-label-oPaginate-sPrevious": "Forrige",
+ "srf-printername-tree": "Træ",
+ "srf-printername-filtered": "Filtreret",
+ "srf-paramdesc-filtered-map-height": "Korthøjden",
+ "srf-filtered-selectorlabel-list": "Liste",
+ "srf-filtered-selectorlabel-table": "Tabel",
+ "srf-filtered-selectorlabel-calendar": "Kalender",
+ "srf-filtered-selectorlabel-map": "Kort",
+ "srf-filtered-value-filter-and": "OG",
+ "srf-filtered-value-filter-or": "ELLER",
+ "srf-paramdesc-zoom": "Aktiver zoom",
+ "srf-paramdesc-datatable": "Aktiver en datatabel",
+ "srf-paramdesc-widget": "Tilgængelig widget",
+ "srf-printername-eventcalendar": "Begivenhedskalender",
+ "srf-paramdesc-calendarfirstday": "Første dag i ugen",
+ "srf-ui-eventcalendar-label-today": "I dag",
+ "srf-ui-eventcalendar-label-month": "Måned",
+ "srf-ui-eventcalendar-label-week": "Uge",
+ "srf-ui-eventcalendar-label-day": "Dag",
+ "srf-ui-eventcalendar-label-listmonth": "Måned (liste)",
+ "srf-ui-eventcalendar-label-listweek": "Uge (liste)",
+ "srf-ui-eventcalendar-label-listday": "Dag (liste)",
+ "srf-ui-eventcalendar-label-allday": "Hele dagen",
+ "srf-ui-eventcalendar-click-popup": "Ønsker du at oprette en begivenhed?",
+ "srf-paramdesc-unit": "Enhed",
+ "srf-printername-media": "Medieafspiller",
+ "srf-ui-mediaplayer-label-previous": "Forrige",
+ "srf-ui-mediaplayer-label-play": "Afspil",
+ "srf-ui-mediaplayer-label-pause": "Sæt på pause",
+ "srf-ui-mediaplayer-label-next": "Næste",
+ "srf-ui-mediaplayer-label-stop": "Stop",
+ "srf-ui-mediaplayer-label-mute": "Slå lyd fra",
+ "srf-ui-mediaplayer-label-unmute": "Slå lyd til",
+ "srf-ui-mediaplayer-label-repeat": "Gentag",
+ "srf-ui-mediaplayer-label-full-screen": "Fuldskærm",
+ "srf-spreadsheet-link": "Regneark",
+ "srf-paramdesc-gantt-diagramtitle": "Diagramnavn",
+ "srf-paramdesc-gantt-diagramtheme": "Diagramtema"
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/de.json b/www/wiki/extensions/SemanticResultFormats/i18n/de.json
index 8f8c0298..a1e7d363 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/de.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/de.json
@@ -14,7 +14,6 @@
]
},
"srf-desc": "Stellt zusätzliche Ergebnisformate bereit",
- "srf-name": "Semantic Result Formats",
"prefs-srf": "Erweiterung „Semantic Result Formats“",
"srf-prefs-intro-text": "Die Erweiterung „Semantic Result Formats“ ist installiert. Besuch bitte die [https://www.semantic-mediawiki.org/wiki/Help:Ergebnisformate Hilfeseite zu Ergebnisformaten] für weitere Informationen.",
"prefs-srf-eventcalendar-options": "Optionen zum Veranstaltungskalender",
@@ -270,7 +269,6 @@
"srf-filtered-noscript-error": "Die Ergebnisse können nicht angezeigt werden, da JavaScript nicht aktiviert ist. Zu „$1“ gehen.",
"srf-filtered-noscript-link-caption": "Ergebnisse in Form einer Tabelle",
"srf-filtered-map-provider-missing-error": "Für die Kartenansicht wurde kein Kartenanbieter angegeben.",
- "srf-filtered-map-geocoordinateparser-missing-error": "Der Parser für Geokoordinaten wurde nicht gefunden. Die Bibliothek „data-values/geo“ muss hierzu installiert werden.",
"srf-filtered-value-filter-and": "UND",
"srf-filtered-value-filter-or": "ODER",
"srf-filtered-value-filter-placeholder": "Einen Wert zum Filtern auswählen",
@@ -299,10 +297,10 @@
"srf-ui-eventcalendar-label-listweek": "Woche (Liste)",
"srf-ui-eventcalendar-label-listday": "Tag (Liste)",
"srf-ui-eventcalendar-label-allday": "Gesamter Tag",
- "srf-ui-eventcalendar-format-title-week": "d. [ MMM] [ yyyy]{ '&#8212;'d. MMM yyyy}",
- "srf-ui-eventcalendar-format-title-day": "dddd, d. MMM yyyy",
- "srf-ui-eventcalendar-format-column-week": "ddd d.M.",
- "srf-ui-eventcalendar-format-column-day": "dddd d.M.",
+ "srf-ui-eventcalendar-format-title-week": "dddd, D. MMM YYYY",
+ "srf-ui-eventcalendar-format-title-day": "D. MMMM YYYY",
+ "srf-ui-eventcalendar-format-column-week": "ddd., DD.MM.",
+ "srf-ui-eventcalendar-format-column-day": "ddd., DD.MM.",
"srf-ui-eventcalendar-label-update-success": "Der Kalender wurde erfolgreich aktualisiert.",
"srf-ui-eventcalendar-label-update-error": "Die Aktualisierung der Kalenders ist gescheitert.",
"srf-ui-eventcalendar-click-popup": "Soll ein Termin erstellt werden?",
@@ -334,9 +332,24 @@
"srf-ui-mediaplayer-label-repeat-off": "Wiederholen beenden",
"srf-ui-mediaplayer-label-full-screen": "Vollbild",
"srf-ui-mediaplayer-label-restore-screen": "Bildschirm wiederherstellen",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Die Daten konnten nicht für MS-Excel exportiert werden, da die notwendige Softwareerweiterung [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] nicht installiert ist.",
- "srf-paramdesc-excel-filename": "Der Dateiname für die zum Herunterladen erzeugte Datei",
- "srf-paramdesc-excel-templatefile": "Der Name einer MS-Excel-Datei aus dem Namensraum „Datei“, der zur Formatierung der erzeugten Datei verwendet werden soll",
- "srf-paramdesc-icalendar-timezone": "Legt eine durch Kommata getrennte Liste mit Zeitzonen fest"
+ "srf-spreadsheet-link": "Datei (Tabellenkalkulation)",
+ "srf-paramdesc-spreadsheet-filename": "Legt fest, welchen Namen die zu erstellende Datei haben soll",
+ "srf-paramdesc-spreadsheet-fileformat": "Legt fest, welches Dateiformat die zu erstellende Datei haben soll. Mögliche Werte: xlsx, xls, ods, csv",
+ "srf-paramdesc-spreadsheet-templatefile": "Legt fest, wie die Tabellenkalkulationsdatei im Namensraum ''Datei'' heißt, die zur Formatierung der zu erstellende Datei verwendet werden soll.",
+ "srf-paramdesc-icalendar-timezone": "Legt eine durch Kommata getrennte Liste mit Zeitzonen fest",
+ "srf-paramdesc-gantt-diagramtitle": "Name des Diagramms",
+ "srf-paramdesc-gantt-diagramtheme": "Farbmotiv des Diagrams",
+ "srf-paramdesc-gantt-axisformat": "Formatierung der X-Achse",
+ "srf-paramdesc-gantt-sortkey": "Sortierschlüssel",
+ "srf-paramdesc-gantt-titletopmargin": "Obere Abstand des Diagrammtitels",
+ "srf-paramdesc-gantt-barheight": "Höhe der Tasks",
+ "srf-paramdesc-gantt-leftpadding": "Breite des Titels der Sections",
+ "srf-paramdesc-gantt-bargap": "Vertikaler Abstand der Tasks",
+ "srf-error-gantt-mapping-assignment": "Falsche Zuweisung der Werte in '''$1'''",
+ "srf-error-gantt-mapping-keywords": "Der verwendete Schlüssel in deinem Mapping wird nicht unterstüzt",
+ "srf-error-gantt-theme": "Diese '''theme''' wird nicht unterstützt",
+ "srf-error-gantt-sortkey": "Dieser '''sortkey''' wird nicht unterstützt",
+ "srf-error-gantt-mermaid-not-installed": "Die Mermaid Extension muss installiert sein.",
+ "srf-printername-gantt": "Diagramm (Gantt)",
+ "srf-paramdesc-nodelabel": "Legt fest, ob die Knoten der Grafik ein Beschriftung erhalten sollen. Möglicher Wert: displaytitle"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/dsb.json b/www/wiki/extensions/SemanticResultFormats/i18n/dsb.json
index 48f1e2b2..86c407d1 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/dsb.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/dsb.json
@@ -6,7 +6,6 @@
]
},
"srf-desc": "Pśidatne formaty za rědowe wótpšašanja Semantic MediaWiki",
- "srf-name": "Formaty semantiskich wuslědkow",
"srf-module-loading": "Zacytujo se...",
"srf-paramdesc-layout": "K dispoziciji stojecy layout",
"srf-paramdesc-height": "Wusokosć (w pikselach)",
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/el.json b/www/wiki/extensions/SemanticResultFormats/i18n/el.json
index 18b5de9b..c64272fd 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/el.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/el.json
@@ -13,7 +13,6 @@
]
},
"srf-desc": "Πρόσθετες μορφές αποτελεσμάτων για ερωτήματα του Σημασιολογικού MediaWiki",
- "srf-name": "Μορφές σημασιολογικών αποτελεσμάτων",
"prefs-srf": "Επέκταση:Μορφές σημασιολογικών αποτελεσμάτων",
"srf-prefs-intro-text": "Έχετε εγκαταστήσει την επέκταση Μορφές σημασιολογικών αποτελεσμάτων. Για πρόσθετη βοήθεια, παρακαλούμε επισκεφθείτε τη σελίδα βοήθειας σχετικά με τις [https://www.semantic-mediawiki.org/wiki/Help:Result_formats μορφές αποτελεσμάτων].",
"prefs-srf-eventcalendar-options": "Επιλογές ημερολογίου εκδηλώσεων",
@@ -266,7 +265,5 @@
"srf-ui-mediaplayer-label-repeat-off": "Απενεργοποίηση επανάληψης",
"srf-ui-mediaplayer-label-full-screen": "Πλήρης οθόνη",
"srf-ui-mediaplayer-label-restore-screen": "Επαναφορά οθόνης",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Δεν ήταν δυνατή η εξαγωγή για MS-Excel, επειδή η επέκταση [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] δεν είναι εγκατεστημένη.",
"srf-paramdesc-icalendar-timezone": "Μια λίστα τοπικών ωρών χωρισμένη με κόμμα?"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/en.json b/www/wiki/extensions/SemanticResultFormats/i18n/en.json
index 163ec637..57c68e5b 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/en.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/en.json
@@ -4,8 +4,8 @@
},
"srf-desc": "Additional result formats for Semantic MediaWiki queries",
"srf-name": "Semantic Result Formats",
- "prefs-srf": "Extension:Semantic Result Formats",
- "srf-prefs-intro-text": "You have installed the Semantic Result Formats extension. For additional assistance, please visit the [https://www.semantic-mediawiki.org/wiki/Help:Result_formats result formats] help page.",
+ "prefs-srf": "Semantic Result Formats",
+ "srf-prefs-intro-text": "You have installed the Semantic Result Formats extension. Please visit the [https://www.semantic-mediawiki.org/wiki/Help:Result_formats result formats] help page for additional assistance in regards to the user preferences.",
"prefs-srf-eventcalendar-options": "Event calendar options",
"srf-prefs-eventcalendar-options-update-default": "Enable [https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Automatic_updates automatic updates] of calendar events during page refresh",
"srf-prefs-eventcalendar-options-paneview-default": "Enable the pane view by default",
@@ -264,7 +264,6 @@
"srf-filtered-noscript-error": "Results can not be displayed because Javascript is not enabled. Go to $1.",
"srf-filtered-noscript-link-caption": "results in tabular form",
"srf-filtered-map-provider-missing-error": "No map provider specified for \"map\" view.",
- "srf-filtered-map-geocoordinateparser-missing-error": "Geocoordinate parser not found. You need to install 'data-values/geo'.",
"srf-filtered-value-filter-and": "AND",
"srf-filtered-value-filter-or": "OR",
"srf-filtered-value-filter-placeholder": "Select a filter value",
@@ -297,11 +296,11 @@
"srf-ui-eventcalendar-format-time-agenda": "H:mm( - H:mm)",
"srf-ui-eventcalendar-format-axis": "H:mm",
"srf-ui-eventcalendar-format-title-month": "MMMM YYYY",
- "srf-ui-eventcalendar-format-title-week": "D MMM YYYY",
- "srf-ui-eventcalendar-format-title-day": "dddd, D MMM, YYYY",
+ "srf-ui-eventcalendar-format-title-week": "MMM D, YYYY",
+ "srf-ui-eventcalendar-format-title-day": "MMMM D, YYYY",
"srf-ui-eventcalendar-format-column-month": "ddd",
- "srf-ui-eventcalendar-format-column-week": "ddd d/M",
- "srf-ui-eventcalendar-format-column-day": "dddd d/M",
+ "srf-ui-eventcalendar-format-column-week": "ddd M/D",
+ "srf-ui-eventcalendar-format-column-day": "dddd M/D",
"srf-ui-eventcalendar-label-update-success": "The event calendar update was successful.",
"srf-ui-eventcalendar-label-update-error": "The event calendar update failed.",
"srf-ui-eventcalendar-click-popup": "Do you want to create an event?",
@@ -333,9 +332,24 @@
"srf-ui-mediaplayer-label-repeat-off": "Repeat off",
"srf-ui-mediaplayer-label-full-screen": "Full screen",
"srf-ui-mediaplayer-label-restore-screen": "Restore screen",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Could not export for MS-Excel because extension [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] is not installed.",
- "srf-paramdesc-excel-filename": "The download filename for the generated file",
- "srf-paramdesc-excel-templatefile": "The name of an Excel file from the ''File'' namespace used for formatting the generated file",
- "srf-paramdesc-icalendar-timezone": "A comma separated list of timezones"
+ "srf-spreadsheet-link": "Spreadsheet",
+ "srf-paramdesc-spreadsheet-filename": "The filename for the download of the generated spreadsheet file",
+ "srf-paramdesc-spreadsheet-fileformat": "The format to be produced for the spreadsheet file. Allowed values: xlsx, xls, ods, csv. Default: xlsx",
+ "srf-paramdesc-spreadsheet-templatefile": "The name of a spreadsheet file from the ''File'' namespace used for formatting the generated file",
+ "srf-paramdesc-icalendar-timezone": "A comma separated list of timezones",
+ "srf-paramdesc-gantt-diagramtitle": "Diagram name",
+ "srf-paramdesc-gantt-diagramtheme": "Diagram theme",
+ "srf-paramdesc-gantt-axisformat": "X-axis: Date format",
+ "srf-paramdesc-gantt-sortkey": "Key to sort sections and tasks",
+ "srf-paramdesc-gantt-titletopmargin": "Top margin of the diagram title",
+ "srf-paramdesc-gantt-barheight": "Height of task bars",
+ "srf-paramdesc-gantt-leftpadding": "Width of section title",
+ "srf-paramdesc-gantt-bargap": "Vertical distance of tasks bars from the margin",
+ "srf-error-gantt-mapping-assignment": "Wrong assignment of mapped values in '''$1'''",
+ "srf-error-gantt-mapping-keywords": "The key used in your mapping parameter is not supported",
+ "srf-error-gantt-theme" : "The '''theme''' you have choosen is not supported",
+ "srf-error-gantt-sortkey" : "The '''sortkey''' you have choosen is not supported",
+ "srf-error-gantt-mermaid-not-installed": "Mermaid Extension needs to be installed.",
+ "srf-printername-gantt": "Gantt",
+ "srf-paramdesc-nodelabel": "Use a graph node label. Allowed values: displaytitle."
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/es.json b/www/wiki/extensions/SemanticResultFormats/i18n/es.json
index 0554dbcd..c0d46d9c 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/es.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/es.json
@@ -25,12 +25,12 @@
"KATRINE1992",
"Amaia",
"AVIADOR71",
- "Yllelder"
+ "Yllelder",
+ "Ciencia Al Poder"
]
},
"srf-desc": "Formatos de resultados adicionales para consultas de Semantic MediaWiki",
- "srf-name": "Formatos de resultado semántico",
- "prefs-srf": "Extensión:Formatos de resultados semánticos",
+ "prefs-srf": "Formatos de resultados semánticos",
"srf-prefs-intro-text": "Tienes instalada la extensión para dar formato a los resultados semánticos. Para obtener ayuda adicional, visita la página de ayuda sobre los [https://www.semantic-mediawiki.org/wiki/Help:Result_formats formatos de los resultados].",
"prefs-srf-eventcalendar-options": "Opciones de eventos de calendario",
"srf-prefs-eventcalendar-options-update-default": "Desactivar [https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Automatic_updates automatic updates] de eventos de calendario durante la recarga de las páginas",
@@ -217,7 +217,7 @@
"srf-ui-datatables-label-update-success": "La actualización de la tabla se realizó correctamente",
"srf-ui-datatables-label-update-error": "Falló la actualización de la tabla.",
"srf-ui-datatables-label-placeholder-column-search": "Buscar…",
- "srf-ui-datatables-label-content-cache": "El contenido se deriva de la antememoria local.",
+ "srf-ui-datatables-label-content-cache": "El contenido se deriva de la caché local.",
"srf-ui-datatables-label-content-server": "El contenido se deriva de la del servidor.",
"srf-ui-datatables-label-multiselect-column-header": "Columnas disponibles",
"srf-ui-datatables-label-multiselect-column-noneselectedtext": "Configuración de filtros",
@@ -276,7 +276,6 @@
"srf-filtered-noscript-error": "No se pueden mostrar los resultados porque JavaScript está desactivado. Visita $1.",
"srf-filtered-noscript-link-caption": "resultados en formato tabular",
"srf-filtered-map-provider-missing-error": "No se especificó ningún proveedor de mapas para la vista «map».",
- "srf-filtered-map-geocoordinateparser-missing-error": "No se encontró el analizador de coordenadas geográficas. Es necesario instalar «data-values/geo».",
"srf-filtered-value-filter-and": "Y",
"srf-filtered-value-filter-or": "O",
"srf-filtered-value-filter-placeholder": "Seleccionar un valor de filtro",
@@ -335,9 +334,6 @@
"srf-ui-mediaplayer-label-repeat-off": "Desactivar repetición",
"srf-ui-mediaplayer-label-full-screen": "Pantalla completa",
"srf-ui-mediaplayer-label-restore-screen": "Restaurar la pantalla",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "No se ha podido exportar a MS-Excel porque la extensión [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] no está instalada.",
- "srf-paramdesc-excel-filename": "El nombre de archivo de descarga del archivo generado",
- "srf-paramdesc-excel-templatefile": "El nombre de un archivo de Excel del espacio de nombres «Archivo» utilizado para dar formato al archivo generado",
+ "srf-paramdesc-spreadsheet-filename": "El nombre de descarga del archivo de hoja de cálculo generado",
"srf-paramdesc-icalendar-timezone": "Una lista de husos horarios separados por comas"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/eu.json b/www/wiki/extensions/SemanticResultFormats/i18n/eu.json
index 22e96534..4c7fd49c 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/eu.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/eu.json
@@ -5,10 +5,10 @@
"Subi",
"Mikel Ibaiba",
"Sator",
- "Amaia"
+ "Amaia",
+ "Xabier Armendaritz"
]
},
- "srf-name": "Emaitza semantikoen formatuak",
"prefs-srf": "Emaitza semantikoen formatuak",
"prefs-srf-eventcalendar-options": "Gertaera-egutegi aukerak",
"srf-module-loading": "Kargatzen...",
@@ -68,15 +68,15 @@
"srf-gallery-navigation-next": "Hurrengoa",
"srf-gallery-image-url-error": "Irudia ez da aurkitu.",
"srf_printername_tagcloud": "Hodei etiketa",
- "srf_paramdesc_increase": "Nola handiagotu etiketen tamainia",
+ "srf_paramdesc_increase": "Nola handiagotu etiketen tamaina",
"srf_paramdesc_tagorder": "Etiketen ordena",
- "srf_paramdesc_minsize": "Etiketa txikienen tamainia ehunekotan",
- "srf_paramdesc_maxsize": "Etiketa handienen tamainia ehunekotan",
+ "srf_paramdesc_minsize": "Etiketa txikienen tamaina, ehunekotan",
+ "srf_paramdesc_maxsize": "Etiketa handienen tamaina, ehunekotan",
"srf_paramdesc_maxtags": "Etiketa gehienezkoaren kantitatea hodeian",
"srf_printername_valuerank": "Balio ranking-a",
"srf-printername-graph": "Grafikoa",
"srf-paramdesc-graphname": "Grafikoaren izenburua zehazten du",
- "srf-paramdesc-graphsize": "Grafikoaren tamainia pixeletan ezartzen du",
+ "srf-paramdesc-graphsize": "Grafikoak pixeletan duen tamaina ezartzen du",
"srf-paramdesc-graphlabel": "Grafikoaren etiketa zehazten du",
"srf-paramdesc-rankdir": "Gezien norabidea zehazten du",
"srf-paramdesc-graphcolor": "Grafikoaren kolorea zehazten du",
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/fa.json b/www/wiki/extensions/SemanticResultFormats/i18n/fa.json
index 31bbff62..049f590f 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/fa.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/fa.json
@@ -150,6 +150,5 @@
"srf-ui-mediaplayer-label-shuffle-off": "غیرفعال کردن تصادفی",
"srf-ui-mediaplayer-label-repeat": "تکرار",
"srf-ui-mediaplayer-label-repeat-off": "خاموش کردن تکرار",
- "srf-ui-mediaplayer-label-full-screen": "تمام صفحه",
- "srf-excel-link": "اکسل"
+ "srf-ui-mediaplayer-label-full-screen": "تمام صفحه"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/fi.json b/www/wiki/extensions/SemanticResultFormats/i18n/fi.json
index 97c81396..beb5b648 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/fi.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/fi.json
@@ -8,12 +8,12 @@
"Pyscowicz",
"Nemo bis",
"Pahkiqaz",
- "01miki10"
+ "01miki10",
+ "Valtlait"
]
},
"srf-desc": "Muita tulosten muotoja Semantic MediaWikin kyselyille",
- "srf-name": "Semanttisten tulosten muodot",
- "prefs-srf": "Semanttisten tulosten muodot",
+ "prefs-srf": "Extension:Semanttisten tulosten muodot",
"prefs-srf-eventcalendar-options": "Tapahtumakalenterin asetukset",
"srf-module-loading": "Ladataan...",
"srf-paramdesc-layout": "Asetteluvaihtoehdot",
@@ -81,7 +81,7 @@
"srf-paramdesc-valueformat": "Määritä arvojen muotoilusäännöt",
"srf-paramdesc-stackseries": "Näytä kaavio pinottuna sarjana",
"srf-paramdesc-seriesgroup": "Valitse sarjan ryhmittely",
- "srf-paramdesc-gridview": "Näytän kaavio ja datajoukot samanaikaisesti. Sallitut arvot: none ja tabs. Oletusarvo: none.",
+ "srf-paramdesc-gridview": "Näytän kaavio ja datajoukot samanaikaisesti. Sallitut arvot: \"none\" ja \"tabs\". Oletusarvo: \"none\".",
"srf-ui-gridview-label-item": "Kohteen tiedot",
"srf-ui-gridview-label-value": "Data-arvo",
"srf-ui-gridview-label-series": "Datasarja",
@@ -106,7 +106,7 @@
"srf_paramdesc_maxtags": "Tunnisteiden enimmäismäärä pilvessä",
"srf_paramdesc_propsep": "Erotin pyydettyjen ominaisuuksien välissä",
"srf_paramdesc_manysep": "Erotin moniarvoisen ominaisuuden arvojen välillä",
- "srf_paramdesc_headersep": "Erotin ominaisuuden nimen ja arvon välissä, jos \"headers\" on \"show\" tai \"plain\"",
+ "srf_paramdesc_headersep": "Erotin ominaisuuden nimen ja arvon välissä, jos ”headers” on ”show” tai ”plain”",
"srf-printername-graph": "Graafi",
"srf-paramdesc-graph-relation": "Ovatko kohteet tai nimiominaisuudet ylätasolla vai alatasolla?",
"srf-paramdesc-graphname": "Asettaa taulukon otsikon",
@@ -118,6 +118,8 @@
"srf-ui-datatables-label-parameters": "Parametrit",
"srf-ui-datatables-label-update-success": "Taulukon päivitys onnistui",
"srf-ui-datatables-label-placeholder-column-search": "Hae...",
+ "srf-ui-datatables-label-sInfo": "Näytetään _START_ - _END_ _TOTAL_ merkinnästä",
+ "srf-ui-datatables-label-sInfoEmpty": "Näytetään 0-0 0 merkinnästä",
"srf-ui-datatables-label-sLoadingRecords": "Ladataan...",
"srf-ui-datatables-label-sProcessing": "Käsitellään...",
"srf-ui-datatables-label-sSearch": "Haku:",
@@ -129,10 +131,11 @@
"srf-printername-ultree": "Puu (luettelo)",
"srf-printername-oltree": "Puu (numeroitu)",
"srf-tree-noparentprop": "Ylätason ominaisuus puuttuu. Puuta ei voi rakentaa, jos ylätason ominaisuutta ei ole määritetty.",
+ "srf-tree-rootinvalid": "$1 ei ole kelvollinen sivun nimi.",
"srf-printername-slideshow": "Diaesitys",
"srf-paramdesc-navigation-controls": "Näytä navigointiohjaimet tai ei",
"srf-printername-filtered": "Suodatettu",
- "srf-paramdesc-filtered-list-type": "Luettelotyypit. Sallitut arvot: list, ul, ol. Oletusarvo: list.",
+ "srf-paramdesc-filtered-list-type": "Luettelotyypit. Sallitut arvot: \"list\", \"ul\", \"ol\". Oletusarvo: \"list\".",
"srf-paramdesc-filtered-list-template": "Malline, jolla luettelokohdat muotoillaan.",
"srf-paramdesc-filtered-list-introtemplate": "Ennen kyselytuloksia näytettävä mallineen nimi, jos sellaista on.",
"srf-paramdesc-filtered-list-outrotemplate": "Kyselytulosten jälkeen näytettävä mallineen nimi, jos sellaista on.",
@@ -156,7 +159,7 @@
"srf-ui-eventcalendar-label-allday": "Koko päivä",
"srf-ui-eventcalendar-click-popup": "Haluatko luoda tapahtuman?",
"srf-printername-dygraphs": "Dygraphs-kaavio",
- "srf-paramdesc-datasource": "Määritä datan tietolähteen sijainti. Sallitut arvot: \"file\", \"raw\" ja \"url\". Oletusarvo: \"file\"",
+ "srf-paramdesc-datasource": "Määritä datan tietolähteen sijainti. Sallitut arvot: ”file”, ”raw” ja ”url”. Oletusarvo: ”file”",
"srf-paramdesc-yaxislabel": "Y-akselin selite",
"srf-paramdesc-xaxislabel": "X-akselin selite",
"srf-paramdesc-unit": "Yksikkö",
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/fr.json b/www/wiki/extensions/SemanticResultFormats/i18n/fr.json
index f81f1f19..583a71b4 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/fr.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/fr.json
@@ -27,9 +27,8 @@
]
},
"srf-desc": "Formats additionnels d'affichage de résultat pour les requêtes de Semantic MediaWiki",
- "srf-name": "Formats des résultats sémantiques",
- "prefs-srf": "Formats des résultats Extension:Semantic",
- "srf-prefs-intro-text": "Vous avez installé l'extension Formats de résultats sémantiques. Pour plus d’aide, veuillez consulter la page [https://www.semantic-mediawiki.org/wiki/Help:Result_formats formats de résultat].",
+ "prefs-srf": "Formats de résultat sémantique",
+ "srf-prefs-intro-text": "Vous avez installé l’extension Formats de résultats sémantiques. Veuillez consulter la page [https://www.semantic-mediawiki.org/wiki/Help:Result_formats formats de résultat] pour une aide supplémentaire en fonction des préférences utilisateur.",
"prefs-srf-eventcalendar-options": "Options du calendrier d’événements",
"srf-prefs-eventcalendar-options-update-default": "Activer les [https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Automatic_updates mises à jour automatiques] des événements du calendrier lors d’un rafraîchissement de page",
"srf-prefs-eventcalendar-options-paneview-default": "Activer l’affichage du volet par défaut",
@@ -285,7 +284,6 @@
"srf-filtered-noscript-error": "Les résultats ne peuvent pas être affichés parce que Javascript n’est pas activé. Allez à $1.",
"srf-filtered-noscript-link-caption": "résultats sous forme tabulée",
"srf-filtered-map-provider-missing-error": "Aucun fournisseur de carte spécifié pour la vue « carte ».",
- "srf-filtered-map-geocoordinateparser-missing-error": "Analyseur de coordonnées géographiques non trouvé. Vous devez installer 'data-values/geo'.",
"srf-filtered-value-filter-and": "ET",
"srf-filtered-value-filter-or": "OU",
"srf-filtered-value-filter-placeholder": "Selectionner une valeur de filtre",
@@ -345,9 +343,24 @@
"srf-ui-mediaplayer-label-repeat-off": "Répétition désactivée",
"srf-ui-mediaplayer-label-full-screen": "Plein écran",
"srf-ui-mediaplayer-label-restore-screen": "Rétablir l'écran",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Impossible d’exporter vers MS-Excel car l’extension [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] n’est pas installée.",
- "srf-paramdesc-excel-filename": "Nom cible du fichier téléchargé correspondant au fichier généré",
- "srf-paramdesc-excel-templatefile": "Le nom d'un fichier Excel à partir de l'espace de noms \"File\" utilisé pour la mise en forme du fichier généré",
- "srf-paramdesc-icalendar-timezone": "Une liste de fuseaux horaires séparés par des virgules"
+ "srf-spreadsheet-link": "Feuille de calcul",
+ "srf-paramdesc-spreadsheet-filename": "Le nom du fichier pour le téléchargement du fichier classeur généré",
+ "srf-paramdesc-spreadsheet-fileformat": "Le format à produire pour le fichier classeur. Valeurs autorisées : xlsx, xls, ods, csv. Par défaut : xlsx",
+ "srf-paramdesc-spreadsheet-templatefile": "Le nom d’un fichier feuille de calcul de l’espace de noms « Fichier » utilisé pour mettre en forme le fichier généré",
+ "srf-paramdesc-icalendar-timezone": "Une liste de fuseaux horaires séparés par des virgules",
+ "srf-paramdesc-gantt-diagramtitle": "Nom du diagramme",
+ "srf-paramdesc-gantt-diagramtheme": "Thème du diagramme",
+ "srf-paramdesc-gantt-axisformat": "Axe X : Format de la date",
+ "srf-paramdesc-gantt-sortkey": "Clé pour trier les sections et les tâches",
+ "srf-paramdesc-gantt-titletopmargin": "Marge en haut du titre du diagramme",
+ "srf-paramdesc-gantt-barheight": "Hauteur des barres de tâche",
+ "srf-paramdesc-gantt-leftpadding": "Largeur du titre de la section",
+ "srf-paramdesc-gantt-bargap": "Distance verticale des barres de tâche depuis la marge",
+ "srf-error-gantt-mapping-assignment": "Mauvaise affectation des valeurs associées dans '''$1'''",
+ "srf-error-gantt-mapping-keywords": "La clé utilisée dans votre paramètre de correspondance n’est pas supportée",
+ "srf-error-gantt-theme": "Le '''thème''' que vous avez choisi n’est pas supporté",
+ "srf-error-gantt-sortkey": "La '''clé de tri''' que vous avez choisie n’est pas supportée",
+ "srf-error-gantt-mermaid-not-installed": "L’extension Mermaid doit être installée.",
+ "srf-printername-gantt": "Gantt",
+ "srf-paramdesc-nodelabel": "Utiliser un libellé de nœud de graphe. Valeurs autorisées : displaytitle."
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/gl.json b/www/wiki/extensions/SemanticResultFormats/i18n/gl.json
index 445f1736..34160f92 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/gl.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/gl.json
@@ -11,7 +11,6 @@
]
},
"srf-desc": "Formatos de resultados adicionais para as pescudas de Semantic MediaWiki",
- "srf-name": "Formatos dos resultados semánticos",
"prefs-srf": "Extensiónː Formatos dos resultados semánticos",
"srf-prefs-intro-text": "Ten instalada a extensión para dar formato aos resultados semánticos, pero nestes intres non ten opcións de personalización. Para obter axuda aducuibak, visite a páxina de axuda sobre os [https://www.semantic-mediawiki.org/wiki/Help:Result_formats formatos dos rexultados].",
"prefs-srf-eventcalendar-options": "Opcións de calendario de eventos",
@@ -266,7 +265,6 @@
"srf-filtered-noscript-error": "Os resultados non poden visualizarse porque o Javascript non está activado. Vaia a $1.",
"srf-filtered-noscript-link-caption": "resultados en forma de táboa",
"srf-filtered-map-provider-missing-error": "Non se indicou o provedor de mapa para a vista \"mapa\".",
- "srf-filtered-map-geocoordinateparser-missing-error": "Non foi atopado o analizador de xeocoordenadas. Precisa instalar 'data-values/geo'.",
"srf-filtered-value-filter-and": "E",
"srf-filtered-value-filter-or": "OU",
"srf-filtered-value-filter-placeholder": "Seleccionar un valor de filtro",
@@ -326,9 +324,6 @@
"srf-ui-mediaplayer-label-repeat-off": "Repetición desactivada",
"srf-ui-mediaplayer-label-full-screen": "Pantalla completa",
"srf-ui-mediaplayer-label-restore-screen": "Restablecer a pantalla",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Non pode exportarse a MS-Excel porque a extensión [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] non está instalada.",
- "srf-paramdesc-excel-filename": "O nome do ficheiro descargado correspondente ó ficheiro xerado",
- "srf-paramdesc-excel-templatefile": "O nome dun ficheiro Excel do espazo de nomes \"Ficheiro\" usado para formatar o ficheiro xerado",
+ "srf-spreadsheet-link": "Folla de cálculo",
"srf-paramdesc-icalendar-timezone": "Unha lista de fusos horarios separados por comas"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/he.json b/www/wiki/extensions/SemanticResultFormats/i18n/he.json
index 2ea809d7..7555c301 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/he.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/he.json
@@ -8,12 +8,12 @@
"Inkbug",
"Guycn2",
"Nemo bis",
- "המקיסט"
+ "המקיסט",
+ "Steeve815"
]
},
"srf-desc": "תבניות תוצאה נוספות לשאילתות של מדיה־ויקי סמנטית",
- "srf-name": "תבניות של תוצאות סמנטיות",
- "prefs-srf": "תבניות תוצאה סמנטיות",
+ "prefs-srf": "הרחבה:תבניות תוצאה סמנטיות",
"srf-prefs-intro-text": "התקנת את ההרחבה תבניות תוצאה סמנטיות (Semantic Result Formats). לעזרה נוספת נא לבקר בדף העזרה [https://www.semantic-mediawiki.org/wiki/Help:Result_formats result formats].",
"prefs-srf-eventcalendar-options": "אפשרויות יומן אירועים",
"srf-prefs-eventcalendar-options-update-default": "הפעלת [https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Automatic_updates עדכונים אוטומטיים] של אירועים ביומן בזמן רענון דף",
@@ -288,9 +288,5 @@
"srf-ui-mediaplayer-label-repeat": "חזרה",
"srf-ui-mediaplayer-label-repeat-off": "ביטול חזרה",
"srf-ui-mediaplayer-label-full-screen": "מסך מלא",
- "srf-ui-mediaplayer-label-restore-screen": "שחזור מסך",
- "srf-excel-link": "אקסל",
- "srf-excel-missing-phpexcel": "ייצוא למיקרוסופט אקסל לא יכול להתבצע, כי ההרחבה [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] אינה מותקנת.",
- "srf-paramdesc-excel-filename": "השם לקובץ המחולל להורדה",
- "srf-paramdesc-excel-templatefile": "שם קובץ האקסל מתוך מרחב קובץ לעיצוב הקובץ המחולל"
+ "srf-ui-mediaplayer-label-restore-screen": "שחזור מסך"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/hsb.json b/www/wiki/extensions/SemanticResultFormats/i18n/hsb.json
index 278ff137..2929c46e 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/hsb.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/hsb.json
@@ -6,7 +6,6 @@
]
},
"srf-desc": "Přidatne formaty za wotprašowanja Semantic MediaWiki",
- "srf-name": "Formaty semantiskich wuslědkow",
"prefs-srf": "Formaty semantiskich wuslědkow",
"srf-module-loading": "Začituje so...",
"srf-paramdesc-layout": "K dispoziciji stejacy layout",
@@ -197,6 +196,5 @@
"srf-paramdesc-excludeproperty": "Kajkosć z wuslědka wuzamknyć",
"srf-ui-mediaplayer-label-play": "Wothrać",
"srf-ui-mediaplayer-label-repeat": "Wospjetować",
- "srf-ui-mediaplayer-label-full-screen": "Połna wobrazowka",
- "srf-excel-link": "Excel"
+ "srf-ui-mediaplayer-label-full-screen": "Połna wobrazowka"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/hu.json b/www/wiki/extensions/SemanticResultFormats/i18n/hu.json
index df7cd49d..d86c56d8 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/hu.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/hu.json
@@ -11,7 +11,6 @@
]
},
"srf-desc": "További formátumok a Szemantikus MediaWiki beépített lekérdezéseihez",
- "srf-name": "Szemantikus eredményformátumok",
"srf-module-loading": "Betöltés…",
"srf-paramdesc-height": "Magasság",
"srf-paramdesc-width": "Szélesség",
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/ia.json b/www/wiki/extensions/SemanticResultFormats/i18n/ia.json
index a2f5c757..3e83dc8b 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/ia.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/ia.json
@@ -6,7 +6,6 @@
]
},
"srf-desc": "Additional formatos de resultato pro consultas de Semantic MediaWiki",
- "srf-name": "Formatos de resultatos semantic",
"srf-paramdesc-height": "Altitude",
"srf-paramdesc-width": "Latitude",
"srf-paramdesc-class": "Specifica un classe de stilos in cascada (CSS) additional",
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/it.json b/www/wiki/extensions/SemanticResultFormats/i18n/it.json
index 257515c2..5813566d 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/it.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/it.json
@@ -14,7 +14,6 @@
]
},
"srf-desc": "Formati addizionali per i risultati delle query di Semantic Mediawiki",
- "srf-name": "Formati di risultato semantici",
"prefs-srf-eventcalendar-options": "Opzioni calendario eventi",
"prefs-srf-datatables-options": "Opzioni tabelle dati",
"srf-module-loading": "Caricamento in corso...",
@@ -139,5 +138,12 @@
"srf-paramdesc-yaxislabel": "Descrizione visualizzata sull'asse y",
"srf-paramdesc-xaxislabel": "Descrizione visualizzata sull'asse x",
"srf-ui-mediaplayer-label-shuffle": "Mescola",
- "srf-paramdesc-icalendar-timezone": "Un elenco di fusi orari separati da virgole"
+ "srf-spreadsheet-link": "Foglio di calcolo",
+ "srf-paramdesc-spreadsheet-filename": "Il nome del file per il download del foglio di calcolo generato",
+ "srf-paramdesc-spreadsheet-fileformat": "Il formato file del foglio di calcolo da produrre. Valori ammessi: xlsx, xls, ods, csv. Predefinito: xlsx",
+ "srf-paramdesc-icalendar-timezone": "Un elenco di fusi orari separati da virgole",
+ "srf-paramdesc-gantt-diagramtitle": "Nome del diagramma",
+ "srf-paramdesc-gantt-diagramtheme": "Tema del diagramma",
+ "srf-paramdesc-gantt-axisformat": "Asse-X: Formato data",
+ "srf-printername-gantt": "Gantt"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/ja.json b/www/wiki/extensions/SemanticResultFormats/i18n/ja.json
index 97ad643d..4a977a05 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/ja.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/ja.json
@@ -20,7 +20,6 @@
]
},
"srf-desc": "Semantic MediaWiki のクエリのための追加的な結果の形式",
- "srf-name": "意味的結果の形式",
"prefs-srf": "意味的結果の形式",
"prefs-srf-eventcalendar-options": "イベントカレンダーオプション",
"srf-prefs-eventcalendar-options-update-default": "ページ更新中のカレンダーイベントの[https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Automatic_updates 自動更新]を有効にする",
@@ -227,6 +226,5 @@
"srf-ui-mediaplayer-label-repeat-off": "連続再生解除",
"srf-ui-mediaplayer-label-full-screen": "全画面表示",
"srf-ui-mediaplayer-label-restore-screen": "全画面表示解除",
- "srf-excel-link": "Excel",
"srf-paramdesc-icalendar-timezone": "タイムゾーンのカンマ区切りリスト"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/ko.json b/www/wiki/extensions/SemanticResultFormats/i18n/ko.json
index 6748a5de..f4ade189 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/ko.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/ko.json
@@ -11,8 +11,7 @@
]
},
"srf-desc": "시맨틱 미디어위키 쿼리용 추가 결과 포맷",
- "srf-name": "시맨틱 결과 포맷",
- "prefs-srf": "Extension:시맨틱 결과 포맷",
+ "prefs-srf": "시맨틱 결과 포맷",
"srf-prefs-intro-text": "시맨틱 결과 포맷 확장 기능을 설치하였습니다. 추가적인 도움을 받으려면 [https://www.semantic-mediawiki.org/wiki/Help:Result_formats 결과 포맷] 도움말 페이지를 방문해 주십시오.",
"prefs-srf-eventcalendar-options": "이벤트 캘린더 옵션",
"prefs-srf-datatables-options": "데이터테이블 옵션",
@@ -188,7 +187,6 @@
"srf-filtered-noscript-error": "자바스크립트를 사용하지 않고 있기 때문에 결과를 표시할 수 없습니다. $1 문서로 이동합니다.",
"srf-filtered-noscript-link-caption": "표 형식의 결과",
"srf-filtered-map-provider-missing-error": "\"map\" 뷰에 지도 제공자를 지정하지 않았습니다.",
- "srf-filtered-map-geocoordinateparser-missing-error": "지리좌표 파서를 찾을 수 없습니다. 'data-values/geo'를 설치해야 합니다.",
"srf-filtered-value-filter-and": "그리고",
"srf-filtered-value-filter-or": "또는",
"srf-filtered-value-filter-placeholder": "필터 값을 선택하세요",
@@ -217,6 +215,7 @@
"srf-ui-eventcalendar-format-column-week": "M/d ddd",
"srf-ui-eventcalendar-format-column-day": "M/d dddd",
"srf-ui-eventcalendar-click-popup": "이벤트를 만드시겠습니까?",
+ "srf-paramdesc-datasource": "데이터 접근이 가능한 출처입니다. 허용된 값: \"file\", \"raw\", \"url\". 기본값: \"file\"",
"srf-paramdesc-yaxislabel": "y축에 표시되는 설명",
"srf-paramdesc-xaxislabel": "x축에 표시되는 설명",
"srf-paramdesc-unit": "단위",
@@ -240,8 +239,13 @@
"srf-ui-mediaplayer-label-repeat-off": "반복 해제",
"srf-ui-mediaplayer-label-full-screen": "전체 화면",
"srf-ui-mediaplayer-label-restore-screen": "화면 복구",
- "srf-excel-link": "엑셀",
- "srf-excel-missing-phpexcel": "확장 기능 [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel]이 설치되어 있지 않으므로 MS 액셀로 내보낼 수 없습니다.",
- "srf-paramdesc-excel-filename": "생성된 파일의 다운로드 파일 이름",
- "srf-paramdesc-icalendar-timezone": "쉼표 구분 시간대 목록"
+ "srf-spreadsheet-link": "스프레드시트",
+ "srf-paramdesc-spreadsheet-filename": "다운로드를 위해 생성된 스프레드시트 파일의 파일 이름",
+ "srf-paramdesc-spreadsheet-templatefile": "생성된 파일의 서식을 제공하기 위한 \"파일\" 이름공간의 스프레드시트 파일의 이름입니다",
+ "srf-paramdesc-icalendar-timezone": "쉼표 구분 시간대 목록",
+ "srf-paramdesc-gantt-diagramtitle": "다이어그램 이름",
+ "srf-paramdesc-gantt-diagramtheme": "다이어그램 테마",
+ "srf-paramdesc-gantt-axisformat": "X축: 날짜 형식",
+ "srf-error-gantt-mermaid-not-installed": "Mermaid 확장 기능의 설치가 필요합니다.",
+ "srf-printername-gantt": "간트"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/lb.json b/www/wiki/extensions/SemanticResultFormats/i18n/lb.json
index eeb881e2..11f0a5b0 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/lb.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/lb.json
@@ -5,7 +5,6 @@
"Nemo bis"
]
},
- "srf-name": "Formate vu semantesche Resultater",
"prefs-srf-eventcalendar-options": "Optioune vum Kalenner vun den Eventementer",
"prefs-srf-datatables-options": "Optioune vun den Tabelle vun Donnéeën",
"srf-module-loading": "Lueden...",
@@ -132,5 +131,6 @@
"srf-ui-mediaplayer-label-previous": "Vireg",
"srf-ui-mediaplayer-label-pause": "Paus",
"srf-ui-mediaplayer-label-stop": "Stopp",
- "srf-excel-link": "Excel"
+ "srf-paramdesc-gantt-diagramtitle": "Numm vum Diagramm",
+ "srf-printername-gantt": "Gantt"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/lt.json b/www/wiki/extensions/SemanticResultFormats/i18n/lt.json
index 842a4700..601ea992 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/lt.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/lt.json
@@ -171,6 +171,5 @@
"srf-ui-mediaplayer-label-repeat-off": "Nekartoti",
"srf-ui-mediaplayer-label-full-screen": "Visas ekranas",
"srf-ui-mediaplayer-label-restore-screen": "Atkurti ekraną",
- "srf-excel-missing-phpexcel": "Nepavyko eksportuoti MS-Excel, nes plėtinys [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] nėra instaliuotas.",
- "srf-paramdesc-excel-filename": "Sugeneruoto failo atsiuntimo pavadinimas"
+ "srf-spreadsheet-link": "Skaičiuoklė"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/mk.json b/www/wiki/extensions/SemanticResultFormats/i18n/mk.json
index e6b5dc60..28a6dfe8 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/mk.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/mk.json
@@ -2,11 +2,11 @@
"@metadata": {
"authors": [
"Bjankuloski06",
- "Nemo bis"
+ "Nemo bis",
+ "Vlad5250"
]
},
"srf-desc": "Дополнителни формати на исходот за барања од Семантички МедијаВики",
- "srf-name": "Формати на семантички исход",
"prefs-srf": "Додаток:Формати на семантички исход",
"srf-prefs-intro-text": "Го воспоставивте додатокот „Формати на семантички исход“. Дополнителна помош ќе добиете на страницата за [https://www.semantic-mediawiki.org/wiki/Help:Result_formats формати на исходот].",
"prefs-srf-eventcalendar-options": "Поставки на Календарот на настани",
@@ -166,13 +166,13 @@
"srf_printername_hash": "Тараба",
"srf_paramdesc_hashname": "Ако е зададено, а на располагање е додатокот зе тарабни табели (HashTables), ова ќе создаде тараба со наведеното име (тогаш нема да има видлив извод)",
"srf-printername-graph": "Графикон",
- "srf-paramdesc-graph-relation": "Дали предметите или именските својства се матични или зависни?",
- "srf-paramdesc-graph-nameprop": "Овозможува задавање на својство што ќе се користи како предмет наместо фактичкиот предмет",
- "srf-paramdesc-graph-nodeshape": "Обликот на секој јазол во графиконот",
- "srf-paramdesc-graphname": "Наслов",
- "srf-paramdesc-graphsize": "Големина на графиконот (во пиксели)",
- "srf-paramdesc-graphlegend": "Дали да се прикажува легенда за графиконот",
- "srf-paramdesc-graphlabel": "Натпис на графиконот",
+ "srf-paramdesc-graph-relation": "Одредете дали предметите или именските својства се матични или зависни",
+ "srf-paramdesc-graph-nameprop": "Го задава својството што ќе се користи како предмет наместо фактичкиот предмет, т.е. име на страницата",
+ "srf-paramdesc-graph-nodeshape": "Го задава обликот на секој јазол во графиконот",
+ "srf-paramdesc-graphname": "Го задава насловот на графиконот",
+ "srf-paramdesc-graphsize": "Ја задава големината на графиконот во пиксели",
+ "srf-paramdesc-graphlegend": "Одредете дали да се прикажува легенда за графиконот",
+ "srf-paramdesc-graphlabel": "Го задава натписот на графиконот",
"srf-paramdesc-rankdir": "Правец на стрелката",
"srf-paramdesc-graphlink": "Врска за графиконот",
"srf-paramdesc-graphcolor": "Боја на графиконот",
@@ -237,6 +237,7 @@
"srf-filtered-selectorlabel-map": "Карта",
"srf-filtered-value-filter-and": "И",
"srf-filtered-value-filter-or": "ИЛИ",
+ "srf-filtered-value-filter-placeholder": "Изберете филтерска вредност",
"srf-printername-d3chart": "D3-графикон",
"srf-printername-timeseries": "Графикон на временска низа",
"srf-paramdesc-group": "Групирање на низата според",
@@ -295,9 +296,8 @@
"srf-ui-mediaplayer-label-repeat-off": "Искл. повторување",
"srf-ui-mediaplayer-label-full-screen": "На цел екран",
"srf-ui-mediaplayer-label-restore-screen": "Поврати екран",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Не можев да извезам за MS-Excel бидејќи не е воспоставен додатокот [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel].",
- "srf-paramdesc-excel-filename": "Податотечното име за преземање на создадената податотека.",
- "srf-paramdesc-excel-templatefile": "Назив на Excel-податотеката од именскиот простор „Податотека“ што служи за форматирање на создадената податотека",
- "srf-paramdesc-icalendar-timezone": "Список на часовни појаси одделени со запирки"
+ "srf-spreadsheet-link": "Табела",
+ "srf-paramdesc-icalendar-timezone": "Список на часовни појаси одделени со запирки",
+ "srf-paramdesc-gantt-diagramtitle": "Име на дијаграмот",
+ "srf-paramdesc-gantt-diagramtheme": "Тема на дијаграмот"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/nb.json b/www/wiki/extensions/SemanticResultFormats/i18n/nb.json
index 3a5aa301..1684ef06 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/nb.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/nb.json
@@ -11,7 +11,6 @@
]
},
"srf-desc": "Tilleggsformater for Semantic MediaWiki-spørringer",
- "srf-name": "Semantisk resultatformat",
"prefs-srf": "Extenison:Semantic Result Formats",
"srf-prefs-intro-text": "Du har installert utvidelsen Semantic Result Formats. For ytterligere assistanse kan du se på [https://www.semantic-mediawiki.org/wiki/Help:Result_formats result formats] hjelpsiden.",
"prefs-srf-eventcalendar-options": "Valgmuligheter i hendelseskalenderen.",
@@ -301,9 +300,5 @@
"srf-ui-mediaplayer-label-shuffle-off": "Miks av",
"srf-ui-mediaplayer-label-repeat": "Repeter",
"srf-ui-mediaplayer-label-repeat-off": "Repeter av",
- "srf-ui-mediaplayer-label-full-screen": "Fullskjerm",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Kunne ikke eksportere for MS-Excel fordi utvidelsen [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] ikke er installert.",
- "srf-paramdesc-excel-filename": "Nedlastingsfilnavnet for den genererte fila",
- "srf-paramdesc-excel-templatefile": "Navnet på en Excel-fil fra «File»-navnerommet som brukes for å formatere den genererte fila"
+ "srf-ui-mediaplayer-label-full-screen": "Fullskjerm"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/nl.json b/www/wiki/extensions/SemanticResultFormats/i18n/nl.json
index 6ccf786a..a96cbc09 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/nl.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/nl.json
@@ -16,11 +16,11 @@
"Festina90",
"Mar(c)",
"Patio",
- "KlaasZ4usV"
+ "KlaasZ4usV",
+ "Elderson"
]
},
"srf-desc": "Extra resultaatopmaken voor zoekopdrachten van Semantic MediaWiki",
- "srf-name": "Semantische resultaatopmaken",
"prefs-srf": "Semantische resultaatopmaken",
"srf-prefs-intro-text": "U hebt de uitbreiding Semantic Result Formats geïnstalleerd. Raadpleeg de hulppagina voor [https://www.semantic-mediawiki.org/wiki/Help:Result_formats resultaatopmaken] voor meer informatie.",
"srf-module-loading": "Bezig met laden…",
@@ -216,6 +216,7 @@
"srf-filtered-selectorlabel-list": "Lijst",
"srf-filtered-selectorlabel-table": "Tabel",
"srf-filtered-selectorlabel-calendar": "Kalender",
+ "srf-filtered-selectorlabel-map": "Kaart",
"srf-filtered-noscript-error": "De resulaten kunnen niet worden weergegeven omdat JavaScript niet is ingeschakeld. Ga naar $1.",
"srf-filtered-value-filter-and": "EN",
"srf-filtered-value-filter-or": "OF",
@@ -270,6 +271,6 @@
"srf-ui-mediaplayer-label-repeat-off": "Herhalen uit",
"srf-ui-mediaplayer-label-full-screen": "Volledig scherm",
"srf-ui-mediaplayer-label-restore-screen": "Scherm herstellen",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Kan niet naar Microsoft Excel exporteren omdat de uitbreiding [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] niet is geïnstalleerd."
+ "srf-paramdesc-spreadsheet-filename": "De bestandsnaam voor het downloaden van de gegenereerde speadsheet",
+ "srf-paramdesc-spreadsheet-fileformat": "De bestandsindeling voor de spreadsheet. Mogelijke waarden: xlsx, xls, ods en csv. Standaard: xlsx."
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/oc.json b/www/wiki/extensions/SemanticResultFormats/i18n/oc.json
index d7bd7926..cd599746 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/oc.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/oc.json
@@ -8,7 +8,6 @@
]
},
"srf-desc": "Formats adicionals d'afichatge de resultat per las requèstas de Semantic MediaWiki",
- "srf-name": "Formatatge dels resultats semantics",
"prefs-srf-datatables-options": "Opcions de las plajas de donadas",
"srf-module-loading": "Cargament…",
"srf-paramdesc-layout": "Mesa en pagina disponibla",
@@ -132,6 +131,5 @@
"srf-ui-mediaplayer-label-unmute": "Pas mut",
"srf-ui-mediaplayer-label-volume-max": "Volum maximal",
"srf-ui-mediaplayer-label-shuffle": "Lectura aleatòria",
- "srf-ui-mediaplayer-label-repeat": "Repetir",
- "srf-excel-link": "Excel"
+ "srf-ui-mediaplayer-label-repeat": "Repetir"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/pl.json b/www/wiki/extensions/SemanticResultFormats/i18n/pl.json
index 50644378..f9adc7a4 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/pl.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/pl.json
@@ -14,7 +14,6 @@
]
},
"srf-desc": "Dodatkowe formaty dla zapytań Semantycznej MediaWiki",
- "srf-name": "Formaty semantycznych wyników",
"prefs-srf-eventcalendar-options": "Opcje kalendarza wydarzeń",
"prefs-srf-datatables-options": "Ustawienia tabel danych",
"srf-module-loading": "Ładowanie...",
@@ -214,7 +213,5 @@
"srf-ui-mediaplayer-label-repeat-off": "Powtarzanie wyłączone",
"srf-ui-mediaplayer-label-full-screen": "Pełny ekran",
"srf-ui-mediaplayer-label-restore-screen": "Przywróć ekran",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Nie można eksportować do MS Excel, ponieważ rozszerzenie [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] nie jest zainstalowane.",
"srf-paramdesc-icalendar-timezone": "Lista stref czasowych przedzielana przecinkami"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/pms.json b/www/wiki/extensions/SemanticResultFormats/i18n/pms.json
index cc3ca707..f5d6168a 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/pms.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/pms.json
@@ -8,7 +8,6 @@
]
},
"srf-desc": "Formà adissionaj për anterogassion an linia ëd Semantic MediaWiki",
- "srf-name": "Formà dj'Arzultà Semàntich",
"prefs-srf": "Formà dj'Arzultà Semàntich",
"srf-prefs-intro-text": "A l'ha anstalà l'estension Formà dj'Arzultà Semàntich che al moment a l'ha gnun-e opsion utent përsonalisabij. Për assistensa, për piasì, ch'a vìsita la pagina d'agiut [http://www.semantic-mediawiki.org/wiki/Help:Result_formats formà dj'arzultà]",
"srf-module-loading": "A caria ...",
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/pt-br.json b/www/wiki/extensions/SemanticResultFormats/i18n/pt-br.json
index f591b665..b51e0522 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/pt-br.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/pt-br.json
@@ -10,12 +10,12 @@
"!Silent",
"Nemo bis",
"Eduardo Addad de Oliveira",
- "Trigonometria87"
+ "Trigonometria87",
+ "Andrecpe"
]
},
"srf-desc": "Formatos adicionais de resultado para consultas do Semantic MediaWiki",
- "srf-name": "Semantic Result Formats",
- "prefs-srf": "Extensão:Semantic Result Formats",
+ "prefs-srf": "Semantic Result Formats",
"srf-prefs-intro-text": "Você instalou a extensão Semantic Result Formats. Para mais informações, por favor visite as [https://www.semantic-mediawiki.org/wiki/Help:Result_formats páginas de ajuda dos formatos de resultado].",
"prefs-srf-eventcalendar-options": "Opções do calendário de eventos",
"srf-prefs-eventcalendar-options-update-default": "Habilitar as [https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Automatic_updates atualizações automáticas] dos eventos de calendário durante a atualização da página",
@@ -272,7 +272,6 @@
"srf-filtered-noscript-error": "Os resultados não podem ser apresentados porque o Javascript não está ativado. Visite $1.",
"srf-filtered-noscript-link-caption": "Resultados em forma de tabela",
"srf-filtered-map-provider-missing-error": "Nenhum fornecedor de mapa especificado para exibição de \"mapa\".",
- "srf-filtered-map-geocoordinateparser-missing-error": "Não foi encontrado o analisador de geocoordenadas. Precisa de instalar 'data_values/geo'.",
"srf-filtered-value-filter-and": "E",
"srf-filtered-value-filter-or": "OU",
"srf-filtered-value-filter-placeholder": "Selecionar um valor de filtro",
@@ -301,6 +300,8 @@
"srf-ui-eventcalendar-label-listweek": "Semana (lista)",
"srf-ui-eventcalendar-label-listday": "Dia (lista)",
"srf-ui-eventcalendar-label-allday": "O dia todo",
+ "srf-ui-eventcalendar-format-title-week": "MMM D, AAAA",
+ "srf-ui-eventcalendar-format-title-day": "MMMM D, AAAA",
"srf-ui-eventcalendar-label-update-success": "A atualização do calendário de eventos foi executada com êxito.",
"srf-ui-eventcalendar-label-update-error": "A atualização do calendário de eventos falhou.",
"srf-ui-eventcalendar-click-popup": "Deseja criar um evento?",
@@ -332,9 +333,24 @@
"srf-ui-mediaplayer-label-repeat-off": "Desativar repetição",
"srf-ui-mediaplayer-label-full-screen": "Tela inteira",
"srf-ui-mediaplayer-label-restore-screen": "Restaurar tela",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Não foi possível exportar para MS-Excel porque a extensão [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] não está instalada.",
- "srf-paramdesc-excel-filename": "O nome do arquivo para baixar do arquivo gerado",
- "srf-paramdesc-excel-templatefile": "O nome de um arquivo Excel do domínio \"File (Arquivo)\", usado para formatar o arquivo gerado",
- "srf-paramdesc-icalendar-timezone": "Uma lista de fusos horários, separados por vírgulas"
+ "srf-spreadsheet-link": "Planilha",
+ "srf-paramdesc-spreadsheet-filename": "O nome de arquivo para o download da folha de cálculo gerada.",
+ "srf-paramdesc-spreadsheet-fileformat": "O formato a ser produzido para o arquivo da folha de cálculo. Os valores permitidos são: xlsx, xls, ods, csv. Por omissão: xlsx",
+ "srf-paramdesc-spreadsheet-templatefile": "O nome de um arquivo de planilha do namespace ''Arquivo'' usado para formatar o arquivo gerado",
+ "srf-paramdesc-icalendar-timezone": "Uma lista de fusos horários, separados por vírgulas",
+ "srf-paramdesc-gantt-diagramtitle": "Nome do diagrama",
+ "srf-paramdesc-gantt-diagramtheme": "Tema do diagrama",
+ "srf-paramdesc-gantt-axisformat": "X-axis: Formato de data",
+ "srf-paramdesc-gantt-sortkey": "Chave para ordenar sessões e tarefas",
+ "srf-paramdesc-gantt-titletopmargin": "Margem superior do título do diagrama",
+ "srf-paramdesc-gantt-barheight": "Altura das barras de tarefas",
+ "srf-paramdesc-gantt-leftpadding": "Largura do título da seção",
+ "srf-paramdesc-gantt-bargap": "Distância vertical das barras de tarefas para a margem",
+ "srf-error-gantt-mapping-assignment": "Atribuição errada de valores mapeados em '''$1'''",
+ "srf-error-gantt-mapping-keywords": "A chave usada em seu parâmetro de mapeamento não é suportada",
+ "srf-error-gantt-theme": "O '''tema''' escolhido não é suportado",
+ "srf-error-gantt-sortkey": "A '''sortkey''' que você escolheu não é suportado",
+ "srf-error-gantt-mermaid-not-installed": "A Extensão Mermaid precisa ser instalado.",
+ "srf-printername-gantt": "Gantt",
+ "srf-paramdesc-nodelabel": "Use um rótulo de nó de gráfico. Valores permitidos: displaytitle."
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/pt.json b/www/wiki/extensions/SemanticResultFormats/i18n/pt.json
index b3aa08c1..5e1832e8 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/pt.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/pt.json
@@ -9,11 +9,11 @@
"Macofe",
"Ngl2016",
"Nemo bis",
- "Athena in Wonderland"
+ "Athena in Wonderland",
+ "Waldyrious"
]
},
"srf-desc": "Formatos adicionais de resultados para consultas do MediaWiki Semântico",
- "srf-name": "Formatos dos resultados semânticos",
"prefs-srf": "Extension:Formatos dos resultados semânticos",
"srf-prefs-intro-text": "Tem instalada a extensão Formatos dos Resultados Semânticos. Para ajuda adicional, visite a página de ajuda [https://www.semantic-mediawiki.org/wiki/Help:Result_formats formatos de resultados], por favor.",
"prefs-srf-eventcalendar-options": "Opções do calendário de eventos",
@@ -270,7 +270,6 @@
"srf-filtered-noscript-error": "Os resultados não podem ser apresentados porque o Javascript não está ativado. Visite $1.",
"srf-filtered-noscript-link-caption": "resultados em forma de tabela",
"srf-filtered-map-provider-missing-error": "Não foi especificado um fornecedor de mapas para a vista \"mapa\".",
- "srf-filtered-map-geocoordinateparser-missing-error": "Não foi encontrado o analisador de geocoordenadas. Precisa de instalar 'data-values/geo'.",
"srf-filtered-value-filter-and": "E",
"srf-filtered-value-filter-or": "OU",
"srf-filtered-value-filter-placeholder": "Selecionar um valor de filtro",
@@ -330,9 +329,24 @@
"srf-ui-mediaplayer-label-repeat-off": "Não repetir",
"srf-ui-mediaplayer-label-full-screen": "Ecrã completo",
"srf-ui-mediaplayer-label-restore-screen": "Restaurar o ecrã",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Não foi possível exportar para MS-Excel porque a extensão [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] não está instalada.",
- "srf-paramdesc-excel-filename": "O nome de ficheiro para descarregamento do ficheiro gerado",
- "srf-paramdesc-excel-templatefile": "O nome de um ficheiro Excel do espaço nominal \"Ficheiro\", usado para formatar o ficheiro gerado",
- "srf-paramdesc-icalendar-timezone": "Uma lista de fusos horários, separados por vírgulas"
+ "srf-spreadsheet-link": "Folha de cálculo",
+ "srf-paramdesc-spreadsheet-filename": "O nome de ficheiro para o descarregamento da folha de cálculo gerada.",
+ "srf-paramdesc-spreadsheet-fileformat": "O formato a ser produzido para o ficheiro da folha de cálculo. Os valores permitidos são: xlsx, xls, ods, csv. Por omissão: xlsx",
+ "srf-paramdesc-spreadsheet-templatefile": "O nome de ficheiro de uma folha de cálculo no espaço nominal/domínio ''Ficheiro'', usado para formatar o ficheiro gerado",
+ "srf-paramdesc-icalendar-timezone": "Uma lista de fusos horários, separados por vírgulas",
+ "srf-paramdesc-gantt-diagramtitle": "Nome do diagrama",
+ "srf-paramdesc-gantt-diagramtheme": "Tema do diagrama",
+ "srf-paramdesc-gantt-axisformat": "Eixo dos x: Formato de data",
+ "srf-paramdesc-gantt-sortkey": "Chave para ordenar secções e tarefas",
+ "srf-paramdesc-gantt-titletopmargin": "Margem superior do título do diagrama",
+ "srf-paramdesc-gantt-barheight": "Altura das barras de tarefas",
+ "srf-paramdesc-gantt-leftpadding": "Largura do título da secção",
+ "srf-paramdesc-gantt-bargap": "Distância vertical das barras de tarefas para a margem",
+ "srf-error-gantt-mapping-assignment": "Atribuição errada de valores mapeados em '''$1'''",
+ "srf-error-gantt-mapping-keywords": "A chave usada no seu parâmetro de mapeamento não é suportada",
+ "srf-error-gantt-theme": "O '''tema''' que escolheu não é suportado",
+ "srf-error-gantt-sortkey": "A '''chave de ordenação''' que escolheu não é suportada",
+ "srf-error-gantt-mermaid-not-installed": "A extensão Mermaid precisa de ser instalada.",
+ "srf-printername-gantt": "Gantt",
+ "srf-paramdesc-nodelabel": "Usar um rótulo de vértice de grafo. Valores permitidos: displaytitle."
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/qqq.json b/www/wiki/extensions/SemanticResultFormats/i18n/qqq.json
index 21b8ea8d..fd3182d2 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/qqq.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/qqq.json
@@ -281,7 +281,6 @@
"srf-filtered-noscript-error": "This is an informatory message.\n\nParameter:\n* $1 - holds the name of a page",
"srf-filtered-noscript-link-caption": "This is the caption of a link.",
"srf-filtered-map-provider-missing-error": "This is an error message for a missing setting.",
- "srf-filtered-map-geocoordinateparser-missing-error": "This is an error message when the 'data-values/geo' is missing.",
"srf-filtered-value-filter-and": "Label of the radio button selecting AND behavior of the value filter.",
"srf-filtered-value-filter-or": "Label of the radio button selecting OR behavior of the value filter.",
"srf-filtered-value-filter-placeholder": "Placeholder text for the value filter input",
@@ -350,9 +349,24 @@
"srf-ui-mediaplayer-label-repeat-off": "{{Doc-smw-ui-label-media|repeat-off}}",
"srf-ui-mediaplayer-label-full-screen": "{{Doc-smw-ui-label-media|full-screen}}\n{{Identical|Full screen}}",
"srf-ui-mediaplayer-label-restore-screen": "{{Doc-smw-ui-label-media|restore-screen}}",
- "srf-excel-link": "{{doc-smw-link}}",
- "srf-excel-missing-phpexcel": "This is an error message.",
- "srf-paramdesc-excel-filename": "{{doc-paramdesc|filename}}",
- "srf-paramdesc-excel-templatefile": "{{doc-paramdesc|templatefile}}",
- "srf-paramdesc-icalendar-timezone": "{{doc-paramdesc|timezone}}"
+ "srf-spreadsheet-link": "{{doc-smw-link}}",
+ "srf-paramdesc-spreadsheet-filename": "{{doc-paramdesc|filename}}",
+ "srf-paramdesc-spreadsheet-fileformat": "{{doc-paramdesc|fileformat}}",
+ "srf-paramdesc-spreadsheet-templatefile": "{{doc-paramdesc|templatefile}}",
+ "srf-paramdesc-icalendar-timezone": "{{doc-paramdesc|timezone}}",
+ "srf-paramdesc-gantt-diagramtitle": "{{doc-paramdesc|diagram}}",
+ "srf-paramdesc-gantt-diagramtheme": "{{doc-paramdesc|theme}}",
+ "srf-paramdesc-gantt-axisformat": "{{doc-paramdesc|axisformat}}",
+ "srf-paramdesc-gantt-sortkey": "{{doc-paramdesc|sortkey}}",
+ "srf-paramdesc-gantt-titletopmargin": "{{doc-paramdesc|titletopmargin}}",
+ "srf-paramdesc-gantt-barheight": "{{doc-paramdesc|barheight}}",
+ "srf-paramdesc-gantt-leftpadding": "{{doc-paramdesc|leftpadding}}",
+ "srf-paramdesc-gantt-bargap": "{{doc-paramdesc|bargap}}",
+ "srf-error-gantt-mapping-assignment": "This is an error message.",
+ "srf-error-gantt-mapping-keywords": "This is an error message.",
+ "srf-error-gantt-theme": "This is an error message.",
+ "srf-error-gantt-sortkey": "This is an error message.",
+ "srf-error-gantt-mermaid-not-installed": "This is an error message.",
+ "srf-printername-gantt": "{{doc-smwformat|gantt}}",
+ "srf-paramdesc-nodelabel": "{{doc-paramdesc|nodelabel}}\n{{doc-important|Do not translate the possible parameters: \"displaytitle\".}}"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/roa-tara.json b/www/wiki/extensions/SemanticResultFormats/i18n/roa-tara.json
index 785d5849..439327dc 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/roa-tara.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/roa-tara.json
@@ -4,7 +4,7 @@
"Joetaras"
]
},
- "prefs-srf": "Extension:Semantic Result Formats",
+ "prefs-srf": "Formate d'u resultate semandeche",
"srf-module-loading": "Stoche a scareche…",
"srf-paramdesc-height": "Altezze",
"srf-paramdesc-width": "Larghezze",
@@ -83,5 +83,15 @@
"srf-ui-mediaplayer-label-unmute": "Cu 'a vôsce",
"srf-ui-mediaplayer-label-volume-max": "Volume massime",
"srf-ui-mediaplayer-label-shuffle": "Miscke",
- "srf-excel-link": "Excel"
+ "srf-spreadsheet-link": "Fogghie de calcole",
+ "srf-paramdesc-gantt-diagramtitle": "Nome d'u diagramme",
+ "srf-paramdesc-gantt-diagramtheme": "Teme d'u diagramme",
+ "srf-paramdesc-gantt-axisformat": "Asse de le X: Formate de le date",
+ "srf-paramdesc-gantt-sortkey": "Chiave pe ordenà le seziune e le attività",
+ "srf-paramdesc-gantt-titletopmargin": "Margine de sus d'u titole d'u diagramme",
+ "srf-paramdesc-gantt-barheight": "Iertezze de le barre de le attività",
+ "srf-paramdesc-gantt-bargap": "Distanze verticale de le barre de le attività da 'u margine",
+ "srf-error-gantt-mapping-keywords": "'A chiave ausate jndr'à 'u parametre de mappature non g'è supportate",
+ "srf-error-gantt-sortkey": "'A '''chiave de ordinamende''' ca è scacchiate non g'è supportate",
+ "srf-printername-gantt": "Gantt"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/ru.json b/www/wiki/extensions/SemanticResultFormats/i18n/ru.json
index 6404aee9..81be5238 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/ru.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/ru.json
@@ -14,13 +14,16 @@
"Redredsonia",
"Nemo bis",
"Putnik",
- "Vlad5250"
+ "Vlad5250",
+ "Nk88",
+ "Romanko Mikhail",
+ "Diralik",
+ "Movses"
]
},
"srf-desc": "Дополнительные форматы вывода для запросов Semantic MediaWiki",
- "srf-name": "Semantic Result Formats",
- "prefs-srf": "Extension:Semantic Result Formats",
- "srf-prefs-intro-text": "У вас установлено расширение «Semantic Result Formats». Для получения дополнительной помощи, пожалуйста, посетите страницу [http://www.semantic-mediawiki.org/wiki/Help:Форматы_вывода Форматы вывода].",
+ "prefs-srf": "Форматы семантического вывода",
+ "srf-prefs-intro-text": "Расширение «Форматы семантического вывода» установлено. Для дополнительной информации вы можете ознакомиться со страницей [https://www.semantic-mediawiki.org/wiki/Help:Result_formats «Форматы вывода»].",
"prefs-srf-eventcalendar-options": "Календарь событий параметры",
"srf-prefs-eventcalendar-options-update-default": "Включить [https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Automatic_updates автоматическое обновление] событий календаря при обновлении страницы",
"srf-prefs-eventcalendar-options-paneview-default": "Включить по умолчанию вид клеточками",
@@ -131,7 +134,7 @@
"srf-paramdesc-serieslabel": "Определите ярлык серии",
"srf-paramdesc-grouplabel": "Определите ярлык группы",
"srf-paramdesc-chartcursor": "Параметры отображения указателя диаграммы",
- "srf-paramdesc-trendline": "Включить одновременное отображение диаграммы и ее линии тренда",
+ "srf-paramdesc-trendline": "Включить одновременное отображение диаграммы и её линии тренда",
"srf-paramdesc-gridview": "Отобразить диаграмму и наборы данных одновременно. Допустимые значения: «none» и «tabs». По умолчанию: «none»",
"srf-paramdesc-paneview": "Указать положение панели с небольшим линейным графиком. Допустимые значения: \"bottom\", \"top\" и \"none\". По умолчанию: \"bottom\"",
"srf-paramdesc-infotext": "Отображать дополнительную информацию на соответствующей вкладке",
@@ -177,17 +180,19 @@
"srf_printername_hash": "Хэш",
"srf_paramdesc_hashname": "Если указано, и доступно расширение Hash Tables, это создаст хэш поданному названием (ни видимого выхода)",
"srf-printername-graph": "График",
- "srf-paramdesc-graph-relation": "Предметы или свойства названий родительские или дочерние?",
- "srf-paramdesc-graph-nameprop": "Позволяет установить свойство, которое будет использовано как предмет вместо нынешнего предмета",
+ "srf-paramdesc-graph-relation": "Определяет, являются ли предметы или свойства названий родительскими или дочерними",
+ "srf-paramdesc-graph-nameprop": "Позволяет установить свойство, которое будет использовано как предмет вместо нынешнего предмета, то есть названия страницы",
"srf-paramdesc-graph-nodeshape": "Устанавливает форму каждого узла графа",
"srf-paramdesc-graphname": "Устанавливает заголовок графа",
"srf-paramdesc-graphsize": "Устанавливает размер графа (в пикселях)",
- "srf-paramdesc-graphlegend": "Показывать легенду или нет?",
- "srf-paramdesc-graphlabel": "Подпись графы",
+ "srf-paramdesc-graphlegend": "Определяет, следует ли показывать легенду",
+ "srf-paramdesc-graphlabel": "Устанавливает подпись графа",
"srf-paramdesc-rankdir": "Устанавливает направление стрелок",
- "srf-paramdesc-graphlink": "Ссылка графы",
- "srf-paramdesc-graphcolor": "Цвет графы",
- "srf-paramdesc-graph-wwl": "Предел переноса слов (в # символов)",
+ "srf-paramdesc-graphlink": "Определяет, должны ли узлы ссылаться на их вики-страницы",
+ "srf-paramdesc-graphcolor": "Устанавливает цвет графа",
+ "srf-paramdesc-graph-wwl": "Определяет предел переноса слов (в символах)",
+ "srf-paramdesc-clustercolor": "Устанавливает цвета блоков кластера",
+ "srf-paramdesc-highlightcolor": "Устанавливает цвет шрифта для выделенного узла",
"srf-paramdesc-redlinkcolor": "Задать цвет шрифта для красных ссылок",
"srf-printername-datatables": "Таблицы данных",
"srf-ui-datatables-label-conditions": "Условия",
@@ -243,11 +248,23 @@
"srf-paramdesc-filtered-calendar-end": "Распечатка содержит дату окончания события",
"srf-paramdesc-filtered-calendar-title": "Распечатка содержит название события. Не может быть использовано вместе с шаблоном заголовка.",
"srf-paramdesc-filtered-calendar-title-template": "Шаблон, используемый для форматирования названия события в календаре",
+ "srf-paramdesc-filtered-map-position": "\nРаспечатка, содержащая географическое положение.",
+ "srf-paramdesc-filtered-map-icon": "Распечатка, которая определяет значок карты, который будет использоваться.",
+ "srf-paramdesc-filtered-map-icons": "Карта значений для значков, которые будут использоваться для этих значений на карте.",
"srf-paramdesc-filtered-map-height": "Высота карты.",
+ "srf-paramdesc-filtered-map-min-zoom": "Минимальный выбираемый уровень масштабирования карты",
+ "srf-paramdesc-filtered-map-max-zoom": "Максимальный выбираемый уровень масштабирования карты",
+ "srf-paramdesc-filtered-map-marker-cluster": "\nВключить или отключить кластеризацию маркеров.",
+ "srf-paramdesc-filtered-map-marker-cluster-max-zoom": "\nМаксимальный уровень масштабирования, при котором маркеры карты всё ещё группируются. Выше этого уровня маркеры всегда будут кластеризованы.",
+ "srf-paramdesc-filtered-map-marker-cluster-max-radius": "\nМаксимальный радиус, который кластер будет охватывать от центрального маркера (в пикселях). По умолчанию 80.",
+ "srf-paramdesc-filtered-map-marker-cluster-zoom-on-click": "Если включено, при нажатии кластер приблизится к своим границам.",
"srf-filtered-selectorlabel-list": "Список",
"srf-filtered-selectorlabel-table": "Таблица",
"srf-filtered-selectorlabel-calendar": "Календарь",
"srf-filtered-selectorlabel-map": "Карта",
+ "srf-filtered-noscript-error": "Результаты не могут быть отображены, потому что Javascript отключён. Перейти к $1",
+ "srf-filtered-noscript-link-caption": "\nрезультаты в табличной форме",
+ "srf-filtered-map-provider-missing-error": "Для представления \"карта\" не указан поставщик карт.",
"srf-filtered-value-filter-and": "И",
"srf-filtered-value-filter-or": "ИЛИ",
"srf-filtered-value-filter-placeholder": "Выберите значение фильтра",
@@ -288,6 +305,7 @@
"srf-paramdesc-unit": "Единица",
"srf-printername-pagewidget": "Виджет страница",
"srf-printername-incoming": "Входящие свойства",
+ "srf-paramdesc-count": "Устанавливает, нужно ли считать количество входящих свойств",
"srf-paramdesc-min": "Минимальное или пороговое значение",
"srf-paramdesc-excludeproperty": "Исключить свойство из набора результатов",
"srf-printername-media": "Медиапроигрыватель",
@@ -306,8 +324,6 @@
"srf-ui-mediaplayer-label-repeat-off": "Повторение выкл",
"srf-ui-mediaplayer-label-full-screen": "На весь экран",
"srf-ui-mediaplayer-label-restore-screen": "Восстановить экран",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Не удалось экспортировать в MS Excel, потому что не установлено расширение [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel].",
- "srf-paramdesc-excel-filename": "Имя скачиваемого файла для создаваемого файла",
- "srf-paramdesc-excel-templatefile": "Название файла Excel из пространства имён «Файл», используемого для форматирования создаваемого файла"
+ "srf-spreadsheet-link": "Таблица",
+ "srf-paramdesc-spreadsheet-templatefile": "Название файла таблицы из пространства имён «Файл», используемого для форматирования создаваемого файла"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/si.json b/www/wiki/extensions/SemanticResultFormats/i18n/si.json
index 094e0e2c..70719a5e 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/si.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/si.json
@@ -5,7 +5,6 @@
"Nemo bis"
]
},
- "srf-name": "අර්ථ විචාර ප්‍රතිඑල ආකෘතීන්",
"prefs-srf": "අර්ථ විචාර ප්‍රතිඑල ආකෘතීන්",
"srf-module-loading": "ප්‍රවේශනය වෙමින්...",
"srf-paramdesc-layout": "ලබා ගත හැකි සැලැස්ම",
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/sv.json b/www/wiki/extensions/SemanticResultFormats/i18n/sv.json
index 2b61d63c..196c28cc 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/sv.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/sv.json
@@ -13,14 +13,14 @@
"Skalman",
"Nemo bis",
"Josve05a",
- "Umeaboy"
+ "Umeaboy",
+ "Mjälten"
]
},
"srf-desc": "Extra resultatformat för Semantic MediaWiki-frågor",
- "srf-name": "Semantiska resultatformat",
"srf-prefs-datatables-options-cache-default": "Aktivera [https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Local_storage lokal lagring] för att förbättra svarstiden",
"srf-module-loading": "Laddar...",
- "srf-paramdesc-layout": "Tillgänglig layout",
+ "srf-paramdesc-layout": "Tillgänglig utformningar",
"srf-paramdesc-height": "Höjd",
"srf-paramdesc-width": "Bredd",
"srf-paramdesc-class": "Ange ytterligare en CSS-klass som ska gälla för formatet",
@@ -130,7 +130,7 @@
"srf_paramdesc_captionproperty": "Namnet på den semantiska egenskap (som är närvarande på de efterfrågade sidorna) som ska användas som figurtext",
"srf_paramdesc_imageproperty": "Namnet på en semantisk egenskap på den efterfrågade sidan som pekar på bilder som ska användas. När den här parametern är angiven så kommer de efterfrågade sidorna själv inte att visas som bilder",
"srf-paramdesc-redirects": "Namnet på den semantiska egenskap som är närvarande på de efterfrågade sidorna som innehåller förflyttningsmålet",
- "srf-paramdesc-navigation": "Specificera navigation för layout",
+ "srf-paramdesc-navigation": "Specificera navigation för utformning",
"srf-paramdesc-overlay": "Möjliggör bilder ovanpå",
"srf-gallery-navigation-previous": "Föregående",
"srf-gallery-navigation-next": "Nästa",
@@ -257,5 +257,7 @@
"srf-ui-mediaplayer-label-shuffle": "Blanda",
"srf-ui-mediaplayer-label-repeat": "Upprepa",
"srf-ui-mediaplayer-label-full-screen": "Fullskärm",
- "srf-excel-link": "Excel"
+ "srf-spreadsheet-link": "Kalkylblad",
+ "srf-paramdesc-spreadsheet-filename": "Filformatet att producera. Tillåtna värden: xlsx, xls, ods, csv. Standard: xlsx",
+ "srf-paramdesc-spreadsheet-templatefile": "Namnet på kalkylbladsfilen från namnrymden \"File\" som används för att formatera den genererade filen"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/tl.json b/www/wiki/extensions/SemanticResultFormats/i18n/tl.json
index c37ad4cc..7ff5be80 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/tl.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/tl.json
@@ -8,7 +8,6 @@
]
},
"srf-desc": "Dagdag na mga anyo para sa nasa loob ng guhit na mga pagtatanong na pang-Semantikong MediaWiki",
- "srf-name": "Mga Anyo ng Resultang Semantiko",
"srf-module-loading": "Ikinakarga...",
"srf-paramdesc-layout": "Makukuhang kalatagan",
"srf-paramdesc-height": "Taas",
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/uk.json b/www/wiki/extensions/SemanticResultFormats/i18n/uk.json
index 9ba6030c..81cfd67b 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/uk.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/uk.json
@@ -8,13 +8,13 @@
"NataChe",
"Piramidion",
"Bunyk",
- "Nemo bis"
+ "Nemo bis",
+ "Vlad5250"
]
},
"srf-desc": "Додаткові формати результатів для запитів Semantic MediaWiki",
- "srf-name": "Формати семантичних результатів",
- "prefs-srf": "Extension:Semantic Result Formats",
- "srf-prefs-intro-text": "Ви встановили розширення Semantic Result Formats. За отримання допомоги, відвідайте, будь ласка, [http://www.semantic-mediawiki.org/wiki/Help:Result_formats довідкову сторінку форматів результатів].",
+ "prefs-srf": "Формати семантичних результатів",
+ "srf-prefs-intro-text": "Ви встановили розширення Semantic Result Formats. Відвідайте, будь ласка, [http://www.semantic-mediawiki.org/wiki/Help:Result_formats довідкову сторінку форматів результатів] для отримання допомоги відносно налаштувань користувача.",
"prefs-srf-eventcalendar-options": "Налаштування календаря подій",
"srf-prefs-eventcalendar-options-update-default": "Увімкнути [https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Automatic_updates автоматичні оновлення] календаря подій під час оновлення сторінки",
"srf-prefs-eventcalendar-options-paneview-default": "Увімкнути за замовчуванням вигляд клітинками",
@@ -268,7 +268,6 @@
"srf-filtered-noscript-error": "Результати неможливо відтворити, оскільки JavaScript не увімкнено. Перейдіть до $1.",
"srf-filtered-noscript-link-caption": "результати в табличній формі",
"srf-filtered-map-provider-missing-error": "Не вказано провайдера мапи для перегляду у форматі «мапа».",
- "srf-filtered-map-geocoordinateparser-missing-error": "Парсера геокординат не знайдено. Вам треба встановити 'data-values/geo'.",
"srf-filtered-value-filter-and": "ТА",
"srf-filtered-value-filter-or": "АБО",
"srf-filtered-value-filter-placeholder": "Виберіть значення фільтра",
@@ -328,9 +327,12 @@
"srf-ui-mediaplayer-label-repeat-off": "Вимкнути повторення",
"srf-ui-mediaplayer-label-full-screen": "Повноекранний режим",
"srf-ui-mediaplayer-label-restore-screen": "Відновити екран",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "Не вдалося експортувати в MS-Excel, оскільки розширення [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] не встановлене.",
- "srf-paramdesc-excel-filename": "Назва файлу для завантаження генерованого файлу",
- "srf-paramdesc-excel-templatefile": "Назва файлу Excel з простору назв ''File'', що використовується для форматування генерованого файлу",
- "srf-paramdesc-icalendar-timezone": "Список часових поясів через кому"
+ "srf-spreadsheet-link": "Електронна таблиця",
+ "srf-paramdesc-spreadsheet-filename": "Назва файлу для завантаження згенерованого файлу-таблиці",
+ "srf-paramdesc-spreadsheet-templatefile": "Назва електронної таблиці з простору назв «Файл», яка використовується для форматування згенерованого файлу",
+ "srf-paramdesc-icalendar-timezone": "Список часових поясів через кому",
+ "srf-paramdesc-gantt-diagramtitle": "Назва діаграми",
+ "srf-paramdesc-gantt-diagramtheme": "Тема діаграми",
+ "srf-paramdesc-gantt-axisformat": "X-вісь: Формат дати",
+ "srf-printername-gantt": "Ґант"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/zh-hans.json b/www/wiki/extensions/SemanticResultFormats/i18n/zh-hans.json
index 375213c1..a42c8721 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/zh-hans.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/zh-hans.json
@@ -10,13 +10,14 @@
"Hudafu",
"Fengchao",
"Yfdyh000",
- "Nemo bis"
+ "Nemo bis",
+ "科劳",
+ "Looong"
]
},
"srf-desc": "用于Semantic MediaWiki的附加结果格式",
- "srf-name": "语义结果格式",
- "prefs-srf": "扩展:语义结果格式",
- "srf-prefs-intro-text": "您已安装语义结果格式拓展。额外帮助请参见[https://www.semantic-mediawiki.org/wiki/Help:Result_formats 此拓展的帮助页]。",
+ "prefs-srf": "语义结果格式",
+ "srf-prefs-intro-text": "您已安装带有语义的结果格式拓展应用。请访问[https://www.semantic-mediawiki.org/wiki/Help:Result_formats result formats]来获取用户喜好相关的额外帮助。",
"prefs-srf-eventcalendar-options": "事件日历选项",
"srf-prefs-eventcalendar-options-update-default": "在页面刷新时启用日历活动的[https://www.semantic-mediawiki.org/wiki/Help:User_preferences#Automatic_updates 自动更新]",
"srf-prefs-eventcalendar-options-paneview-default": "默认启用窗格视图",
@@ -270,7 +271,6 @@
"srf-filtered-noscript-error": "因为Javascript未启用,所以不能显示结果。前往$1。",
"srf-filtered-noscript-link-caption": "表格窗体中的结果",
"srf-filtered-map-provider-missing-error": "没有为“地图”视图指定地图提供者。",
- "srf-filtered-map-geocoordinateparser-missing-error": "找不到地理坐标解析器。您需要安装“data-values/geo”。",
"srf-filtered-value-filter-and": "和",
"srf-filtered-value-filter-or": "或",
"srf-filtered-value-filter-placeholder": "选择过滤器值",
@@ -330,9 +330,11 @@
"srf-ui-mediaplayer-label-repeat-off": "关闭重复",
"srf-ui-mediaplayer-label-full-screen": "全屏",
"srf-ui-mediaplayer-label-restore-screen": "还原屏幕",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "无法导出成MS-Excel因为[https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel]拓展未安装。",
- "srf-paramdesc-excel-filename": "用于生成文件的下载文件名",
- "srf-paramdesc-excel-templatefile": "来自“File”名字空间的Excel文件名,用于格式化生成的文件",
- "srf-paramdesc-icalendar-timezone": "时区的逗号分隔列表"
+ "srf-paramdesc-icalendar-timezone": "时区的逗号分隔列表",
+ "srf-paramdesc-gantt-diagramtitle": "数据图名称",
+ "srf-paramdesc-gantt-diagramtheme": "数据图主题",
+ "srf-paramdesc-gantt-axisformat": "横轴:日期格式",
+ "srf-paramdesc-gantt-titletopmargin": "数据图标题的内上边距",
+ "srf-paramdesc-gantt-barheight": "任务栏高度",
+ "srf-printername-gantt": "甘特图"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/i18n/zh-hant.json b/www/wiki/extensions/SemanticResultFormats/i18n/zh-hant.json
index 8fb45b8c..614036dc 100644
--- a/www/wiki/extensions/SemanticResultFormats/i18n/zh-hant.json
+++ b/www/wiki/extensions/SemanticResultFormats/i18n/zh-hant.json
@@ -12,7 +12,6 @@
]
},
"srf-desc": "用於 Semantic MediaWiki 查詢的附加結果格式",
- "srf-name": "語義結果格式",
"prefs-srf": "擴充:語意結果格式",
"srf-prefs-intro-text": "您已安裝 Semantic Result Formats 擴充功能。額外幫助內容請查看[https://www.semantic-mediawiki.org/wiki/Help:Result_formats 結果格式]的說明頁面.",
"prefs-srf-eventcalendar-options": "事件行事曆選項",
@@ -117,6 +116,7 @@
"srf-paramdesc-chartcolor": "分配具體圖表色彩",
"srf-paramdesc-colorscheme": "選擇色彩方案",
"srf-paramdesc-valueformat": "指定用於值的格式規範",
+ "srf-paramdesc-highlighter": "顯示資料點加強凸顯效果",
"srf-paramdesc-smoothlines": "在線狀圖上套用平滑演算法",
"srf-paramdesc-stackseries": "顯示圖表為疊堆序列",
"srf-paramdesc-seriesgroup": "選擇系列分組",
@@ -125,6 +125,7 @@
"srf-paramdesc-chartcursor": "圖表游標顯示選項",
"srf-paramdesc-trendline": "啟用同時顯示圖表與該趨勢線",
"srf-paramdesc-gridview": "同時顯示圖表與資料集。允許的值為:「none」和「tabs」,預設為:「none」",
+ "srf-paramdesc-paneview": "指定包含小型線狀圖的方格位置。允許的值為:「top」、「bottom」、「none」,預設為:「bottom」。",
"srf-paramdesc-infotext": "顯示在對應資訊分頁的額外資訊。",
"srf-paramdesc-clicktarget": "定義當點擊行事曆日期時,作為目標的頁面或查詢字串。",
"srf-ui-gridview-label-item": "資料項目",
@@ -180,6 +181,7 @@
"srf-paramdesc-graphlink": "設定節點是否要連接到它們的 wiki 頁面",
"srf-paramdesc-graphcolor": "設定圖表顔色",
"srf-paramdesc-graph-wwl": "設定字詞換行限制(採字元數)",
+ "srf-paramdesc-clustercolor": "設定叢集框色彩",
"srf-paramdesc-highlight": "設定凸顯出節點",
"srf-paramdesc-highlightcolor": "設定所凸顯節點的字型色彩",
"srf-paramdesc-redlinkcolor": "設定紅連的字型色彩",
@@ -217,6 +219,7 @@
"srf-ui-datatables-label-sSearch": "搜尋:",
"srf-ui-datatables-label-sZeroRecords": "找不到符合的紀錄",
"srf-ui-datatables-label-oPaginate-sFirst": "第一",
+ "srf-ui-datatables-label-oPaginate-sLast": "最末",
"srf-ui-datatables-label-oPaginate-sNext": "下一頁",
"srf-ui-datatables-label-oPaginate-sPrevious": "上一頁",
"srf-ui-datatables-label-oAria-sSortAscending": ":啟用升冪排序欄位",
@@ -229,6 +232,7 @@
"srf-tree-circledetected": "當插入$1至樹狀結構時偵測到循環引用。",
"srf-paramdesc-tree-parent": "包含父頁面的屬性",
"srf-paramdesc-tree-root": "樹狀結構的根頁面",
+ "srf-paramdesc-tree-startlevel": "樹狀結構的起始級別,例如:整合至其它樹狀結構",
"srf-printername-slideshow": "幻燈片",
"srf-paramdesc-delay": "以秒為單位的幻燈片延遲時間",
"srf-paramdesc-navigation-controls": "是否顯示導航控制",
@@ -247,10 +251,13 @@
"srf-paramdesc-filtered-calendar-title-template": "在行事曆裡使用來格式化事件標題的模板",
"srf-paramdesc-filtered-map-position": "列印輸出內容包含地理位置。",
"srf-paramdesc-filtered-map-icon": "所決定使用之地圖標示的列印輸出。",
+ "srf-paramdesc-filtered-map-icons": "使用於在地圖裡這些值上的值與圖標對應。",
"srf-paramdesc-filtered-map-height": "地圖高度",
"srf-paramdesc-filtered-map-zoom": "地圖載入時的縮放層次。這可透過使用者來更改。<br>請查看:<i>地圖視圖最小縮放</i>與<i>地圖視圖最大縮放</i>",
"srf-paramdesc-filtered-map-min-zoom": "地圖最小可縮放層次",
"srf-paramdesc-filtered-map-max-zoom": "地圖最大可縮放層級",
+ "srf-paramdesc-filtered-map-marker-cluster": "啟動或關閉聚集標記",
+ "srf-paramdesc-filtered-map-marker-cluster-max-zoom": "地圖標記仍有聚集時的最大縮放層級。以上層級的標記則不會做出聚集。",
"srf-paramdesc-filtered-map-marker-cluster-max-radius": "叢集會從中心點起覆蓋的最大半徑。預設值為 80(像素)。",
"srf-paramdesc-filtered-map-marker-cluster-zoom-on-click": "當啟用後,點擊叢集會縮放至界限。",
"srf-filtered-selectorlabel-list": "清單",
@@ -260,7 +267,6 @@
"srf-filtered-noscript-error": "因 Javascript 未啟用而無法顯示結果。前至$1。",
"srf-filtered-noscript-link-caption": "表格式表單的結果",
"srf-filtered-map-provider-missing-error": "沒有替「map」視圖指定地圖提供方。",
- "srf-filtered-map-geocoordinateparser-missing-error": "找不到地理座標解析器。您必須安裝「data-values/geo」。",
"srf-filtered-value-filter-and": "與",
"srf-filtered-value-filter-or": "或",
"srf-filtered-value-filter-placeholder": "選擇一個篩選值",
@@ -279,6 +285,7 @@
"srf-paramdesc-calendarfirstday": "每週開始的第一天",
"srf-paramdesc-calendardefaultview": "當行事曆載入時的初始視圖",
"srf-paramdesc-calendarstart": "初始行事曆起始(日期或日期時間的值)",
+ "srf-paramdesc-calendarlegend": "指定圖例位置以及所分配的篩選項目",
"srf-paramdesc-dayview": "以點擊日期數目來啟用日期檢視",
"srf-ui-eventcalendar-label-today": "今天",
"srf-ui-eventcalendar-label-month": "月",
@@ -293,6 +300,7 @@
"srf-ui-eventcalendar-click-popup": "您是否要建立事件?",
"srf-printername-dygraphs": "Dygraphs 圖表",
"srf-paramdesc-datasource": "可存取資料的來源。允許的值為:「file」、「raw」、「url」,預設為:「file」",
+ "srf-paramdesc-errorbar": "使用到錯誤的條狀。允許的值為:「fraction」(值的信賴區間)、「sigma」(值的標準差)、「range」(自定義的值範圍)",
"srf-paramdesc-movingaverage": "顯示一段日子裡的平均(零代表沒有移動平均)",
"srf-paramdesc-yaxislabel": "在 Y 軸上顯示的描述",
"srf-paramdesc-xaxislabel": "在 X 軸上顯示的描述",
@@ -318,9 +326,13 @@
"srf-ui-mediaplayer-label-repeat-off": "關閉重複",
"srf-ui-mediaplayer-label-full-screen": "全螢幕",
"srf-ui-mediaplayer-label-restore-screen": "還原螢幕",
- "srf-excel-link": "Excel",
- "srf-excel-missing-phpexcel": "無法匯出成 MS-Excel,因為擴充套件 [https://www.mediawiki.org/wiki/Extension:PHPExcel PHPExcel] 尚未安裝。",
- "srf-paramdesc-excel-filename": "用於所產生檔案的下載檔案名稱",
- "srf-paramdesc-excel-templatefile": "來自「File」命名空間的 Excel 檔案名稱,用於格式所產生的檔案",
- "srf-paramdesc-icalendar-timezone": "逗號分隔的時區清單"
+ "srf-spreadsheet-link": "試算表",
+ "srf-paramdesc-spreadsheet-filename": "生成的檔案格式。允許值為:xlsx、xls、ods、csv。預設值為:xlsx",
+ "srf-paramdesc-spreadsheet-templatefile": "來自「File」命名空間的試算表檔案名稱,用於格式所產生的檔案",
+ "srf-paramdesc-icalendar-timezone": "逗號分隔的時區清單",
+ "srf-paramdesc-gantt-diagramtitle": "圖表名稱",
+ "srf-paramdesc-gantt-diagramtheme": "圖表主題",
+ "srf-paramdesc-gantt-axisformat": "X 軸:日期格式",
+ "srf-error-gantt-mermaid-not-installed": "需要安裝 Mermaid 擴充。",
+ "srf-printername-gantt": "甘特圖"
}
diff --git a/www/wiki/extensions/SemanticResultFormats/resources/ext.srf.css b/www/wiki/extensions/SemanticResultFormats/resources/ext.srf.css
index 644d86dc..18641276 100644
--- a/www/wiki/extensions/SemanticResultFormats/resources/ext.srf.css
+++ b/www/wiki/extensions/SemanticResultFormats/resources/ext.srf.css
@@ -58,15 +58,52 @@
fieldset#mw-prefsection-smw-srf {
border: 0px solid #2a4b8d;
border-top: 1px solid #2a4b8d;
- margin-top: -5px;
+ margin-top: 25px;
+ clear: both;
}
-fieldset#mw-prefsection-smw-srf-eventcalendar-options, fieldset#mw-prefsection-smw-srf-datatables-options {
+fieldset#mw-prefsection-smw-srf-eventcalendar-options {
border: 0px solid #2a4b8d;
border-top: 1px solid #ddd;
- margin-top: -5px;
+ margin-top: 0px;
}
-#mw-prefsection-smw-srf legend::before {
- content: "▼ ";
+fieldset#mw-prefsection-smw-srf-datatables-options {
+ border: 0px solid #2a4b8d;
+ border-top: 1px solid #ddd;
+ margin-top: 15px;
+}
+
+#mw-prefsection-smw-srf .oo-ui-fieldsetLayout-header .oo-ui-labelElement-label:before {
+ content: "⯈ ";
+}
+
+#mw-prefsection-smw-srf .oo-ui-fieldsetLayout-header .oo-ui-labelElement-label {
+ color: #2a4b8d;
+}
+
+#mw-prefsection-smw-srf .oo-ui-panelLayout-padded {
+ padding-top: 0em;
+ padding-bottom: 0em;
+}
+
+#mw-prefsection-smw-srf-eventcalendar-options .oo-ui-fieldsetLayout-group,
+#mw-prefsection-smw-srf-datatables-options .oo-ui-fieldsetLayout-group {
+ columns: 2;
+}
+
+#mw-prefsection-smw-srf .oo-ui-fieldLayout-field {
+ margin-top: 10px;
+}
+
+/**
+ * Responsive settings
+ */
+@media screen and (max-width: 800px) {
+
+ #mw-prefsection-smw-srf-eventcalendar-options .oo-ui-fieldsetLayout-group,
+ #mw-prefsection-smw-srf-datatables-options .oo-ui-fieldsetLayout-group {
+ columns: 1;
+ }
+
}
diff --git a/www/wiki/extensions/SemanticResultFormats/src/BibTex/BibTexFileExportPrinter.php b/www/wiki/extensions/SemanticResultFormats/src/BibTex/BibTexFileExportPrinter.php
new file mode 100644
index 00000000..aa2bc011
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/src/BibTex/BibTexFileExportPrinter.php
@@ -0,0 +1,190 @@
+<?php
+
+namespace SRF\BibTex;
+
+use SMWTimeValue as TimeValue;
+use SMWQueryResult as QueryResult;
+use SMW\Query\ResultPrinters\FileExportPrinter;
+
+/**
+ * Printer class for creating BibTeX exports
+ *
+ * For details on availble keys see the README
+ *
+ * Example of a book :
+ *
+ * @Book{abramowitz1964homf,
+ * author = "Milton Abramowitz and Irene A. Stegun",
+ * title = "Handbook of Mathematical Functions",
+ * publisher = "Dover",
+ * year = 1964,
+ * address = "New York",
+ * edition = "ninth Dover printing, tenth GPO printing"
+ * }
+ *
+ * @license GNU GPL v2+
+ * @since 1.5
+ *
+ * @author Markus Krötzsch
+ * @author Denny Vrandecic
+ * @author Frank Dengler
+ * @author Steren Giannini
+ */
+class BibTexFileExportPrinter extends FileExportPrinter {
+
+ /**
+ * @see ResultPrinter::getName
+ *
+ * {@inheritDoc}
+ */
+ public function getName() {
+ return wfMessage( 'srf_printername_bibtex' )->text();
+ }
+
+ /**
+ * @see FileExportPrinter::getMimeType
+ *
+ * @since 1.8
+ *
+ * {@inheritDoc}
+ */
+ public function getMimeType( QueryResult $queryResult ) {
+ return 'text/bibtex';
+ }
+
+ /**
+ * @see FileExportPrinter::getFileName
+ *
+ * @since 1.8
+ *
+ * {@inheritDoc}
+ */
+ public function getFileName( QueryResult $queryResult ) {
+
+ if ( $this->params['filename'] !== '' ) {
+
+ if ( strpos( $this->params['filename'], '.bib' ) === false ) {
+ $this->params['filename'] .= '.bib';
+ }
+
+ return str_replace( ' ', '_', $this->params['filename'] );
+ } elseif ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
+ return str_replace( ' ', '_', $this->getSearchLabel( SMW_OUTPUT_WIKI ) ) . '.bib';
+ }
+
+ return 'BibTeX.bib';
+ }
+
+ /**
+ * @see ResultPrinter::getParamDefinitions
+ *
+ * @since 1.8
+ *
+ * {@inheritDoc}
+ */
+ public function getParamDefinitions( array $definitions ) {
+ $params = parent::getParamDefinitions( $definitions );
+
+ $params['filename'] = [
+ 'message' => 'smw-paramdesc-filename',
+ 'default' => 'bibtex.bib',
+ ];
+
+ return $params;
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param array $list
+ *
+ * @return string
+ */
+ public function getFormattedList( $key, array $values ) {
+ return $GLOBALS['wgLang']->listToText( $values );
+ }
+
+ /**
+ * @see ResultPrinter::getResultText
+ *
+ * {@inheritDoc}
+ */
+ protected function getResultText( QueryResult $res, $outputMode ) {
+
+ if ( $outputMode !== SMW_OUTPUT_FILE ) {
+ return $this->getBibTexLink( $res, $outputMode );
+ }
+
+ $items = [];
+
+ while ( $row = $res->getNext() ) {
+ $items[] = $this->newItem( $row )->text();
+ }
+
+ return implode( "\r\n\r\n", $items );
+ }
+
+ private function getBibTexLink( QueryResult $res, $outputMode ) {
+
+ // Can be viewed as HTML if requested, no more parsing needed
+ $this->isHTML = $outputMode == SMW_OUTPUT_HTML;
+
+ $link = $this->getLink(
+ $res,
+ $outputMode
+ );
+
+ return $link->getText( $outputMode, $this->mLinker );
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param $row array of SMWResultArray
+ *
+ * @return bibTexItem
+ */
+ private function newItem( array /* of SMWResultArray */ $row ) {
+
+ $item = new Item();
+ $item->setFormatterCallback( [ $this, 'getFormattedList' ] );
+
+ foreach ( $row as /* SMWResultArray */ $field ) {
+ $printRequest = $field->getPrintRequest();
+ $values = [];
+
+ $label = strtolower( $printRequest->getLabel() );
+ $dataValue = $field->getNextDataValue();
+
+ if ( $dataValue === false ) {
+ continue;
+ }
+
+ if ( $label === 'date' && $dataValue instanceof TimeValue ) {
+ $item->set( 'year', $dataValue->getYear() );
+ $item->set( 'month', $dataValue->getMonth() );
+ } elseif ( $label === 'author' || $label === 'authors' ) {
+ $values[] = $dataValue->getShortWikiText();
+
+ while ( ( /* SMWDataValue */ $dataValue = $field->getNextDataValue() ) !== false ) {
+ $values[] = $dataValue->getShortWikiText();
+ }
+
+ $item->set( 'author', $values );
+ } elseif ( $label === 'editor' || $label === 'editors' ) {
+ $values[] = $dataValue->getShortWikiText();
+
+ while ( ( /* SMWDataValue */ $dataValue = $field->getNextDataValue() ) !== false ) {
+ $values[] = $dataValue->getShortWikiText();
+ }
+
+ $item->set( 'editor', $values );
+ } else {
+ $item->set( $label, $dataValue->getShortWikiText() );
+ }
+ }
+
+ return $item;
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/src/BibTex/Item.php b/www/wiki/extensions/SemanticResultFormats/src/BibTex/Item.php
new file mode 100644
index 00000000..7ff631ef
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/src/BibTex/Item.php
@@ -0,0 +1,185 @@
+<?php
+
+namespace SRF\BibTex;
+
+use SMWDataValue as DataValue;
+
+/**
+ * @see http://www.semantic-mediawiki.org/wiki/BibTex
+ *
+ * @license GNU GPL v2+
+ * @since 3.1
+ *
+ * @author mwjames
+ */
+class Item {
+
+ /**
+ * @see https://en.wikipedia.org/wiki/BibTeX
+ *
+ * @var string
+ */
+ private $type = '';
+
+ /**
+ * @var []
+ */
+ protected $fields = [
+ 'address' => '',
+ 'annote' => '',
+ 'author' => [],
+ 'booktitle' => '',
+ 'chapter' => '',
+ 'crossref' => '',
+ 'doi' => '',
+ 'edition' => '',
+ 'editor' => [],
+ 'eprint' => '',
+ 'howpublished' => '',
+ 'institution' => '',
+ 'journal' => '',
+ 'key' => '',
+ 'month' => '',
+ 'note' => '',
+ 'number' => '',
+ 'organization' => '',
+ 'pages' => '',
+ 'publisher' => '',
+ 'school' => '',
+ 'series' => '',
+ 'title' => '',
+ 'url' => '',
+ 'volume' => '',
+ 'year' => ''
+ ];
+
+ /**
+ * @var callable
+ */
+ private $formatterCallback;
+
+ /**
+ * @since 3.1
+ */
+ public function __construct() {
+ $this->type = 'Book';
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param callable $compoundLabelCallback
+ */
+ public function setFormatterCallback( callable $formatterCallback ) {
+ $this->formatterCallback = $formatterCallback;
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param $key
+ * @param string $text
+ *
+ * @return string
+ */
+ public function replace( $key, $text ) {
+
+ if ( $key === 'uri' ) {
+ $text = str_replace(
+ [ "Ä", "ä", "Ö", "ö", "Ü", "ü", "ß" ],
+ [ 'Ae', 'ae', 'Oe', 'oe', 'Ue', 'ue', 'ss' ],
+ $text
+ );
+ $text = preg_replace("/[^a-zA-Z0-9]+/", "", $text );
+ }
+
+ return $text;
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param $key
+ * @param mixed $value
+ */
+ public function set( $key, $value ) {
+
+ $key = strtolower( $key );
+
+ if ( $key === 'type' ) {
+ $this->type = ucfirst( $value );
+ }
+
+ if ( isset( $this->fields[$key] ) ) {
+ $this->fields[$key] = $value;
+ }
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @return string
+ */
+ public function text() {
+
+ $formatterCallback = $this->formatterCallback;
+
+ $text = '@' . $this->type . '{' . $this->buildURI() . ",\r\n";
+
+ foreach ( $this->fields as $key => $value ) {
+
+ if ( ( $key === 'author' || $key === 'editor' ) && is_array( $value ) ) {
+ if ( is_callable( $formatterCallback ) ) {
+ $value = $formatterCallback( $key, $value );
+ } else {
+ $value = implode( ', ', $value );
+ }
+ }
+
+ if ( $value === '' ) {
+ continue;
+ }
+
+ $text .= ' ' . $key . ' = "' . $value . '", ' . "\r\n";
+ }
+
+ $text .= "}";
+
+ return $text;
+ }
+
+ /**
+ * Consist of `author last name` + `year` + `first word of title`
+ *
+ * @return string
+ */
+ protected function buildURI() {
+
+ $uri = '';
+
+ if ( isset( $this->fields['author'] ) ) {
+ foreach ( $this->fields['author'] as $key => $author ) {
+ $elements = explode( ' ', $author );
+ $uri .= array_pop( $elements );
+ break;
+ }
+ }
+
+ if ( isset( $this->fields['year'] ) ) {
+ $uri .= $this->fields['year'];
+ }
+
+ if ( isset( $this->fields['title'] ) ) {
+ foreach ( explode( ' ', $this->fields['title'] ) as $titleWord ) {
+ $charsTitleWord = preg_split( '//', $titleWord, -1, PREG_SPLIT_NO_EMPTY );
+
+ if ( !empty( $charsTitleWord ) ) {
+ $uri .= $charsTitleWord[0];
+ }
+ }
+ }
+
+ return strtolower( $this->replace( 'uri', $uri ) );
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/bibtex/README b/www/wiki/extensions/SemanticResultFormats/src/BibTex/README.md
index e911d149..1feab534 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/bibtex/README
+++ b/www/wiki/extensions/SemanticResultFormats/src/BibTex/README.md
@@ -1,88 +1,91 @@
Info is copied from http://en.wikipedia.org/wiki/Bibtex
-# address: Publisher's address (usually just the city, but can be the full address for lesser-known publishers)
-# annote: An annotation for annotated bibliography styles (not typical)
-# author: The name(s) of the author(s) (in the case of more than one author, separated by and)
-# booktitle: The title of the book, if only part of it is being cited
-# chapter: The chapter number
-# crossref: The key of the cross-referenced entry
-# doi: The DOI number of the entry
-# edition: The edition of a book, long form (such as "first" or "second")
-# editor: The name(s) of the editor(s)
-# eprint: A specification of an electronic publication, often a preprint or a technical report
-# howpublished: How it was published, if the publishing method is nonstandard
-# institution: The institution that was involved in the publishing, but not necessarily the publisher
-# journal: The journal or magazine the work was published in
-# key: A hidden field used for specifying or overriding the alphabetical order of entries (when the "author" and "editor" fields are missing). Note that this is very different from the key (mentioned just after this list) that is used to cite or cross-reference the entry.
-# month: The month of publication (or, if unpublished, the month of creation)
-# note: Miscellaneous extra information
-# number: The "number" of a journal, magazine, or tech-report, if applicable. (Most publications have a "volume", but no "number" field.)
-# organization: The conference sponsor
-# pages: Page numbers, separated either by commas or double-hyphens. For books, the total number of pages.
-# publisher: The publisher's name
-# school: The school where the thesis was written
-# series: The series of books the book was published in (e.g. "The Hardy Boys" or "Lecture Notes in Computer Science")
-# title: The title of the work
-# type: The type of tech-report, for example, "Research Note"
-# url: The WWW address
-# volume: The volume of a journal or multi-volume book
-# year: The year of publication (or, if unpublished, the year of creation)
+## Fields
+- address: Publisher's address (usually just the city, but can be the full address for lesser-known publishers)
+- annote: An annotation for annotated bibliography styles (not typical)
+- author: The name(s) of the author(s) (in the case of more than one author, separated by and)
+- booktitle: The title of the book, if only part of it is being cited
+- chapter: The chapter number
+- crossref: The key of the cross-referenced entry
+- doi: The DOI number of the entry
+- edition: The edition of a book, long form (such as "first" or "second")
+- editor: The name(s) of the editor(s)
+- eprint: A specification of an electronic publication, often a preprint or a technical report
+- howpublished: How it was published, if the publishing method is nonstandard
+- institution: The institution that was involved in the publishing, but not necessarily the publisher
+- journal: The journal or magazine the work was published in
+- key: A hidden field used for specifying or overriding the alphabetical order of entries (when the "author" and "editor" fields are missing). Note that this is very different from the key (mentioned just after this list) that is used to cite or cross-reference the entry.
+- month: The month of publication (or, if unpublished, the month of creation)
+- note: Miscellaneous extra information
+- number: The "number" of a journal, magazine, or tech-report, if applicable. (Most publications have a "volume", but no "number" field.)
+- organization: The conference sponsor
+- pages: Page numbers, separated either by commas or double-hyphens. For books, the total number of pages.
+- publisher: The publisher's name
+- school: The school where the thesis was written
+- series: The series of books the book was published in (e.g. "The Hardy Boys" or "Lecture Notes in Computer Science")
+- title: The title of the work
+- type: The type of tech-report, for example, "Research Note"
+- url: The WWW address
+- volume: The volume of a journal or multi-volume book
+- year: The year of publication (or, if unpublished, the year of creation)
-article
+## Types
+
+- article:
An article from a journal or magazine.
Required fields: author, title, journal, year
Optional fields: volume, number, pages, month, note, key
-book
+- book:
A book with an explicit publisher.
Required fields: author/editor, title, publisher, year
Optional fields: volume, series, address, edition, month, note, key, pages
-booklet
+- booklet:
A work that is printed and bound, but without a named publisher or sponsoring institution.
Required fields: title
Optional fields: author, howpublished, address, month, year, note, key
-conference
+- conference:
The same as inproceedings, included for Scribe compatibility.
Required fields: author, title, booktitle, year
Optional fields: editor, pages, organization, publisher, address, month, note, key
-inbook
+- inbook:
A part of a book, usually untitled. May be a chapter (or section or whatever) and/or a range of pages.
Required fields: author/editor, title, chapter/pages, publisher, year
Optional fields: volume, series, address, edition, month, note, key
-incollection
+- incollection:
A part of a book having its own title.
Required fields: author, title, booktitle, year
Optional fields: editor, pages, organization, publisher, address, month, note, key
-inproceedings
+- inproceedings:
An article in a conference proceedings.
Required fields: author, title, booktitle, year
Optional fields: editor, pages, organization, publisher, address, month, note, key
-manual
+- manual:
Technical documentation.
Required fields: title
Optional fields: author, organization, address, edition, month, year, note, key
-mastersthesis
+- mastersthesis:
A Master's thesis.
Required fields: author, title, school, year
Optional fields: address, month, note, key
-misc
+- misc:
For use when nothing else fits.
Required fields: none
Optional fields: author, title, howpublished, month, year, note, key
-phdthesis
+- phdthesis:
A Ph.D. thesis.
Required fields: author, title, school, year
Optional fields: address, month, note, key
-proceedings
+- proceedings:
The proceedings of a conference.
Required fields: title, year
Optional fields: editor, publisher, organization, address, month, note, key
-techreport
+- techreport:
A report published by a school or other institution, usually numbered within a series.
Required fields: author, title, institution, year
Optional fields: type, number, address, month, note, key
-unpublished
+- unpublished:
A document having an author and title, but not formally published.
Required fields: author, title, note
Optional fields: month, year, key
diff --git a/www/wiki/extensions/SemanticResultFormats/formats/graphviz/SRF_Graph.php b/www/wiki/extensions/SemanticResultFormats/src/Graph/GraphPrinter.php
index 6d4aa786..91def23d 100644
--- a/www/wiki/extensions/SemanticResultFormats/formats/graphviz/SRF_Graph.php
+++ b/www/wiki/extensions/SemanticResultFormats/src/Graph/GraphPrinter.php
@@ -1,5 +1,12 @@
<?php
+namespace SRF\Graph;
+
+use SMWResultPrinter;
+use SMWQueryResult;
+use SMWDataValue;
+use SMWWikiPageValue;
+
/**
* SMW result printer for graphs using graphViz.
* In order to use this printer you need to have both
@@ -13,7 +20,13 @@
* @author Frank Dengler
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
-class SRFGraph extends SMWResultPrinter {
+class GraphPrinter extends SMWResultPrinter {
+
+ const NODELABEL_DISPLAYTITLE = 'displaytitle';
+
+ public static $NODE_LABELS = [
+ self::NODELABEL_DISPLAYTITLE,
+ ];
public static $NODE_SHAPES = [
'box',
@@ -79,6 +92,7 @@ class SRFGraph extends SMWResultPrinter {
protected $m_nodeShape;
protected $m_parentRelation;
protected $m_wordWrapLimit;
+ protected $m_nodeLabel;
/**
* (non-PHPdoc)
@@ -104,6 +118,8 @@ class SRFGraph extends SMWResultPrinter {
$this->m_nodeShape = $params['nodeshape'];
$this->m_wordWrapLimit = $params['wordwraplimit'];
+
+ $this->m_nodeLabel = $params['nodelabel'];
}
protected function getResultText( SMWQueryResult $res, $outputmode ) {
@@ -207,6 +223,7 @@ class SRFGraph extends SMWResultPrinter {
*/
protected function getGVForDataValue( SMWDataValue $object, $outputmode, $isName, $name, $labelName ) {
$graphInput = '';
+ $nodeLabel = '';
$text = $object->getShortText( $outputmode );
if ( $this->m_graphLink ) {
@@ -215,8 +232,19 @@ class SRFGraph extends SMWResultPrinter {
$text = $this->getWordWrappedText( $text, $this->m_wordWrapLimit );
+ if ( $this->m_nodeLabel === self::NODELABEL_DISPLAYTITLE && $object instanceof SMWWikiPageValue ) {
+ $objectDisplayTitle = $object->getDisplayTitle();
+ if ( !empty( $objectDisplayTitle )) {
+ $nodeLabel = $this->getWordWrappedText( $objectDisplayTitle, $this->m_wordWrapLimit );
+ }
+ }
+
if ( $this->m_graphLink ) {
- $graphInput .= " \"$text\" [URL = \"$nodeLinkURL\"]; ";
+ if( $nodeLabel === '' ) {
+ $graphInput .= " \"$text\" [URL = \"$nodeLinkURL\"]; ";
+ } else {
+ $graphInput .= " \"$text\" [URL = \"$nodeLinkURL\", label = \"$nodeLabel\"]; ";
+ }
}
if ( !$isName ) {
@@ -379,6 +407,12 @@ class SRFGraph extends SMWResultPrinter {
'manipulatedefault' => false,
];
+ $params['nodelabel'] = [
+ 'default' => '',
+ 'message' => 'srf-paramdesc-nodelabel',
+ 'values' => self::$NODE_LABELS,
+ ];
+
return $params;
}
diff --git a/www/wiki/extensions/SemanticResultFormats/src/Outline/ListTreeBuilder.php b/www/wiki/extensions/SemanticResultFormats/src/Outline/ListTreeBuilder.php
new file mode 100644
index 00000000..f64a4366
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/src/Outline/ListTreeBuilder.php
@@ -0,0 +1,162 @@
+<?php
+
+namespace SRF\Outline;
+
+use SMW\Query\PrintRequest;
+use SRF\Outline\OutlineTree;
+use SMWDataItem as DataItem;
+
+/**
+ * @license GNU GPL v2+
+ * @since 3.1
+ *
+ * @author mwjames
+ */
+class ListTreeBuilder {
+
+ /**
+ * @var []
+ */
+ private $params = [];
+
+ /**
+ * @var Linker
+ */
+ private $linker;
+
+ /**
+ * @param array $params
+ */
+ public function __construct( array $params ) {
+ $this->params = $params;
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param Linker|null|false $linker
+ */
+ public function setLinker( $linker ) {
+ $this->linker = $linker;
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param OutlineTree $tree
+ *
+ * @return string
+ */
+ public function build( OutlineTree $outlineTree ) {
+ return $this->tree( $outlineTree );
+ }
+
+ private function tree( $outline_tree, $level = 0 ) {
+ $text = "";
+
+ if ( !is_null( $outline_tree->items ) ) {
+ $text .= "<ul>\n";
+ foreach ( $outline_tree->items as $item ) {
+ $text .= "<li>{$this->item($item)}</li>\n";
+ }
+ $text .= "</ul>\n";
+ }
+
+ if ( $level > 0 ) {
+ $text .= "<ul>\n";
+ }
+
+ $num_levels = count( $this->params['outlineproperties'] );
+ // set font size and weight depending on level we're at
+ $font_level = $level;
+
+ if ( $num_levels < 4 ) {
+ $font_level += ( 4 - $num_levels );
+ }
+
+ if ( $font_level == 0 ) {
+ $font_size = 'x-large';
+ } elseif ( $font_level == 1 ) {
+ $font_size = 'large';
+ } elseif ( $font_level == 2 ) {
+ $font_size = 'medium';
+ } else {
+ $font_size = 'small';
+ }
+
+ if ( $font_level == 3 ) {
+ $font_weight = 'bold';
+ } else {
+ $font_weight = 'regular';
+ }
+
+ foreach ( $outline_tree->tree as $key => $node ) {
+ $text .= "<p style=\"font-size: $font_size; font-weight: $font_weight;\">$key</p>\n";
+ $text .= $this->tree( $node, $level + 1 );
+ }
+
+ if ( $level > 0 ) {
+ $text .= "</ul>\n";
+ }
+
+ return $text;
+ }
+
+ private function item( $item ) {
+ $first_col = true;
+ $found_values = false; // has anything but the first column been printed?
+ $result = "";
+
+ foreach ( $item->row as $resultArray ) {
+
+ $printRequest = $resultArray->getPrintRequest();
+ $val = $printRequest->getText( SMW_OUTPUT_WIKI, null );
+ $first_value = true;
+
+ if ( in_array( $val, $this->params['outlineproperties'] ) ) {
+ continue;
+ }
+
+ $linker = $this->params['link'] === 'all' ? $this->linker : null;
+
+ if ( $this->params['link'] === 'subject' && $printRequest->isMode( PrintRequest::PRINT_THIS ) ) {
+ $linker = $this->linker;
+ }
+
+ while ( ( $dv = $resultArray->getNextDataValue() ) !== false ) {
+
+ if ( !$first_col && !$found_values ) { // first values after first column
+ $result .= ' (';
+ $found_values = true;
+ } elseif ( $found_values || !$first_value ) {
+ // any value after '(' or non-first values on first column
+ $result .= ', ';
+ }
+
+ if ( $first_value ) { // first value in any column, print header
+ $first_value = false;
+ if ( $this->params['showHeaders'] && ( '' != $printRequest->getLabel() ) ) {
+ $result .= $printRequest->getText( SMW_OUTPUT_WIKI, $linker ) . ' ';
+ }
+ }
+
+ $dataItem = $dv->getDataItem();
+
+ if ( $linker === null && $dataItem->getDIType() === DataItem::TYPE_WIKIPAGE && ( $caption = $dv->getDisplayTitle() ) !== '' ) {
+ $dv->setCaption( $caption );
+ }
+
+ $result .= $dv->getShortText( SMW_OUTPUT_WIKI, $linker );
+ }
+
+ $first_col = false;
+ }
+
+ if ( $found_values ) {
+ $result .= ')';
+ }
+
+ return $result;
+ }
+
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/src/Outline/OutlineItem.php b/www/wiki/extensions/SemanticResultFormats/src/Outline/OutlineItem.php
new file mode 100644
index 00000000..7b273c25
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/src/Outline/OutlineItem.php
@@ -0,0 +1,62 @@
+<?php
+
+namespace SRF\Outline;
+
+/**
+ * Represents a single item, or page, in the outline - contains both the
+ * SMWResultArray and an array of some of its values, for easier aggregation
+ *
+ * @license GNU GPL v2+
+ * @since 3.1
+ */
+class OutlineItem {
+
+ /**
+ * @var [type]
+ */
+ public $row;
+
+ /**
+ * @var []
+ */
+ private $vals;
+
+ /**
+ * @since 3.1
+ *
+ * @param $row
+ */
+ public function __construct( $row ) {
+ $this->row = $row;
+ $this->vals = [];
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param $name
+ * @param $value
+ */
+ public function addFieldValue( $key, $value ) {
+ if ( array_key_exists( $key, $this->vals ) ) {
+ $this->vals[$key][] = $value;
+ } else {
+ $this->vals[$key] = [ $value ];
+ }
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param $row
+ */
+ public function getFieldValues( $key ) {
+
+ if ( array_key_exists( $key, $this->vals ) ) {
+ return $this->vals[$key];
+ }
+
+ return [ wfMessage( 'srf_outline_novalue' )->text() ];
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/src/Outline/OutlineResultPrinter.php b/www/wiki/extensions/SemanticResultFormats/src/Outline/OutlineResultPrinter.php
new file mode 100644
index 00000000..9bb3b042
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/src/Outline/OutlineResultPrinter.php
@@ -0,0 +1,139 @@
+<?php
+
+namespace SRF\Outline;
+
+use SMWResultPrinter as ResultPrinter;
+use SMWQueryResult as QueryResult;
+
+/**
+ * A class to print query results in an outline format, along with some
+ * helper classes to handle the aggregation
+ *
+ * @license GNU GPL v2+
+ * @since 1.4.3
+ *
+ * @author Yaron Koren
+ */
+class OutlineResultPrinter extends ResultPrinter {
+
+ /**
+ * @see ResultPrinter::getName
+ *
+ * {@inheritDoc}
+ */
+ public function getName() {
+ return wfMessage( 'srf_printername_outline' )->text();
+ }
+
+ /**
+ * @see SMWResultPrinter::getParamDefinitions
+ *
+ * @since 1.8
+ *
+ * {@inheritDoc}
+ */
+ public function getParamDefinitions( array $definitions ) {
+ $params = parent::getParamDefinitions( $definitions );
+
+ $params['outlineproperties'] = [
+ 'islist' => true,
+ 'default' => [],
+ 'message' => 'srf_paramdesc_outlineproperties',
+ ];
+
+ $params[] = [
+ 'name' => 'template',
+ 'message' => 'smw-paramdesc-template',
+ 'default' => '',
+ ];
+
+ $params[] = [
+ 'name' => 'userparam',
+ 'message' => 'smw-paramdesc-userparam',
+ 'default' => '',
+ ];
+
+ $params[] = [
+ 'name' => 'named args',
+ 'type' => 'boolean',
+ 'message' => 'smw-paramdesc-named_args',
+ 'default' => true,
+ ];
+
+ return $params;
+ }
+
+ /**
+ * @see ResultPrinter::getResultText
+ *
+ * {@inheritDoc}
+ */
+ protected function getResultText( QueryResult $res, $outputMode ) {
+
+ // for each result row, create an array of the row itself
+ // and all its sorted-on fields, and add it to the initial
+ // 'tree'
+ $outlineTree = new OutlineTree();
+
+ while ( $row = $res->getNext() ) {
+ $outlineTree->addItem( $this->newOutlineItem( $row ) );
+ }
+
+ // now, cycle through the outline properties, creating the
+ // tree
+ foreach ( $this->params['outlineproperties'] as $property ) {
+ $outlineTree->addProperty( $property );
+ }
+
+ if ( $this->params['template'] !== '' ) {
+ $this->hasTemplates = true;
+ $templateBuilder = new TemplateBuilder(
+ $this->params
+ );
+
+ $templateBuilder->setLinker( $this->mLinker );
+ $result = $templateBuilder->build( $outlineTree );
+ } else {
+ $listTreeBuilder = new ListTreeBuilder(
+ $this->params + [ 'showHeaders' => $this->mShowHeaders ]
+ );
+
+ $listTreeBuilder->setLinker( $this->mLinker );
+ $result = $listTreeBuilder->build( $outlineTree );
+ }
+
+ if ( $this->linkFurtherResults( $res ) ) {
+ $link = $this->getFurtherResultsLink(
+ $res,
+ $outputMode
+ );
+
+ $result .= $link->getText( $outputMode, $this->mLinker ) . "\n";
+ }
+
+ return $result;
+ }
+
+ private function newOutlineItem( $row ) {
+
+ $outlineItem = new OutlineItem( $row );
+
+ foreach ( $row as $field ) {
+ $name = $field->getPrintRequest()->getText( SMW_OUTPUT_HTML );
+
+ if ( !in_array( $name, $this->params['outlineproperties'] ) ) {
+ continue;
+ }
+
+ while ( ( $dataValue = $field->getNextDataValue() ) !== false ) {
+ $outlineItem->addFieldValue(
+ $name,
+ $dataValue->getLongWikiText( $this->getLinker() )
+ );
+ }
+ }
+
+ return $outlineItem;
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/src/Outline/OutlineTree.php b/www/wiki/extensions/SemanticResultFormats/src/Outline/OutlineTree.php
new file mode 100644
index 00000000..3a3ecabb
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/src/Outline/OutlineTree.php
@@ -0,0 +1,90 @@
+<?php
+
+namespace SRF\Outline;
+
+/**
+ * A tree structure for holding the outline data
+ *
+ * @license GNU GPL v2+
+ * @since 3.1
+ */
+class OutlineTree {
+
+ /**
+ * @var []
+ */
+ public $tree;
+
+ /**
+ * @var []
+ */
+ public $items;
+
+ /**
+ * @var integer
+ */
+ public $itemCount = 0;
+
+ /**
+ * @var integer
+ */
+ public $leafCount = 0;
+
+ /**
+ * @since 3.1
+ *
+ * @param array $items
+ */
+ public function __construct( $items = [] ) {
+ $this->tree = [];
+ $this->items = $items;
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param $item
+ */
+ public function addItem( $item ) {
+ $this->items[] = $item;
+ $this->itemCount++;
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param $vals
+ * @param $item
+ */
+ public function categorizeItem( $vals, $item ) {
+ foreach ( $vals as $val ) {
+ if ( array_key_exists( $val, $this->tree ) ) {
+ $this->tree[$val]->items[] = $item;
+ $this->tree[$val]->leafCount++;
+ } else {
+ $this->tree[$val] = new self( [ $item ] );
+ $this->tree[$val]->leafCount++;
+ }
+ }
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param $property
+ */
+ public function addProperty( $property ) {
+ if ( $this->items !== null && count( $this->items ) > 0 ) {
+ foreach ( $this->items as $item ) {
+ $cur_vals = $item->getFieldValues( $property );
+ $this->categorizeItem( $cur_vals, $item );
+ }
+ $this->items = null;
+ } else {
+ foreach ( $this->tree as $i => $node ) {
+ $this->tree[$i]->addProperty( $property );
+ }
+ }
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/src/Outline/README.md b/www/wiki/extensions/SemanticResultFormats/src/Outline/README.md
new file mode 100644
index 00000000..62319dfc
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/src/Outline/README.md
@@ -0,0 +1,53 @@
+# Outline format
+
+The format is to display pages in a hierarchical outline form, using one or more of the pages' properties as outline headers.
+
+## Usage
+
+```
+{{#ask: [[Category:Task]]
+ |?Severity
+ |format=outline
+ |outlineproperties=Severity, Assigned to
+ |template=phab-view
+}}
+```
+
+For example, with `phab-view` as template name, the `outline` format will generate two distinct templates `phab-view-header` and `phab-view-item` to be used for the output with `-header` and `-item` being a fixed affix to distinguish the output level of the result content.
+
+The `...-header` template will provide additional information and includes:
+- `#outlinelevel` the level of the header being processed (depends on the iteration level invoked by the `outlineproperties` parameter)
+- `#itemcount` provides a count information for the items assigned to the
+the level
+- `#userparam`
+
+The `...-item` template will also provide additional information such as:
+
+- `#itemsection` section number of the item
+- `#itemsubject` the subject (aka page) of the item processed
+- `#userparam` content provided by a user via the `#ask` `userparam` parameter
+
+
+## Examples
+
+Using a template can provide means to individually style the result output, for example a simple list can be turned into a phabricator task list.
+
+```
+{{#ask: [[Category:Task]]
+ ...
+ |outlineproperties=Severity
+ |template=phab-view
+}}
+```
+
+![image](https://user-images.githubusercontent.com/1245473/51059660-d2826b00-15e4-11e9-8ff3-bb1591b04e81.png)
+
+```
+{{#ask: [[Category:Task]]
+ ...
+ |outlineproperties=Severity, Assigned to
+ |template=phab-view
+}}
+```
+
+![image](https://user-images.githubusercontent.com/1245473/51059791-52103a00-15e5-11e9-85cf-86c503a10b55.png)
diff --git a/www/wiki/extensions/SemanticResultFormats/src/Outline/TemplateBuilder.php b/www/wiki/extensions/SemanticResultFormats/src/Outline/TemplateBuilder.php
new file mode 100644
index 00000000..e6982e29
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/src/Outline/TemplateBuilder.php
@@ -0,0 +1,156 @@
+<?php
+
+namespace SRF\Outline;
+
+use SMW\Query\PrintRequest;
+use SRF\Outline\OutlineTree;
+
+/**
+ * @license GNU GPL v2+
+ * @since 3.1
+ *
+ * @author mwjames
+ */
+class TemplateBuilder {
+
+ /**
+ * @var []
+ */
+ private $params = [];
+
+ /**
+ * @var Linker
+ */
+ private $linker;
+
+ /**
+ * @var string
+ */
+ private $template = '';
+
+ /**
+ * @param array $params
+ */
+ public function __construct( array $params ) {
+ $this->params = $params;
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param Linker|null|false $linker
+ */
+ public function setLinker( $linker ) {
+ $this->linker = $linker;
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param OutlineTree $tree
+ *
+ * @return string
+ */
+ public function build( OutlineTree $outlineTree ) {
+ $this->tree( $outlineTree );
+
+ return $this->template;
+ }
+
+ private function tree( $outlineTree, $level = 0 ) {
+
+ if ( $outlineTree->items !== null ) {
+ foreach ( $outlineTree->items as $i => $item ) {
+ $this->template .= $this->item( $i, $item );
+ }
+ }
+
+ foreach ( $outlineTree->tree as $key => $node ) {
+ $property = $this->params['outlineproperties'][$level];
+ $class = $this->params['template'] . '-section-' . strtolower( str_replace( ' ', '-', $property ) );
+
+ $this->template .= "<div class='$class'>";
+ $this->template .= $this->open( $this->params['template'] . "-header" );
+ $this->template .= $this->parameter( $property, $key );
+ $this->template .= $this->parameter( "#outlinelevel", $level );
+ $this->template .= $this->parameter( "#itemcount", $node->leafCount );
+ $this->template .= $this->parameter( "#userparam", $this->params['userparam'] );
+ $this->template .= $this->close();
+ $this->template .= "<div class='" . $this->params['template'] . "-items'>";
+ $this->tree( $node, $level + 1 );
+ $this->template .= "</div>";
+ $this->template .= "</div>";
+ }
+ }
+
+ private function item( $i, $item ) {
+
+ $first_col = true;
+ $template = '';
+ $linker = $this->params['link'] === 'all' ? $this->linker : null;
+ $itemnumber = 0;
+
+ foreach ( $item->row as $resultArray ) {
+
+ $printRequest = $resultArray->getPrintRequest();
+ $val = $printRequest->getText( SMW_OUTPUT_WIKI, null );
+
+ if ( in_array( $val, $this->params['outlineproperties'] ) ) {
+ continue;
+ }
+
+ while ( ( $dv = $resultArray->getNextDataValue() ) !== false ) {
+ $template .= $this->open( $this->params['template'] . '-item' );
+ $template .= $this->parameter( "#itemsection", $i );
+
+ $template .= $this->parameter( "#itemnumber", $itemnumber );
+ $template .= $this->parameter( "#userparam", $this->params['userparam'] );
+
+ $template .= $this->itemText( $dv, $linker, $printRequest, $first_col );
+ $template .= $this->close();
+
+ $itemnumber++;
+ }
+ }
+
+ return "<div class='" . $this->params['template'] . "-item'>" . $template . '</div>';
+ }
+
+ private function itemText( $dv, $linker, $printRequest, &$first_col ) {
+
+ if ( $first_col && $printRequest->isMode( PrintRequest::PRINT_THIS ) ) {
+ $first_col = false;
+
+ if ( $linker === null && ( $caption = $dv->getDisplayTitle() ) !== '' ) {
+ $dv->setCaption( $caption );
+ }
+
+ $text = $dv->getShortText(
+ SMW_OUTPUT_WIKI,
+ $this->params['link'] === 'subject' ? $this->linker : $linker
+ );
+
+ return $this->parameter( "#itemsubject", $text );
+ }
+
+ $text = $dv->getShortText(
+ SMW_OUTPUT_WIKI,
+ $linker
+ );
+
+ return $this->parameter( $printRequest->getLabel(), $text );
+ }
+
+ private function open( $v ) {
+ return "{{" . $v;
+ }
+
+ private function parameter( $k, $v ) {
+ return " |$k=$v";
+ }
+
+ private function close() {
+ return "}}";
+ }
+
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/src/iCalendar/iCalendarFileExportPrinter.php b/www/wiki/extensions/SemanticResultFormats/src/iCalendar/iCalendarFileExportPrinter.php
index 90c47a97..e13e243a 100644
--- a/www/wiki/extensions/SemanticResultFormats/src/iCalendar/iCalendarFileExportPrinter.php
+++ b/www/wiki/extensions/SemanticResultFormats/src/iCalendar/iCalendarFileExportPrinter.php
@@ -2,6 +2,7 @@
namespace SRF\iCalendar;
+use SMW\Query\Result\ResultArray;
use SMWDataValueFactory as DataValueFactory;
use SMWExportPrinter as FileExportPrinter;
use SMWQuery as Query;
@@ -219,15 +220,20 @@ class iCalendarFileExportPrinter extends FileExportPrinter {
/**
* Returns the iCal for a single item.
+ *
+ * @param ResultArray[] $row
+ *
+ * @return string
+ * @throws \MWException
*/
private function getIcalForItem( array $row ) {
$result = '';
- $subject = $row[0]->getResultSubject(); // get the object
- $subject = DataValueFactory::getInstance()->newDataValueByItem( $subject, null );
+ $subjectDI = $row[0]->getResultSubject(); // get the object
+ $subjectDV = DataValueFactory::getInstance()->newDataValueByItem( $subjectDI, null );
$params = [
- 'summary' => $subject->getShortWikiText()
+ 'summary' => $subjectDV->getShortWikiText()
];
$from = null;
@@ -274,7 +280,7 @@ class iCalendarFileExportPrinter extends FileExportPrinter {
$this->icalTimezoneFormatter->calcTransitions( $from, $to );
- $title = $subject->getTitle();
+ $title = $subjectDI->getTitle();
$timestamp = WikiPage::factory( $title )->getTimestamp();
$url = $title->getFullURL();
diff --git a/www/wiki/extensions/SemanticResultFormats/src/vCard/Address.php b/www/wiki/extensions/SemanticResultFormats/src/vCard/Address.php
index 3a8d31be..9145bb21 100644
--- a/www/wiki/extensions/SemanticResultFormats/src/vCard/Address.php
+++ b/www/wiki/extensions/SemanticResultFormats/src/vCard/Address.php
@@ -30,12 +30,31 @@ class Address {
* @param string $type
* @param array $adr
*/
- public function __construct( $type, array $adr ) {
+ public function __construct( $type, array $adr = [] ) {
$this->type = $type;
$this->adr = $adr;
}
/**
+ * @since 3.1
+ *
+ * @return boolean
+ */
+ public function hasAddress() {
+ return $this->adr !== [];
+ }
+
+ /**
+ * @since 3.1
+ *
+ * @param string $key
+ * @param string $value
+ */
+ public function set( $key, $value ) {
+ $this->adr[$key] = $value;
+ }
+
+ /**
* @return string
*/
public function text() {
diff --git a/www/wiki/extensions/SemanticResultFormats/src/vCard/vCard.php b/www/wiki/extensions/SemanticResultFormats/src/vCard/vCard.php
index a52d7aa8..e5d6e0f9 100644
--- a/www/wiki/extensions/SemanticResultFormats/src/vCard/vCard.php
+++ b/www/wiki/extensions/SemanticResultFormats/src/vCard/vCard.php
@@ -79,6 +79,16 @@ class vCard {
}
/**
+ * @since 3.1
+ *
+ * @param string $key
+ * @param string $value
+ */
+ public function set( $key, $value ) {
+ $this->vcard[$key] = $value;
+ }
+
+ /**
* @since 3.0
*
* @param boolean $isPublic
@@ -146,7 +156,9 @@ class vCard {
}
foreach ( $vcard['address'] as $a ) {
- $text .= $a->text();
+ if ( $a->hasAddress() ) {
+ $text .= $a->text();
+ }
}
foreach ( $vcard['tel'] as $t ) {
diff --git a/www/wiki/extensions/SemanticResultFormats/src/vCard/vCardFileExportPrinter.php b/www/wiki/extensions/SemanticResultFormats/src/vCard/vCardFileExportPrinter.php
index 0769213d..6ca75fad 100644
--- a/www/wiki/extensions/SemanticResultFormats/src/vCard/vCardFileExportPrinter.php
+++ b/www/wiki/extensions/SemanticResultFormats/src/vCard/vCardFileExportPrinter.php
@@ -22,6 +22,7 @@ use WikiPage;
* @author Markus Krötzsch
* @author Denny Vrandecic
* @author Frank Dengler
+ * @author mwjames
*/
class vCardFileExportPrinter extends FileExportPrinter {
@@ -56,7 +57,14 @@ class vCardFileExportPrinter extends FileExportPrinter {
*/
public function getFileName( QueryResult $queryResult ) {
- if ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
+ if ( $this->params['filename'] !== '' ) {
+
+ if ( strpos( $this->params['filename'], '.vcf' ) === false ) {
+ $this->params['filename'] .= '.vcf';
+ }
+
+ return str_replace( ' ', '_', $this->params['filename'] );
+ } elseif ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
return str_replace( ' ', '_', $this->getSearchLabel( SMW_OUTPUT_WIKI ) ) . '.vcf';
}
@@ -75,44 +83,71 @@ class vCardFileExportPrinter extends FileExportPrinter {
}
/**
+ * @see ResultPrinter::getParamDefinitions
+ *
+ * @since 1.8
+ *
+ * {@inheritDoc}
+ */
+ public function getParamDefinitions( array $definitions ) {
+ $params = parent::getParamDefinitions( $definitions );
+
+ $params['filename'] = [
+ 'message' => 'smw-paramdesc-filename',
+ 'default' => 'vCard.vcf',
+ ];
+
+ return $params;
+ }
+
+ /**
* @see ResultPrinter::getResultText
*/
- protected function getResultText( QueryResult $res, $outputmode ) {
+ protected function getResultText( QueryResult $res, $outputMode ) {
- $result = '';
+ // Always return a link for when the output mode is not a file request,
+ // a file request is normally only initiated when resolving the query
+ // via Special:Ask
+ if ( $outputMode !== SMW_OUTPUT_FILE ) {
+ return $this->getVCardLink( $res, $outputMode );
+ }
- if ( $outputmode == SMW_OUTPUT_FILE ) { // make vCard file
- $result = $this->getVCardContent( $res );
- } else { // just make link to vcard
+ return $this->getVCardContent( $res );
+ }
- if ( $this->getSearchLabel( $outputmode ) ) {
- $label = $this->getSearchLabel( $outputmode );
- } else {
- $label = wfMessage( 'srf_vcard_link' )->inContentLanguage()->text();
- }
+ private function getVCardLink( QueryResult $res, $outputMode ) {
- $link = $res->getQueryLink( $label );
- $link->setParameter( 'vcard', 'format' );
+ // Can be viewed as HTML if requested, no more parsing needed
+ $this->isHTML = $outputMode == SMW_OUTPUT_HTML;
- if ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
- $link->setParameter( $this->getSearchLabel( SMW_OUTPUT_WIKI ), 'searchlabel' );
- }
+ if ( $this->getSearchLabel( $outputMode ) ) {
+ $label = $this->getSearchLabel( $outputMode );
+ } else {
+ $label = wfMessage( 'srf_vcard_link' )->inContentLanguage()->text();
+ }
- if ( array_key_exists( 'limit', $this->params ) ) {
- $link->setParameter( $this->params['limit'], 'limit' );
- } else { // use a reasonable default limit
- $link->setParameter( 20, 'limit' );
- }
+ $link = $res->getQueryLink( $label );
+ $link->setParameter( 'vcard', 'format' );
- $result .= $link->getText( $outputmode, $this->mLinker );
+ if ( $this->getSearchLabel( SMW_OUTPUT_WIKI ) != '' ) {
+ $link->setParameter( $this->getSearchLabel( SMW_OUTPUT_WIKI ), 'searchlabel' );
+ }
- // yes, our code can be viewed as HTML if requested, no more parsing needed
- $this->isHTML = ( $outputmode == SMW_OUTPUT_HTML );
+ if ( array_key_exists( 'limit', $this->params ) ) {
+ $link->setParameter( $this->params['limit'], 'limit' );
+ } else { // use a reasonable default limit
+ $link->setParameter( 20, 'limit' );
}
- return $result;
+ return $link->getText( $outputMode, $this->mLinker );
}
+ /**
+ * @param QueryResult $res
+ *
+ * @return string
+ * @throws \MWException
+ */
private function getVCardContent( $res ) {
$result = '';
@@ -147,250 +182,232 @@ class vCardFileExportPrinter extends FileExportPrinter {
private function newVCard( $row, $uri, $text, $timestamp, $isPublic ) {
- // name
- $prefix = ''; // something like 'Dr.'
- $firstname = ''; // given name
- $additionalname = ''; // typically the "middle" name (second first name)
- $lastname = ''; // family name
- $suffix = ''; // things like "jun." or "sen."
- $fullname = ''; // the "formatted name", may be independent from first/lastname & co.
- // contacts
- $emails = [];
- $tels = [];
- $addresses = [];
- // organisational details:
- $organization = ''; // any string
- $jobtitle = '';
- $role = '';
- $department = '';
- // other stuff
- $category = '';
- $birthday = ''; // a date
- $url = ''; // homepage, a legal URL
- $note = ''; // any text
- $workaddress = false;
- $homeaddress = false;
-
- $workpostofficebox = '';
- $workextendedaddress = '';
- $workstreet = '';
- $worklocality = '';
- $workregion = '';
- $workpostalcode = '';
- $workcountry = '';
-
- $homepostofficebox = '';
- $homeextendedaddress = '';
- $homestreet = '';
- $homelocality = '';
- $homeregion = '';
- $homepostalcode = '';
- $homecountry = '';
-
- foreach ( $row as $field ) {
- // later we may add more things like a generic
- // mechanism to add non-standard vCard properties as well
- // (could include funny things like geo, description etc.)
- $req = $field->getPrintRequest();
-
- switch ( strtolower( $req->getLabel() ) ) {
- case "name":
- $fullname = $this->getFieldValue( $field );
- break;
- case "prefix":
- $prefix = $this->getFieldCommaList( $field );
- break;
- case "suffix":
- $suffix = $this->getFieldCommaList( $field );
- break;
- case "firstname":
- // save only the first
- $firstname = $this->getFieldValue( $field );
- break;
- case "extraname":
- $additionalname = $this->getFieldCommaList( $field );
- break;
- case "lastname":
- // save only the first
- $lastname = $this->getFieldValue( $field );
- break;
- case "note":
- $note = $this->getFieldCommaList( $field );
- break;
- case "category":
- $category = $this->getFieldCommaList( $field );
- case "email":
- while ( $value = $field->getNextDataValue() ) {
- $emails[] = new Email( 'INTERNET', $value->getShortWikiText() );
- }
- break;
- case "workphone":
- while ( $value = $field->getNextDataValue() ) {
- $tels[] = new Tel( 'WORK', $value->getShortWikiText() );
- }
- break;
- case "cellphone":
- while ( $value = $field->getNextDataValue() ) {
- $tels[] = new Tel( 'CELL', $value->getShortWikiText() );
- }
- break;
- case "homephone":
- while ( $value = $field->getNextDataValue() ) {
- $tels[] = new Tel( 'HOME', $value->getShortWikiText() );
- }
- break;
- case "organization":
- $organization = $this->getFieldValue( $field );
- break;
- case "workpostofficebox":
- if ( ( $workpostofficebox = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "workextendedaddress":
- if ( ( $workextendedaddress = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "workstreet":
- if ( ( $workstreet = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "worklocality":
- if ( ( $worklocality = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "workregion":
- if ( ( $workregion = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "workpostalcode":
- if ( ( $workpostalcode = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "workcountry":
- if ( ( $workcountry = $this->getFieldValue( $field ) ) !== '' ) {
- $workaddress = true;
- }
- break;
- case "homepostofficebox":
- if ( ( $homepostofficebox = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "homeextendedaddress":
- if ( ( $homeextendedaddress = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "homestreet":
- if ( ( $homestreet = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "homelocality":
- if ( ( $homelocality = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "homeregion":
- if ( ( $homeregion = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "homepostalcode":
- if ( ( $homepostalcode = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "homecountry":
- if ( ( $homecountry = $this->getFieldValue( $field ) ) !== '' ) {
- $homeaddress = true;
- }
- break;
- case "birthday":
- if ( $req->getTypeID() == TimeValue::TYPE_ID ) {
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $birthday = $value->getISO8601Date();
- }
- }
- break;
- case "homepage":
- if ( $req->getTypeID() == "_uri" ) {
- $value = $field->getNextDataValue();
- if ( $value !== false ) {
- $url = $value->getWikiValue();
- }
- }
- break;
- }
- }
-
- if ( $workaddress ) {
- $addresses[] = new Address (
- 'WORK',
- [
- 'pobox' => $workpostofficebox,
- 'ext' => $workextendedaddress,
- 'street' => $workstreet,
- 'locality' => $worklocality,
- 'region' => $workregion,
- 'code' => $workpostalcode,
- 'country' => $workcountry
- ]
- );
- }
-
- if ( $homeaddress ) {
- $addresses[] = new Address (
- 'HOME',
- [
- 'pobox' => $homepostofficebox,
- 'ext' => $homeextendedaddress,
- 'street' => $homestreet,
- 'locality' => $homelocality,
- 'region' => $homeregion,
- 'code' => $homepostalcode,
- 'country' => $homecountry
- ]
- );
- }
-
$vCard = new vCard(
$uri,
$text,
[
- 'prefix' => $prefix,
- 'firstname' => $firstname,
- 'lastname' => $lastname,
- 'additionalname' => $additionalname,
- 'suffix' => $suffix,
- 'fullname' => $fullname,
- 'tel' => $tels,
- 'address' => $addresses,
- 'email' => $emails,
- 'birthday' => $birthday,
- 'title' => $jobtitle,
- 'role' => $role,
- 'organization' => $organization,
- 'department' => $department,
- 'category' => $category,
- 'url' => $url,
- 'note' => $note
+
+ // something like 'Dr.'
+ 'prefix' => '',
+
+ // given name
+ 'firstname' => '',
+
+ // family name
+ 'lastname' => '',
+
+ // typically the "middle" name (second first name)
+ 'additionalname' => '',
+
+ // things like "jun." or "sen."
+ 'suffix' => '',
+
+ // the "formatted name", may be independent from
+ // first/lastname & co.
+ 'fullname' => '',
+
+ 'tel' => [],
+ 'address' => [],
+ 'email' => [],
+ // a date
+ 'birthday' => '',
+
+ // organisational details
+ 'organization' => '',
+ 'department' => '',
+ 'title' => '',
+ 'role' => '',
+ 'category' => '',
+
+ // homepage, a legal URL
+ 'url' => '',
+
+ // any text
+ 'note' => ''
]
);
+ $tels = [];
+ $emails = [];
+
+ $addresses['work'] = new Address( 'WORK' );
+ $addresses['home'] = new Address( 'HOME' );
+
+ foreach ( $row as $field ) {
+ $this->mapField( $field, $vCard, $tels, $addresses, $emails );
+ }
+
+ $vCard->set( 'tel', $tels );
+ $vCard->set( 'address', $addresses );
+ $vCard->set( 'email', $emails );
+
$vCard->isPublic( $isPublic );
$vCard->setTimestamp( $timestamp );
return $vCard;
}
+ private function isPublic() {
+ // heuristic for setting confidentiality level of vCard:
+ global $wgGroupPermissions;
+
+ if ( ( array_key_exists( '*', $wgGroupPermissions ) ) && ( array_key_exists(
+ 'read',
+ $wgGroupPermissions['*']
+ ) ) ) {
+ return $wgGroupPermissions['*']['read'];
+ }
+
+ return true;
+ }
+
+ private function mapField( $field, $vCard, &$tels, &$addresses, &$emails ) {
+
+ $printRequest = $field->getPrintRequest();
+
+ switch ( strtolower( $printRequest->getLabel() ) ) {
+ case "name":
+ $vCard->set( 'fullname', $this->getFieldValue( $field ) );
+ break;
+ case "prefix":
+ $vCard->set( 'prefix', $this->getFieldCommaList( $field ) );
+ break;
+ case "suffix":
+ $vCard->set( 'suffix', $this->getFieldCommaList( $field ) );
+ break;
+ case "firstname":
+ // save only the first
+ $vCard->set( 'firstname', $this->getFieldValue( $field ) );
+ break;
+ case "additionalname":
+ case "extraname":
+ $vCard->set( 'additionalname', $this->getFieldCommaList( $field ) );
+ break;
+ case "lastname":
+ // save only the first
+ $vCard->set( 'lastname', $this->getFieldValue( $field ) );
+ break;
+ case "note":
+ $vCard->set( 'note', $this->getFieldCommaList( $field ) );
+ break;
+ case "category":
+ $vCard->set( 'category', $this->getFieldCommaList( $field ) );
+ case "email":
+ while ( $value = $field->getNextDataValue() ) {
+ $emails[] = new Email( 'INTERNET', $value->getShortWikiText() );
+ }
+ break;
+ case "workphone":
+ while ( $value = $field->getNextDataValue() ) {
+ $tels[] = new Tel( 'WORK', $value->getShortWikiText() );
+ }
+ break;
+ case "cellphone":
+ while ( $value = $field->getNextDataValue() ) {
+ $tels[] = new Tel( 'CELL', $value->getShortWikiText() );
+ }
+ break;
+ case "homephone":
+ while ( $value = $field->getNextDataValue() ) {
+ $tels[] = new Tel( 'HOME', $value->getShortWikiText() );
+ }
+ break;
+ case "organization":
+ $vCard->set( 'organization', $this->getFieldValue( $field ) );
+ break;
+ case "workpostofficebox":
+ if ( ( $workpostofficebox = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'pobox', $workpostofficebox );
+ }
+ break;
+ case "workextendedaddress":
+ if ( ( $workextendedaddress = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'ext', $workextendedaddress );
+ }
+ break;
+ case "workstreet":
+ if ( ( $workstreet = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'street', $workstreet );
+ }
+ break;
+ case "worklocality":
+ if ( ( $worklocality = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'locality', $worklocality );
+ }
+ break;
+ case "workregion":
+ if ( ( $workregion = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'region', $workregion );
+ }
+ break;
+ case "workpostalcode":
+ if ( ( $workpostalcode = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'code', $workpostalcode );
+ }
+ break;
+ case "workcountry":
+ if ( ( $workcountry = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['work']->set( 'country', $workcountry );
+ }
+ break;
+ case "homepostofficebox":
+ if ( ( $homepostofficebox = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'pobox', $homepostofficebox );
+ }
+ break;
+ case "homeextendedaddress":
+ if ( ( $homeextendedaddress = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'ext', $homeextendedaddress );
+ }
+ break;
+ case "homestreet":
+ if ( ( $homestreet = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'street', $homestreet );
+ }
+ break;
+ case "homelocality":
+ if ( ( $homelocality = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'locality', $homelocality );
+ }
+ break;
+ case "homeregion":
+ if ( ( $homeregion = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'region', $homeregion );
+ }
+ break;
+ case "homepostalcode":
+ if ( ( $homepostalcode = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'code', $homepostalcode );
+ }
+ break;
+ case "homecountry":
+ if ( ( $homecountry = $this->getFieldValue( $field ) ) !== '' ) {
+ $addresses['home']->set( 'country', $homecountry );
+ }
+ break;
+ case "birthday":
+ if ( $printRequest->getTypeID() == TimeValue::TYPE_ID ) {
+ $value = $field->getNextDataValue();
+
+ if ( $value !== false ) {
+ $birthday = $value->getISO8601Date();
+ $vCard->set( 'birthday', $birthday );
+ }
+ }
+ break;
+ case "homepage":
+ if ( $printRequest->getTypeID() == "_uri" ) {
+ $value = $field->getNextDataValue();
+
+ if ( $value !== false ) {
+ $url = $value->getWikiValue();
+ $vCard->set( 'url', $url );
+ }
+ }
+ break;
+ }
+ }
+
private function getFieldCommaList( $field ) {
$list = '';
@@ -413,18 +430,4 @@ class vCardFileExportPrinter extends FileExportPrinter {
return $v;
}
- private function isPublic() {
- // heuristic for setting confidentiality level of vCard:
- global $wgGroupPermissions;
-
- if ( ( array_key_exists( '*', $wgGroupPermissions ) ) && ( array_key_exists(
- 'read',
- $wgGroupPermissions['*']
- ) ) ) {
- return $wgGroupPermissions['*']['read'];
- }
-
- return true;
- }
-
}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/bootstrap.php b/www/wiki/extensions/SemanticResultFormats/tests/bootstrap.php
index fab8d4df..b8d09067 100644
--- a/www/wiki/extensions/SemanticResultFormats/tests/bootstrap.php
+++ b/www/wiki/extensions/SemanticResultFormats/tests/bootstrap.php
@@ -14,3 +14,7 @@ $autoloader = require $path;
$autoloader->addPsr4( 'SRF\\Tests\\', __DIR__ . '/phpunit' );
$autoloader->addPsr4( 'SMW\\Test\\', __DIR__ . '/../../SemanticMediaWiki/tests/phpunit' );
$autoloader->addPsr4( 'SMW\\Tests\\', __DIR__ . '/../../SemanticMediaWiki/tests/phpunit' );
+
+$autoloader->addClassMap( [
+ 'SRF\Tests\ResultPrinterReflector' => __DIR__ . '/phpunit/ResultPrinterReflector.php',
+] );
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-0.bib b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-0.bib
new file mode 100644
index 00000000..6f076aef
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-0.bib
@@ -0,0 +1,2 @@
+@Book{,
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-1.bib b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-1.bib
new file mode 100644
index 00000000..8c65f8f1
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-1.bib
@@ -0,0 +1,10 @@
+@Incollection{maskin1985ttoiineas,
+ address = "Cambridge",
+ author = "Eric S. Maskin",
+ booktitle = "Social Goals and Social Organization",
+ editor = "Leonid Hurwicz, David Schmeidler and Hugo Sonnenschein",
+ pages = "173-204",
+ publisher = "Cambridge University Press",
+ title = "The theory of implementation in nash equilibrium: a survey",
+ year = "1985",
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-2.bib b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-2.bib
new file mode 100644
index 00000000..5a1d6c5a
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-2.bib
@@ -0,0 +1,8 @@
+@Book{abramowitz1964homf,
+ address = "New York",
+ author = "Milton Abramowitz and Irene A. Stegun",
+ edition = "ninth Dover printing, tenth GPO printing",
+ publisher = "Dover",
+ title = "Handbook of Mathematical Functions",
+ year = "1964",
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-3.bib b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-3.bib
new file mode 100644
index 00000000..b5602c23
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/Fixtures/bibtex-01-3.bib
@@ -0,0 +1,16 @@
+@Book{maskin1985ttoiineas,
+ address = "Cambridge",
+ author = "Eric S. Maskin",
+ publisher = "Cambridge University Press",
+ title = "The theory of implementation in nash equilibrium: a survey",
+ year = "1985",
+}
+
+@Book{abramowitz1964homf,
+ address = "New York",
+ author = "Milton Abramowitz and Irene A. Stegun",
+ edition = "ninth Dover printing, tenth GPO printing",
+ publisher = "Dover",
+ title = "Handbook of Mathematical Functions",
+ year = "1964",
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/JsonTestCaseScriptRunnerTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/JsonTestCaseScriptRunnerTest.php
index 458408f4..63e740fc 100644
--- a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/JsonTestCaseScriptRunnerTest.php
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/JsonTestCaseScriptRunnerTest.php
@@ -1,9 +1,6 @@
<?php
-
namespace SRF\Tests\Integration\JSONScript;
-
use SMW\Tests\Integration\JSONScript\JsonTestCaseScriptRunnerTest as SMWJsonTestCaseScriptRunnerTest;
-
/**
* @see https://github.com/SemanticMediaWiki/SemanticMediaWiki/tree/master/tests#write-integration-tests-using-json-script
*
@@ -20,7 +17,6 @@ use SMW\Tests\Integration\JSONScript\JsonTestCaseScriptRunnerTest as SMWJsonTest
* @author Stephan Gambke
*/
class JsonTestCaseScriptRunnerTest extends SMWJsonTestCaseScriptRunnerTest {
-
/**
* @see \SMW\Tests\JsonTestCaseScriptRunner::getTestCaseLocation
* @return string
@@ -28,17 +24,40 @@ class JsonTestCaseScriptRunnerTest extends SMWJsonTestCaseScriptRunnerTest {
protected function getTestCaseLocation() {
return __DIR__ . '/TestCases';
}
-
/**
* @return string[]
* @since 3.0
*/
protected function getPermittedSettings() {
$settings = parent::getPermittedSettings();
-
$settings[] = 'srfgMapProvider';
-
return $settings;
}
-}
+ /**
+ * @see JsonTestCaseScriptRunner::getDependencyDefinitions
+ */
+ protected function getDependencyDefinitions() {
+ return [
+ 'Mermaid' => [ $this, 'checkMermaidDependency' ]
+ ];
+ }
+ public function checkMermaidDependency( $val, &$reason ) {
+
+ if ( !defined( 'MERMAID_VERSION' ) ) {
+ $reason = "Dependency: Mermaid as requirement is not available!";
+ return false;
+ }
+
+ list( $compare, $requiredVersion ) = explode( ' ', $val );
+ $version = MERMAID_VERSION;
+
+ if ( !version_compare( $version, $requiredVersion, $compare ) ) {
+ $reason = "Dependency: Required version of Mermaid($requiredVersion $compare $version) is not available!";
+ return false;
+ }
+
+ return true;
+ }
+
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/bibtex-01.json b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/bibtex-01.json
new file mode 100644
index 00000000..2966fbe0
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/bibtex-01.json
@@ -0,0 +1,159 @@
+{
+ "description": "Test `format=bibtex`",
+ "setup": [
+ {
+ "page": "Has author",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "page": "Has title",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "page": "Has publisher",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "page": "Has year",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Date]]"
+ },
+ {
+ "page": "Has address",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "page": "Has edition",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "page": "Has email",
+ "namespace": "SMW_NS_PROPERTY",
+ "contents": "[[Has type::Email]]"
+ },
+ {
+ "page": "BibTex/00",
+ "contents": "[[Category:Bibtex-00]]"
+ },
+ {
+ "page": "BibTex/01",
+ "contents": "[[Category:Bibtex-01]] [[Type::incollection]] [[Has author:: Eric S. Maskin]] [[Has editor::Leonid Hurwicz]] [[Has editor::David Schmeidler]] [[Has editor::Hugo Sonnenschein]] [[Has title::The theory of implementation in nash equilibrium: a survey]] [[Has booktitle::Social Goals and Social Organization]] [[Has year::1985]] [[Has publisher::Cambridge University Press]] [[Has address::Cambridge]] [[Has pages::173-204]]"
+ },
+ {
+ "page": "BibTex/02",
+ "contents": "[[Category:Bibtex-02]] [[Has author::Milton Abramowitz]] [[Has author::Irene A. Stegun]] [[Has title::Handbook of Mathematical Functions]] [[Has year::1964]] [[Has publisher::Dover]] [[Has address::New York]] [[Has edition::ninth Dover printing, tenth GPO printing]]"
+ }
+ ],
+ "tests": [
+ {
+ "type": "special",
+ "about": "#0 `format=bibtex` empty (bibtex-01-0.bib)",
+ "special-page": {
+ "page": "Ask",
+ "request-parameters": {
+ "p": {
+ "link": "none",
+ "limit": "10",
+ "offset": "0",
+ "mainlabel": "",
+ "format": "bibtex"
+ },
+ "q": "[[Category:Bibtex-00]]",
+ "po": "?Has author=author|?Has title=title|?Has publisher=publisher|?Has year=year|?Has address=address|?Has edition=edition"
+ }
+ },
+ "assert-output": {
+ "to-contain": {
+ "contents-file" : "/../Fixtures/bibtex-01-0.bib"
+ }
+ }
+ },
+ {
+ "type": "special",
+ "about": "#1 `format=bibtex` single author, editor (bibtex-01-1.bib)",
+ "special-page": {
+ "page": "Ask",
+ "request-parameters": {
+ "p": {
+ "link": "none",
+ "limit": "10",
+ "offset": "0",
+ "mainlabel": "",
+ "format": "bibtex"
+ },
+ "q": "[[Category:Bibtex-01]]",
+ "po": "?Type=type|?Has author=author|?Has title=title|?Has publisher=publisher|?Has year=year|?Has address=address|?Has edition=edition|?Has editor=editor|?Has pages=pages|?Has booktitle=booktitle"
+ }
+ },
+ "assert-output": {
+ "to-contain": {
+ "contents-file" : "/../Fixtures/bibtex-01-1.bib"
+ }
+ }
+ },
+ {
+ "type": "special",
+ "about": "#2 `format=bibtex` multiple authors (bibtex-01-2.bib)",
+ "special-page": {
+ "page": "Ask",
+ "request-parameters": {
+ "p": {
+ "link": "none",
+ "limit": "10",
+ "offset": "0",
+ "mainlabel": "",
+ "format": "bibtex"
+ },
+ "q": "[[Category:Bibtex-02]]",
+ "po": "?Has author=author|?Has title=title|?Has publisher=publisher|?Has year=year|?Has address=address|?Has edition=edition"
+ }
+ },
+ "assert-output": {
+ "to-contain": {
+ "contents-file" : "/../Fixtures/bibtex-01-2.bib"
+ }
+ }
+ },
+ {
+ "type": "special",
+ "about": "#3 `format=bibtex` multiple records (bibtex-01-3.bib)",
+ "special-page": {
+ "page": "Ask",
+ "request-parameters": {
+ "p": {
+ "link": "none",
+ "limit": "10",
+ "offset": "0",
+ "mainlabel": "",
+ "format": "bibtex"
+ },
+ "q": "[[Category:Bibtex-02]] OR [[Category:Bibtex-01]]",
+ "po": "?Has author=author|+order=desc|?Has title=title|?Has publisher=publisher|?Has year=year|?Has address=address|?Has edition=edition"
+ }
+ },
+ "assert-output": {
+ "to-contain": {
+ "contents-file" : "/../Fixtures/bibtex-01-3.bib"
+ }
+ }
+ }
+ ],
+ "settings": {
+ "wgContLang": "en",
+ "wgLang": "en",
+ "smwgNamespacesWithSemanticLinks": {
+ "NS_MAIN": true,
+ "SMW_NS_PROPERTY": true
+ }
+ },
+ "meta": {
+ "version": "2",
+ "is-incomplete": false,
+ "debug": false
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/filtered-01.json b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/filtered-01.json
index 84feed09..d86ba5fe 100644
--- a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/filtered-01.json
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/filtered-01.json
@@ -187,9 +187,9 @@
[ "div.filtered > div.filtered-views > div.filtered-views-selectors-container > div.filtered-view-selector.filtered-table", 1 ],
"div.filtered > div.filtered-views > div.filtered-views-selectors-container > div.filtered-view-selector.filtered-table:contains('Table')",
[ "div.filtered > div.filtered-views > div.filtered-views-container > div.filtered-view.filtered-table", 1 ],
- [ "div.filtered > div.filtered-views > div.filtered-views-container > div.filtered-view.filtered-table > table > tr > th:not(:empty)", 3 ],
- [ "div.filtered > div.filtered-views > div.filtered-views-container > div.filtered-view.filtered-table > table > tr.filtered-table-item:not(:empty)", 8 ],
- [ "div.filtered > div.filtered-views > div.filtered-views-container > div.filtered-view.filtered-table > table > tr.filtered-table-item > td", 24 ]
+ [ "div.filtered > div.filtered-views > div.filtered-views-container > div.filtered-view.filtered-table > table tr > th:not(:empty)", 3 ],
+ [ "div.filtered > div.filtered-views > div.filtered-views-container > div.filtered-view.filtered-table > table tr.filtered-table-item:not(:empty)", 8 ],
+ [ "div.filtered > div.filtered-views > div.filtered-views-container > div.filtered-view.filtered-table > table tr.filtered-table-item > td", 24 ]
]
}
},
@@ -327,4 +327,4 @@
"is-incomplete": false,
"debug": false
}
-} \ No newline at end of file
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/filtered-02.json b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/filtered-02.json
index bef26e5b..03512762 100644
--- a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/filtered-02.json
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/filtered-02.json
@@ -35,7 +35,7 @@
"assert-output": {
"to-be-valid-html": 1,
"to-contain": [
- "div.filtered + span.smw-highlighter[data-title=\"Warning\"][title='No map provider specified for \"map\" view.']"
+ "div.filtered + span.smw-highlighter[data-title=\"Warning\"][title='No map provider specified for \"map\" view.'], div.filtered + p span.smw-highlighter[data-title=\"Warning\"][title='No map provider specified for \"map\" view.']"
]
}
}
@@ -53,4 +53,4 @@
"is-incomplete": false,
"debug": false
}
-} \ No newline at end of file
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/gantt-01.json b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/gantt-01.json
new file mode 100644
index 00000000..b35e5d3e
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/gantt-01.json
@@ -0,0 +1,167 @@
+{
+ "description": "Test the gantt format",
+ "requires": {
+ "Mermaid": ">= 2.0"
+ },
+ "setup": [
+ {
+ "namespace": "SMW_NS_PROPERTY",
+ "page": "Display Title",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "namespace": "SMW_NS_PROPERTY",
+ "page": "Start Date",
+ "contents": "[[Has type::Date]]"
+ },
+ {
+ "namespace": "SMW_NS_PROPERTY",
+ "page": "End Date",
+ "contents": "[[Has type::Date]]"
+ },
+ {
+ "namespace": "SMW_NS_PROPERTY",
+ "page": "Status",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "namespace": "SMW_NS_PROPERTY",
+ "page": "Priority",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "namespace": "SMW_NS_PROPERTY",
+ "page": "Related To Section",
+ "contents": "[[Has type::Page]]"
+ },
+ {
+ "namespace": "NS_TEMPLATE",
+ "page": "Task",
+ "contents": "[[Category:Task]][[Display Title::{{{title|}}}]][[Start Date::{{{start|}}}]][[End Date::{{{end|}}}]][[Status::{{{status|}}}]][[Priority::{{{priority|}}}]][[Related To Section::{{{section|}}}]]"
+ },
+ {
+ "page": "Gantt Test/Task1",
+ "contents": "{{Task |title=Task01 |start=2019-01-01 |end=2019-01-15 |status=completed |priority=high |section=First Section }}"
+ },
+ {
+ "page": "Gantt Test/Task2",
+ "contents": "{{Task |title=Task02 |start=2019-01-15 |end=2019-01-31 |status=backlog |priority=low |section=Second Section }}"
+ },
+ {
+ "page": "Gantt Test/Task3",
+ "contents": "{{Task |title=Task03 |start=2019-02-01 |end=2019-02-15 |status=open |priority=critical |section=First Section }}"
+ },
+ {
+ "page": "Gantt Test/Task4",
+ "contents": "{{Task |title=Task04 |start=2019-02-15 |end=2019-02-28 |status=done |priority=very high |section=First Section }}"
+ },
+ {
+ "page": "Example/Gantt Diagram min config",
+ "contents": "{{#ask:[[Category:Task]] |?Display Title=task |?Status=status |?Start Date=startdate |?End Date=enddate |?Related To Section=section |?Priority=priority| format=gantt }}"
+ },
+ {
+ "page": "Example/Gantt Diagram config all",
+ "contents": "{{#ask:[[Category:Task]] |?Display Title=task |?Status=status |?Start Date=startdate |?End Date=enddate |?Related To Section=section |?Priority=priority| format=gantt |theme=forest |sortkey=title |bargap=15 |barheight=40 |titletopmargin=30 |leftpadding=130}}"
+ },
+ {
+ "page": "Example/Gantt Diagram test axis format 1",
+ "contents": "{{#ask:[[Category:Task]] |?Display Title=task |?Status=status |?Start Date=startdate |?End Date=enddate |?Related To Section=section |?Priority=priority| format=gantt | axisformat=%m/%d/%Y}}"
+ },
+ {
+ "page": "Example/Gantt Diagram test axis format 2",
+ "contents": "{{#ask:[[Category:Task]] |?Display Title=task |?Status=status |?Start Date=startdate |?End Date=enddate |?Related To Section=section |?Priority=priority| format=gantt | axisformat=%m/%Y}}"
+ },
+ {
+ "page": "Example/Gantt Diagram test axis format 3",
+ "contents": "{{#ask:[[Category:Task]] |?Display Title=task |?Status=status |?Start Date=startdate |?End Date=enddate |?Related To Section=section |?Priority=priority| format=gantt | axisformat=%B-%Y}}"
+ },
+ {
+ "page": "Example/Gantt Diagram mapping test 1",
+ "contents": "{{#ask:[[Category:Task]] |?Display Title=task |?Status=status |?Start Date=startdate |?End Date=enddate |?Related To Section=section |?Priority=priority| format=gantt |theme=forest |sortkey=title |bargap=15 |barheight=40 |titletopmargin=30 |leftpadding=130}}"
+ },
+ {
+ "page": "Example/Gantt priority mapping test",
+ "contents": "{{#ask:[[Category:Task]] |?Display Title=task |?Start Date=startdate |?End Date=enddate |?Related To Section=section |?Status=status |?Priority=priority| |prioritymapping=critical=>crit; very high=>crit| format=gantt |theme=forest |sortkey=title |bargap=15 |barheight=40 |titletopmargin=30 |leftpadding=130}}"
+ },
+ {
+ "page": "Example/Gantt status mapping test",
+ "contents": "{{#ask:[[Category:Task]] |?Display Title=task |?Start Date=startdate |?End Date=enddate |?Related To Section=section |?Status=status |?Priority=priority| |statusmapping=backlog=>active;open=>active;done=>done| format=gantt |theme=forest |sortkey=title |bargap=15 |barheight=40 |titletopmargin=30 |leftpadding=130}}"
+ }
+ ],
+ "tests": [
+ {
+ "type": "parser-html",
+ "about": "Test Selector of created SVG",
+ "subject": "Example/Gantt Diagram min config",
+ "assert-output": {
+ "to-be-valid-html": 1,
+ "to-contain": [
+ ["div.mw-parser-output > div.srf-gantt",1]
+ ]
+ }
+ },
+ {
+ "type": "parser",
+ "about": "Test gantt min config",
+ "subject": "Example/Gantt Diagram min config",
+ "assert-output": {
+ "to-contain": [
+ "data-mermaid=\"&#123;&quot;content&quot;:&quot;gantt\\ndateFormat YYYY-MM-DD\\naxisFormat&#160;%m\\/%d\\/%Y\\nsection First Section\\nTask01\\t&#160;:2019-01-01, 2019-01-15\\nTask03\\t&#160;:2019-02-01, 2019-02-15\\nTask04\\t&#160;:2019-02-15, 2019-02-28\\nsection Second Section\\nTask02\\t&#160;:2019-01-15, 2019-01-31\\n&quot;,&quot;config&quot;:&#123;&quot;theme&quot;:&quot;default&quot;,&quot;gantt&quot;:&#123;&quot;leftPadding&quot;:75,&quot;titleTopMargin&quot;:25,&quot;barHeight&quot;:20,&quot;barGap&quot;:4&#125;&#125;&#125;\"><div class=\"mermaid-dots\"></div></div>"
+ ]
+ }
+ },
+ {
+ "type": "parser",
+ "about": "Test gantt when all config params set",
+ "subject": "Example/Gantt Diagram config all",
+ "assert-output": {
+ "to-contain": [
+ "data-mermaid=\"&#123;&quot;content&quot;:&quot;gantt\\ndateFormat YYYY-MM-DD\\naxisFormat&#160;%m\\/%d\\/%Y\\nsection First Section\\nTask01\\t&#160;:2019-01-01, 2019-01-15\\nTask03\\t&#160;:2019-02-01, 2019-02-15\\nTask04\\t&#160;:2019-02-15, 2019-02-28\\nsection Second Section\\nTask02\\t&#160;:2019-01-15, 2019-01-31\\n&quot;,&quot;config&quot;:&#123;&quot;theme&quot;:&quot;forest&quot;,&quot;gantt&quot;:&#123;&quot;leftPadding&quot;:130,&quot;titleTopMargin&quot;:30,&quot;barHeight&quot;:40,&quot;barGap&quot;:15&#125;&#125;&#125;\"><div class=\"mermaid-dots\"></div></div>"
+ ]
+ }
+ },
+ {
+ "type": "parser",
+ "about": "Test axis forma %m/%d/%Y",
+ "subject": "Example/Gantt Diagram test axis format 1",
+ "assert-output": {
+ "to-contain": [
+ "axisFormat&#160;%m\\/%d\\/%Y"
+ ]
+ }
+ },
+ {
+ "type": "parser",
+ "about": "Test priority mapping",
+ "subject": "Example/Gantt priority mapping test",
+ "assert-output": {
+ "to-contain": [
+ "data-mermaid=\"&#123;&quot;content&quot;:&quot;gantt\\ndateFormat YYYY-MM-DD\\naxisFormat&#160;%m\\/%d\\/%Y\\nsection First Section\\nTask01\\t&#160;:2019-01-01, 2019-01-15\\nTask03\\t&#160;:crit, 2019-02-01, 2019-02-15\\nTask04\\t&#160;:crit, 2019-02-15, 2019-02-28\\nsection Second Section\\nTask02\\t&#160;:2019-01-15, 2019-01-31\\n&quot;,&quot;config&quot;:&#123;&quot;theme&quot;:&quot;forest&quot;,&quot;gantt&quot;:&#123;&quot;leftPadding&quot;:130,&quot;titleTopMargin&quot;:30,&quot;barHeight&quot;:40,&quot;barGap&quot;:15&#125;&#125;&#125;\"><div class=\"mermaid-dots\"></div></div>"
+ ]
+ }
+ },
+ {
+ "type": "parser",
+ "about": "Test priority mapping",
+ "subject": "Example/Gantt status mapping test",
+ "assert-output": {
+ "to-contain": [
+ "data-mermaid=\"&#123;&quot;content&quot;:&quot;gantt\\ndateFormat YYYY-MM-DD\\naxisFormat&#160;%m\\/%d\\/%Y\\nsection First Section\\nTask01\\t&#160;:2019-01-01, 2019-01-15\\nTask03\\t&#160;:active, 2019-02-01, 2019-02-15\\nTask04\\t&#160;:done, 2019-02-15, 2019-02-28\\nsection Second Section\\nTask02\\t&#160;:active, 2019-01-15, 2019-01-31\\n&quot;,&quot;config&quot;:&#123;&quot;theme&quot;:&quot;forest&quot;,&quot;gantt&quot;:&#123;&quot;leftPadding&quot;:130,&quot;titleTopMargin&quot;:30,&quot;barHeight&quot;:40,&quot;barGap&quot;:15&#125;&#125;&#125;\"><div class=\"mermaid-dots\"></div></div>"
+ ]
+ }
+ }
+ ],
+ "settings": {
+ "wgContLang": "en",
+ "wgLang": "en",
+ "smwgNamespacesWithSemanticLinks": {
+ "NS_MAIN": true,
+ "SMW_NS_PROPERTY": true
+ }
+ },
+ "meta": {
+ "version": "2",
+ "is-incomplete": false,
+ "debug": true
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/outline-01.json b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/outline-01.json
new file mode 100644
index 00000000..f29c8e30
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/outline-01.json
@@ -0,0 +1,101 @@
+{
+ "description": "Test `format=outline` template output",
+ "setup": [
+ {
+ "namespace": "SMW_NS_PROPERTY",
+ "page": "Assigned to",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "namespace": "SMW_NS_PROPERTY",
+ "page": "Severity",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "namespace": "NS_TEMPLATE",
+ "page": "outline-test-header",
+ "contents": "<includeonly> #outlinelevel: {{{#outlinelevel}}}, #itemcount: {{{#itemcount}}}, Severity: {{{Severity}}}</includeonly>"
+ },
+ {
+ "namespace": "NS_TEMPLATE",
+ "page": "outline-test-item",
+ "contents": "<includeonly> #itemsubject: {{{#itemsubject}}}, #itemsection: {{{#itemsection}}}, #itemnumber: {{{#itemnumber}}}, Assigned to: {{{Assigned to}}}</includeonly>"
+ },
+ {
+ "page": "SRF/Outline/1",
+ "contents": "[[Assigned to::John]] [[Severity::Normal]] [[Category:Outline]]"
+ },
+ {
+ "page": "SRF/Outline/2",
+ "contents": "[[Assigned to::Jane]] [[Severity::Urgent]] [[Category:Outline]]"
+ },
+ {
+ "page": "SRF/Outline/3",
+ "contents": "[[Assigned to::田中]] [[Severity::Urgent]] [[Category:Outline]]"
+ },
+ {
+ "page": "SRF/Outline/Q.1",
+ "contents": "{{#ask: [[Category:Outline]] |?Severity |?Assigned to |format=outline |template=outline-test |sort=Severity,Assigned to |outlineproperties=Severity |link=none }}"
+ },
+ {
+ "page": "SRF/Outline/Q.2",
+ "contents": "{{#ask: [[Category:Outline]] |?Severity |?Assigned to |format=outline |template=outline-test |sort=Severity,Assigned to |outlineproperties=Severity,Assigned to |link=none }}"
+ }
+ ],
+ "tests": [
+ {
+ "type": "parser",
+ "about": "#0 (`outlineproperties=Severity`)",
+ "subject": "SRF/Outline/Q.1",
+ "assert-output": {
+ "to-contain": [
+ "<div class=\"outline-test-section-severity\"> #outlinelevel: 0, #itemcount: 1, Severity: Normal",
+ "<div class=\"outline-test-items\"><div class=\"outline-test-item\">",
+ "#itemsubject: SRF/Outline/1, #itemsection: 0, #itemnumber: 0, Assigned to: {{{Assigned to}}}",
+ "#itemsubject: {{{#itemsubject}}}, #itemsection: 0, #itemnumber: 1, Assigned to: John</div></div></div>",
+ "<div class=\"outline-test-section-severity\"> #outlinelevel: 0, #itemcount: 2, Severity: Urgent",
+ "<div class=\"outline-test-items\"><div class=\"outline-test-item\">",
+ "#itemsubject: SRF/Outline/2, #itemsection: 0, #itemnumber: 0, Assigned to: {{{Assigned to}}}",
+ "#itemsubject: {{{#itemsubject}}}, #itemsection: 0, #itemnumber: 1, Assigned to: Jane</div>",
+ "#itemsubject: SRF/Outline/3, #itemsection: 1, #itemnumber: 0, Assigned to: {{{Assigned to}}}",
+ "#itemsubject: {{{#itemsubject}}}, #itemsection: 1, #itemnumber: 1, Assigned to: 田中</div></div></div>"
+ ]
+ }
+ },
+ {
+ "type": "parser",
+ "about": "#1 (`outlineproperties=Severity,Assigned to`)",
+ "subject": "SRF/Outline/Q.2",
+ "assert-output": {
+ "to-contain": [
+ "<div class=\"outline-test-section-severity\"> #outlinelevel: 0, #itemcount: 1, Severity: Normal",
+ "<div class=\"outline-test-items\"><div class=\"outline-test-section-assigned-to\">",
+ "#outlinelevel: 1, #itemcount: 1, Severity: {{{Severity}}}",
+ "<div class=\"outline-test-items\"><div class=\"outline-test-item\">",
+ "#itemsubject: SRF/Outline/1, #itemsection: 0, #itemnumber: 0, Assigned to: {{{Assigned to}}}</div></div></div></div></div>",
+ "<div class=\"outline-test-section-severity\"> #outlinelevel: 0, #itemcount: 2, Severity: Urgent",
+ "<div class=\"outline-test-items\"><div class=\"outline-test-section-assigned-to\">",
+ "#outlinelevel: 1, #itemcount: 1, Severity: {{{Severity}}}",
+ "<div class=\"outline-test-items\"><div class=\"outline-test-item\">",
+ "#itemsubject: SRF/Outline/2, #itemsection: 0, #itemnumber: 0, Assigned to: {{{Assigned to}}}</div></div></div>",
+ "<div class=\"outline-test-section-assigned-to\"> #outlinelevel: 1, #itemcount: 1, Severity: {{{Severity}}}",
+ "<div class=\"outline-test-items\"><div class=\"outline-test-item\">",
+ "#itemsubject: SRF/Outline/3, #itemsection: 0, #itemnumber: 0, Assigned to: {{{Assigned to}}}</div></div></div></div></div>"
+ ]
+ }
+ }
+ ],
+ "settings": {
+ "wgContLang": "en",
+ "wgLang": "en",
+ "smwgNamespacesWithSemanticLinks": {
+ "NS_MAIN": true,
+ "SMW_NS_PROPERTY": true
+ }
+ },
+ "meta": {
+ "version": "2",
+ "is-incomplete": false,
+ "debug": false
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/outline-02.json b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/outline-02.json
new file mode 100644
index 00000000..d9122f8d
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/outline-02.json
@@ -0,0 +1,105 @@
+{
+ "description": "Test `format=outline` list output",
+ "setup": [
+ {
+ "namespace": "SMW_NS_PROPERTY",
+ "page": "Assigned to",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "namespace": "SMW_NS_PROPERTY",
+ "page": "Severity",
+ "contents": "[[Has type::Text]]"
+ },
+ {
+ "page": "SRF/Outline/1",
+ "contents": "[[Assigned to::John]] [[Severity::Normal]] [[Category:Outline]]"
+ },
+ {
+ "page": "SRF/Outline/2",
+ "contents": "[[Assigned to::Jane]] [[Severity::Urgent]] [[Category:Outline]]"
+ },
+ {
+ "page": "SRF/Outline/3",
+ "contents": "[[Assigned to::田中]] [[Severity::Urgent]] [[Category:Outline]]"
+ },
+ {
+ "page": "SRF/Outline/Q.1",
+ "contents": "{{#ask: [[Category:Outline]] |?Severity |?Assigned to |format=outline |sort=Severity,Assigned to |outlineproperties=Severity |link=none }}"
+ },
+ {
+ "page": "SRF/Outline/Q.2",
+ "contents": "{{#ask: [[Category:Outline]] |?Severity |?Assigned to |format=outline |sort=Severity,Assigned to |outlineproperties=Severity,Assigned to |link=none }}"
+ }
+ ],
+ "tests": [
+ {
+ "type": "parser",
+ "about": "#0 (`outlineproperties=Severity`)",
+ "subject": "SRF/Outline/Q.1",
+ "assert-output": {
+ "to-contain": [
+ "<p style=\"font-size: small; font-weight: bold;\">Normal</p>",
+ "<ul>",
+ "<li>SRF/Outline/1 (Assigned to John)</li>",
+ "</ul>",
+ "<ul>",
+ "</ul>",
+ "<p style=\"font-size: small; font-weight: bold;\">Urgent</p>",
+ "<ul>",
+ "<li>SRF/Outline/2 (Assigned to Jane)</li>",
+ "<li>SRF/Outline/3 (Assigned to 田中)</li>",
+ "</ul>",
+ "<ul>",
+ "</ul>"
+ ]
+ }
+ },
+ {
+ "type": "parser",
+ "about": "#1 (`outlineproperties=Severity,Assigned to`)",
+ "subject": "SRF/Outline/Q.2",
+ "assert-output": {
+ "to-contain": [
+ "<p style=\"font-size: medium; font-weight: regular;\">Normal</p>",
+ "<ul>",
+ "<p style=\"font-size: small; font-weight: bold;\">John</p>",
+ "<ul>",
+ "<li>SRF/Outline/1</li>",
+ "</ul>",
+ "<ul>",
+ "</ul>",
+ "</ul>",
+ "<p style=\"font-size: medium; font-weight: regular;\">Urgent</p>",
+ "<ul>",
+ "<p style=\"font-size: small; font-weight: bold;\">Jane</p>",
+ "<ul>",
+ "<li>SRF/Outline/2</li>",
+ "</ul>",
+ "<ul>",
+ "</ul>",
+ "<p style=\"font-size: small; font-weight: bold;\">田中</p>",
+ "<ul>",
+ "<li>SRF/Outline/3</li>",
+ "</ul>",
+ "<ul>",
+ "</ul>",
+ "</ul>"
+ ]
+ }
+ }
+ ],
+ "settings": {
+ "wgContLang": "en",
+ "wgLang": "en",
+ "smwgNamespacesWithSemanticLinks": {
+ "NS_MAIN": true,
+ "SMW_NS_PROPERTY": true
+ }
+ },
+ "meta": {
+ "version": "2",
+ "is-incomplete": false,
+ "debug": false
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-01.json b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-01.json
index 83f0a28a..df5288c0 100644
--- a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-01.json
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-01.json
@@ -65,27 +65,27 @@
},
{
"page": "Example/Tree 01-01",
- "contents": "{{#ask:[[Part of::Tree test]]|format=tree|parent=Has parent}}"
+ "contents": "<div>{{#ask:[[Part of::Tree test]]|format=tree|parent=Has parent}}</div>"
},
{
"page": "Example/Tree 01-02",
- "contents": "{{#ask:[[Part of::Tree test]]|format=tree|parent=Has parent|root=Example/Tree 1}}"
+ "contents": "<div>{{#ask:[[Part of::Tree test]]|format=tree|parent=Has parent|root=Example/Tree 1}}</div>"
},
{
"page": "Example/Tree 01-03",
- "contents": "{{#ask:[[Part of::Tree test]]|format=ultree|parent=Has parent}}"
+ "contents": "<div>{{#ask:[[Part of::Tree test]]|format=ultree|parent=Has parent}}</div>"
},
{
"page": "Example/Tree 01-04",
- "contents": "{{#ask:[[Part of::Tree test]]|format=ultree|parent=Has parent|root=Example/Tree 3}}"
+ "contents": "<div>{{#ask:[[Part of::Tree test]]|format=ultree|parent=Has parent|root=Example/Tree 3}}</div>"
},
{
"page": "Example/Tree 01-05",
- "contents": "{{#ask:[[Part of::Tree test]]|format=oltree|parent=Has parent}}"
+ "contents": "<div>{{#ask:[[Part of::Tree test]]|format=oltree|parent=Has parent}}</div>"
},
{
"page": "Example/Tree 01-06",
- "contents": "{{#ask:[[Part of::Tree test]]|format=oltree|parent=Has parent|root=Example/Tree 2}}"
+ "contents": "<div>{{#ask:[[Part of::Tree test]]|format=oltree|parent=Has parent|root=Example/Tree 2}}</div>"
}
],
"tests": [
@@ -95,21 +95,21 @@
"subject": "Example/Tree 01-01",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 11\"]:only-child",
- "div.srf-tree > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
- "div.srf-tree > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 13\"]:only-child",
+ "div > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 11\"]:only-child",
+ "div > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
+ "div > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 13\"]:only-child",
- "div.srf-tree > ul > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 21\"]:only-child",
- "div.srf-tree > ul > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 22\"]:only-child",
+ "div > ul > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 21\"]:only-child",
+ "div > ul > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 22\"]:only-child",
- "div.srf-tree > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 31\"]:only-child",
- "div.srf-tree > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 32\"] + ul > li:only-child > a[title=\"Example/Tree 321\"]:only-child",
- "div.srf-tree > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 33\"]:only-child",
+ "div > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 31\"]:only-child",
+ "div > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 32\"] + ul > li:only-child > a[title=\"Example/Tree 321\"]:only-child",
+ "div > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 33\"]:only-child",
- [ "div.srf-tree > ul:only-child", 1 ],
- [ "div.srf-tree > ul > li", 3 ],
- [ "div.srf-tree > ul > li > ul > li", 8 ],
- [ "div.srf-tree > ul > li > ul > li > ul > li", 2 ]
+ [ "div > ul:only-child", 1 ],
+ [ "div > ul > li", 3 ],
+ [ "div > ul > li > ul > li", 8 ],
+ [ "div > ul > li > ul > li > ul > li", 2 ]
]
}
},
@@ -119,13 +119,13 @@
"subject": "Example/Tree 01-02",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li:only-child > a[title=\"Example/Tree 1\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 11\"]:only-child",
- "div.srf-tree > ul > li:only-child > a[title=\"Example/Tree 1\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
- "div.srf-tree > ul > li:only-child > a[title=\"Example/Tree 1\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 13\"]:only-child",
+ "div > ul > li:only-child > a[title=\"Example/Tree 1\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 11\"]:only-child",
+ "div > ul > li:only-child > a[title=\"Example/Tree 1\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
+ "div > ul > li:only-child > a[title=\"Example/Tree 1\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 13\"]:only-child",
- [ "div.srf-tree > ul > li", 1 ],
- [ "div.srf-tree > ul > li > ul > li", 3 ],
- [ "div.srf-tree > ul > li > ul > li > ul > li", 1 ]
+ [ "div > ul > li", 1 ],
+ [ "div > ul > li > ul > li", 3 ],
+ [ "div > ul > li > ul > li > ul > li", 1 ]
]
}
},
@@ -135,20 +135,20 @@
"subject": "Example/Tree 01-03",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 11\"]:only-child",
- "div.srf-tree > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
- "div.srf-tree > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 13\"]:only-child",
+ "div > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 11\"]:only-child",
+ "div > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
+ "div > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 13\"]:only-child",
- "div.srf-tree > ul > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 21\"]:only-child",
- "div.srf-tree > ul > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 22\"]:only-child",
+ "div > ul > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 21\"]:only-child",
+ "div > ul > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 22\"]:only-child",
- "div.srf-tree > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 31\"]:only-child",
- "div.srf-tree > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 32\"] + ul > li:only-child > a[title=\"Example/Tree 321\"]:only-child",
- "div.srf-tree > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 33\"]:only-child",
+ "div > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 31\"]:only-child",
+ "div > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 32\"] + ul > li:only-child > a[title=\"Example/Tree 321\"]:only-child",
+ "div > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 33\"]:only-child",
- [ "div.srf-tree > ul > li", 3 ],
- [ "div.srf-tree > ul > li > ul > li", 8 ],
- [ "div.srf-tree > ul > li > ul > li > ul > li", 2 ]
+ [ "div > ul > li", 3 ],
+ [ "div > ul > li > ul > li", 8 ],
+ [ "div > ul > li > ul > li > ul > li", 2 ]
]
}
},
@@ -158,13 +158,13 @@
"subject": "Example/Tree 01-04",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li:only-child > a[title=\"Example/Tree 3\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 31\"]:only-child",
- "div.srf-tree > ul > li:only-child > a[title=\"Example/Tree 3\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 32\"] + ul > li:only-child > a[title=\"Example/Tree 321\"]:only-child",
- "div.srf-tree > ul > li:only-child > a[title=\"Example/Tree 3\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 33\"]:only-child",
+ "div > ul > li:only-child > a[title=\"Example/Tree 3\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 31\"]:only-child",
+ "div > ul > li:only-child > a[title=\"Example/Tree 3\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 32\"] + ul > li:only-child > a[title=\"Example/Tree 321\"]:only-child",
+ "div > ul > li:only-child > a[title=\"Example/Tree 3\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 33\"]:only-child",
- [ "div.srf-tree > ul > li", 1 ],
- [ "div.srf-tree > ul > li > ul > li", 3 ],
- [ "div.srf-tree > ul > li > ul > li > ul > li", 1 ]
+ [ "div > ul > li", 1 ],
+ [ "div > ul > li > ul > li", 3 ],
+ [ "div > ul > li > ul > li > ul > li", 1 ]
]
}
},
@@ -174,20 +174,20 @@
"subject": "Example/Tree 01-05",
"assert-output": {
"to-contain": [
- "div.srf-tree > ol > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ol > li:nth-child(1) > a[title=\"Example/Tree 11\"]:only-child",
- "div.srf-tree > ol > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ol > li:nth-child(2) > a[title=\"Example/Tree 12\"] + ol > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
- "div.srf-tree > ol > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ol > li:nth-child(3) > a[title=\"Example/Tree 13\"]:only-child",
+ "div > ol > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ol > li:nth-child(1) > a[title=\"Example/Tree 11\"]:only-child",
+ "div > ol > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ol > li:nth-child(2) > a[title=\"Example/Tree 12\"] + ol > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
+ "div > ol > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ol > li:nth-child(3) > a[title=\"Example/Tree 13\"]:only-child",
- "div.srf-tree > ol > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ol > li:nth-child(1) > a[title=\"Example/Tree 21\"]:only-child",
- "div.srf-tree > ol > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ol > li:nth-child(2) > a[title=\"Example/Tree 22\"]:only-child",
+ "div > ol > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ol > li:nth-child(1) > a[title=\"Example/Tree 21\"]:only-child",
+ "div > ol > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ol > li:nth-child(2) > a[title=\"Example/Tree 22\"]:only-child",
- "div.srf-tree > ol > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ol > li:nth-child(1) > a[title=\"Example/Tree 31\"]:only-child",
- "div.srf-tree > ol > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ol > li:nth-child(2) > a[title=\"Example/Tree 32\"] + ol > li:only-child > a[title=\"Example/Tree 321\"]:only-child",
- "div.srf-tree > ol > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ol > li:nth-child(3) > a[title=\"Example/Tree 33\"]:only-child",
+ "div > ol > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ol > li:nth-child(1) > a[title=\"Example/Tree 31\"]:only-child",
+ "div > ol > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ol > li:nth-child(2) > a[title=\"Example/Tree 32\"] + ol > li:only-child > a[title=\"Example/Tree 321\"]:only-child",
+ "div > ol > li:nth-child(3) > a[title=\"Example/Tree 3\"] + ol > li:nth-child(3) > a[title=\"Example/Tree 33\"]:only-child",
- [ "div.srf-tree > ol > li", 3 ],
- [ "div.srf-tree > ol > li > ol > li", 8 ],
- [ "div.srf-tree > ol > li > ol > li > ol > li", 2 ]
+ [ "div > ol > li", 3 ],
+ [ "div > ol > li > ol > li", 8 ],
+ [ "div > ol > li > ol > li > ol > li", 2 ]
]
}
},
@@ -197,11 +197,11 @@
"subject": "Example/Tree 01-06",
"assert-output": {
"to-contain": [
- "div.srf-tree > ol > li:only-child > a[title=\"Example/Tree 2\"] + ol > li:nth-child(1) > a[title=\"Example/Tree 21\"]:only-child",
- "div.srf-tree > ol > li:only-child > a[title=\"Example/Tree 2\"] + ol > li:nth-child(2) > a[title=\"Example/Tree 22\"]:only-child",
+ "div > ol > li:only-child > a[title=\"Example/Tree 2\"] + ol > li:nth-child(1) > a[title=\"Example/Tree 21\"]:only-child",
+ "div > ol > li:only-child > a[title=\"Example/Tree 2\"] + ol > li:nth-child(2) > a[title=\"Example/Tree 22\"]:only-child",
- [ "div.srf-tree > ol > li", 1 ],
- [ "div.srf-tree > ol > li > ol > li", 2 ]
+ [ "div > ol > li", 1 ],
+ [ "div > ol > li > ol > li", 2 ]
]
}
}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-02.json b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-02.json
index 1a52f698..721c363a 100644
--- a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-02.json
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-02.json
@@ -27,6 +27,10 @@
{
"page": "Example/Tree 02-02",
"contents": "{{#ask:[[Part of::Tree test]]|format=tree|parent=Has parent|template=Example/Tree format template }}"
+ },
+ {
+ "page": "Example/Tree 02-03",
+ "contents": "{{#ask:[[Part of::Tree test]]|format=tree|parent=Has parent|class=some-class}}"
}
],
"tests": [
@@ -36,7 +40,7 @@
"subject": "Example/Tree 02-01",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li:only-child > a[title=\"Example/Tree 1\"]:only-child"
+ "ul > li:only-child > a[title=\"Example/Tree 1\"]:only-child"
]
}
},
@@ -46,7 +50,7 @@
"subject": "Example/Tree 02-02",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li:only-child > a[title=\"Example/Tree 1\"]:only-child"
+ "ul > li:only-child > a[title=\"Example/Tree 1\"]:only-child"
]
}
},
@@ -59,6 +63,16 @@
"FOO.*Example/Tree 1.*BAR"
]
}
+ },
+ {
+ "type": "parser-html",
+ "about": "Tree 02-03 (Simple one-page result with class parameter)",
+ "subject": "Example/Tree 02-03",
+ "assert-output": {
+ "to-contain": [
+ "div.some-class > ul > li:only-child > a[title=\"Example/Tree 1\"]:only-child"
+ ]
+ }
}
],
"settings": {
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-06.json b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-06.json
index 462be741..c6bc3184 100644
--- a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-06.json
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-06.json
@@ -46,11 +46,11 @@
},
{
"page": "Example/Tree 06-01",
- "contents": "{{#ask:[[Part of::Tree test]] |format=tree |parent=Has parent }}"
+ "contents": "<div>{{#ask:[[Part of::Tree test]] |format=tree |parent=Has parent }}</div>"
},
{
"page": "Example/Tree 06-02",
- "contents": "{{#ask:[[Part of::Tree test]] |format=tree |parent=Has parent |template=Example/Tree format template }}"
+ "contents": "<div>{{#ask:[[Part of::Tree test]] |format=tree |parent=Has parent |template=Example/Tree format template }}</div>"
}
],
"tests": [
@@ -60,17 +60,17 @@
"subject": "Example/Tree 06-01",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 11\"]:only-child",
- "div.srf-tree > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
- "div.srf-tree > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 13\"]:only-child",
+ "div > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 11\"]:only-child",
+ "div > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
+ "div > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 13\"]:only-child",
- "div.srf-tree > ul > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ul > li:only-child > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
+ "div > ul > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ul > li:only-child > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
- "div.srf-tree > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"]:only-child",
+ "div > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"]:only-child",
- [ "div.srf-tree > ul > li", 3 ],
- [ "div.srf-tree > ul > li > ul > li", 4 ],
- [ "div.srf-tree > ul > li > ul > li > ul > li", 2 ]
+ [ "div > ul > li", 3 ],
+ [ "div > ul > li > ul > li", 4 ],
+ [ "div > ul > li > ul > li > ul > li", 2 ]
]
}
},
@@ -80,17 +80,17 @@
"subject": "Example/Tree 06-02",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 11\"]:only-child",
- "div.srf-tree > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
- "div.srf-tree > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 13\"]:only-child",
+ "div > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(1) > a[title=\"Example/Tree 11\"]:only-child",
+ "div > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(2) > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
+ "div > ul > li:nth-child(1) > a[title=\"Example/Tree 1\"] + ul > li:nth-child(3) > a[title=\"Example/Tree 13\"]:only-child",
- "div.srf-tree > ul > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ul > li:only-child > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
+ "div > ul > li:nth-child(2) > a[title=\"Example/Tree 2\"] + ul > li:only-child > a[title=\"Example/Tree 12\"] + ul > li:only-child > a[title=\"Example/Tree 121\"]:only-child",
- "div.srf-tree > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"]:only-child",
+ "div > ul > li:nth-child(3) > a[title=\"Example/Tree 3\"]:only-child",
- [ "div.srf-tree > ul > li", 3 ],
- [ "div.srf-tree > ul > li > ul > li", 4 ],
- [ "div.srf-tree > ul > li > ul > li > ul > li", 2 ]
+ [ "div > ul > li", 3 ],
+ [ "div > ul > li > ul > li", 4 ],
+ [ "div > ul > li > ul > li > ul > li", 2 ]
]
}
},
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-07.json b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-07.json
index a2b702c6..8b09e758 100644
--- a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-07.json
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/JSONScript/TestCases/tree-07.json
@@ -56,7 +56,7 @@
"subject": "Example/Tree 07-01",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li > a[title=\"Example/Tree 1\"] + ul > li > a[title=\"Example/Tree 11\"] + a[title=\"Property:Has parent\"] + a[title=\"Example/Tree 1\"]"
+ "ul > li > a[title=\"Example/Tree 1\"] + ul > li > a[title=\"Example/Tree 11\"] + a[title=\"Property:Has parent\"] + a[title=\"Example/Tree 1\"]"
]
}
},
@@ -66,7 +66,7 @@
"subject": "Example/Tree 07-02",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li > a[title=\"Example/Tree 1\"] + ul > li > a[title=\"Example/Tree 11\"] + a[title=\"Property:Has parent\"] + a[title=\"Example/Tree 1\"]"
+ "ul > li > a[title=\"Example/Tree 1\"] + ul > li > a[title=\"Example/Tree 11\"] + a[title=\"Property:Has parent\"] + a[title=\"Example/Tree 1\"]"
]
}
},
@@ -76,7 +76,7 @@
"subject": "Example/Tree 07-03",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li > a[title=\"Example/Tree 1\"] + ul > li > a[title=\"Example/Tree 11\"]:first-of-type + a[title=\"Property:Has parent\"]:last-of-type"
+ "ul > li > a[title=\"Example/Tree 1\"] + ul > li > a[title=\"Example/Tree 11\"]:first-of-type + a[title=\"Property:Has parent\"]:last-of-type"
]
}
@@ -87,7 +87,7 @@
"subject": "Example/Tree 07-04",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li > ul:only-child > li > a[title=\"Property:Has parent\"]:only-child"
+ "ul > li > ul:only-child > li > a[title=\"Property:Has parent\"]:only-child"
]
}
},
@@ -107,7 +107,7 @@
"subject": "Example/Tree 07-05",
"assert-output": {
"to-contain": [
- "div.srf-tree > ul > li > a[title=\"Example/Tree 1\"] + ul > li > a[title=\"Example/Tree 11\"]"
+ "ul > li > a[title=\"Example/Tree 1\"] + ul > li > a[title=\"Example/Tree 11\"]"
]
}
},
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/ResourcesTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/ResourcesTest.php
index d4abad67..20b55c40 100644
--- a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/ResourcesTest.php
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Integration/ResourcesTest.php
@@ -34,7 +34,15 @@ class ResourcesTest extends \PHPUnit_Framework_TestCase {
}
public function moduleDataProvider() {
- $resourceLoader = new ResourceLoader();
+
+ // #501
+ // MW 1.33+
+ if ( class_exists( '\MediaWiki\MediaWikiServices' ) && method_exists( '\MediaWiki\MediaWikiServices', 'getResourceLoader' ) ) {
+ $resourceLoader = \MediaWiki\MediaWikiServices::getInstance()->getResourceLoader();
+ } else {
+ $resourceLoader = new ResourceLoader();
+ }
+
$context = ResourceLoaderContext::newDummyContext();
$modules = $this->getSRFResourceModules();
@@ -70,4 +78,4 @@ class ResourcesTest extends \PHPUnit_Framework_TestCase {
}
}
-} \ No newline at end of file
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/ResultPrinterReflector.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/ResultPrinterReflector.php
new file mode 100644
index 00000000..5b9f3ae6
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/ResultPrinterReflector.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace SRF\Tests;
+
+use ReflectionClass;
+use SMW\Query\ResultPrinter;
+
+/**
+ * @license GNU GPL v2+
+ * @since 3.1
+ *
+ * @author mwjames
+ */
+class ResultPrinterReflector {
+
+ /**
+ * Helper method sets result printer parameters
+ *
+ * @param ResultPrinter $instance
+ * @param array $parameters
+ *
+ * @return ResultPrinter
+ */
+ public function addParameters( ResultPrinter $instance, array $parameters ) {
+
+ $reflector = new ReflectionClass( $instance );
+ $params = $reflector->getProperty( 'params' );
+ $params->setAccessible( true );
+ $params->setValue( $instance, $parameters );
+
+ if ( isset( $parameters['searchlabel'] ) ) {
+ $searchlabel = $reflector->getProperty( 'mSearchlabel' );
+ $searchlabel->setAccessible( true );
+ $searchlabel->setValue( $instance, $parameters['searchlabel'] );
+ }
+
+ if ( isset( $parameters['headers'] ) ) {
+ $searchlabel = $reflector->getProperty( 'mShowHeaders' );
+ $searchlabel->setAccessible( true );
+ $searchlabel->setValue( $instance, $parameters['headers'] );
+ }
+
+ return $instance;
+ }
+
+ public function invoke( ResultPrinter $instance, $queryResult, $outputMode ) {
+
+ $reflector = new ReflectionClass( $instance );
+ $method = $reflector->getMethod( 'getResultText' );
+ $method->setAccessible( true );
+
+ return $method->invoke( $instance, $queryResult, $outputMode );
+ }
+
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/BibTex/BibTexFileExportPrinterTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/BibTex/BibTexFileExportPrinterTest.php
new file mode 100644
index 00000000..86432d11
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/BibTex/BibTexFileExportPrinterTest.php
@@ -0,0 +1,149 @@
+<?php
+
+namespace SRF\Tests\BibTex;
+
+use PHPUnit\Framework\MockObject\MockObject;
+use SMWInfolink;
+use SMWQueryResult;
+use SRF\BibTex\BibTexFileExportPrinter;
+use SRF\Tests\ResultPrinterReflector;
+
+/**
+ * @covers \SRF\BibTex\BibTexFileExportPrinter
+ * @group semantic-result-formats
+ *
+ * @license GNU GPL v2+
+ * @since 3.1
+ *
+ * @author mwjames
+ */
+class BibTexFileExportPrinterTest extends \PHPUnit_Framework_TestCase {
+
+ public function testCanConstruct() {
+
+ $this->assertInstanceOf(
+ BibTexFileExportPrinter::class,
+ new BibTexFileExportPrinter( 'bibtex' )
+ );
+ }
+
+ /**
+ * @dataProvider filenameProvider
+ */
+ public function testGetFileName( $filename, $searchlabel, $expected ) {
+
+ $parameters = [
+ 'filename' => $filename,
+ 'searchlabel' => $searchlabel
+ ];
+
+ $bibTexPrinter = new BibTexFileExportPrinter( 'bibtex' );
+
+ ( new ResultPrinterReflector() )->addParameters( $bibTexPrinter, $parameters );
+
+ $this->assertEquals(
+ $expected,
+ $bibTexPrinter->getFileName( $this->newQueryResultDummy() )
+ );
+ }
+
+ public function filenameProvider() {
+
+ yield[
+ '',
+ '',
+ 'BibTeX.bib'
+ ];
+
+ yield[
+ '',
+ 'foo bar',
+ 'foo_bar.bib'
+ ];
+
+ yield[
+ 'foo',
+ '',
+ 'foo.bib'
+ ];
+
+ yield[
+ 'foo.bib',
+ '',
+ 'foo.bib'
+ ];
+
+ yield[
+ 'foo bar.bib',
+ '',
+ 'foo_bar.bib'
+ ];
+ }
+
+ /**
+ * @return MockObject|SMWQueryResult
+ */
+ private function newQueryResultDummy() {
+ return $this->getMockBuilder( SMWQueryResult::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+ }
+
+ public function testGetMimeType() {
+
+ $instance = new BibTexFileExportPrinter(
+ 'bibtex'
+ );
+
+ $this->assertEquals(
+ 'text/bibtex',
+ $instance->getMimeType( $this->newQueryResultDummy() )
+ );
+ }
+
+ public function testGetResult_LinkOnNonFileOutput() {
+ $bibTexPrinter = new BibTexFileExportPrinter(
+ 'bibtex'
+ );
+
+ $this->assertEquals(
+ 'foo_link',
+ $bibTexPrinter->getResult(
+ $this->newMockQueryResultWithLink(),
+ [],
+ SMW_OUTPUT_HTML
+ )
+ );
+ }
+
+ private function newMockQueryResultWithLink() {
+ $queryResult = $this->newQueryResultDummy();
+
+ $queryResult->expects( $this->any() )
+ ->method( 'getErrors' )
+ ->will( $this->returnValue( [] ) );
+
+ $queryResult->expects( $this->any() )
+ ->method( 'getCount' )
+ ->will( $this->returnValue( 1 ) );
+
+ $queryResult->expects( $this->once() )
+ ->method( 'getQueryLink' )
+ ->will( $this->returnValue( $this->newInfoLinkStub() ) );
+
+ return $queryResult;
+ }
+
+ private function newInfoLinkStub() {
+ $link = $this->getMockBuilder( SMWInfolink::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $link->expects( $this->any() )
+ ->method( 'getText' )
+ ->will( $this->returnValue( 'foo_link' ) );
+
+ return $link;
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/BibTex/ItemTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/BibTex/ItemTest.php
new file mode 100644
index 00000000..b2102f6a
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/BibTex/ItemTest.php
@@ -0,0 +1,111 @@
+<?php
+
+namespace SRF\Tests\BibTex;
+
+use SRF\BibTex\Item;
+
+/**
+ * @covers \SRF\BibTex\Item
+ * @group semantic-result-formats
+ *
+ * @license GNU GPL v2+
+ * @since 3.1
+ *
+ * @author mwjames
+ */
+class ItemTest extends \PHPUnit_Framework_TestCase {
+
+ public function testCanConstruct() {
+
+ $this->assertInstanceOf(
+ Item::class,
+ new Item()
+ );
+ }
+
+ /**
+ * @dataProvider fieldsProvider
+ */
+ public function testText( $fields, $expected ) {
+
+ $instance = new Item();
+
+ foreach ( $fields as $key => $value ) {
+ $instance->set( $key, $value );
+ }
+
+ $this->assertEquals(
+ $expected,
+ $instance->text()
+ );
+ }
+
+ /**
+ * @dataProvider formatterCallbackFieldsProvider
+ */
+ public function testFormatterCallback( $fields, $expected ) {
+
+ $instance = new Item();
+ $instance->setFormatterCallback( function( $key, $values ) {
+ return implode( '#', $values );
+ } );
+
+ foreach ( $fields as $key => $value ) {
+ $instance->set( $key, $value );
+ }
+
+ $this->assertEquals(
+ $expected,
+ $instance->text()
+ );
+ }
+
+ /**
+ * @dataProvider replaceTextProvider
+ */
+ public function testReplace( $key, $text, $expected ) {
+
+ $instance = new Item();
+
+ $this->assertEquals(
+ $expected,
+ $instance->replace( 'uri', $text )
+ );
+ }
+
+ public function fieldsProvider() {
+
+ yield [
+ [ 'foo' => 'test', 'author' => [ 'abc', 'def', '123' ] ],
+ "@Book{abc,\r\n author = \"abc, def, 123\", \r\n}"
+ ];
+
+ yield [
+ [ 'foo' => 'test', 'title' => 'foo bar', 'editor' => [ 'abc', 'def', '123' ] ],
+ "@Book{fb,\r\n editor = \"abc, def, 123\", \r\n title = \"foo bar\", \r\n}"
+ ];
+ }
+
+ public function formatterCallbackFieldsProvider() {
+
+ yield [
+ [ 'foo' => 'test', 'author' => [ 'abc', 'def', '123' ] ],
+ "@Book{abc,\r\n author = \"abc#def#123\", \r\n}"
+ ];
+
+ yield [
+ [ 'foo' => 'test', 'title' => 'foo bar', 'editor' => [ 'abc', 'def', '123' ] ],
+ "@Book{fb,\r\n editor = \"abc#def#123\", \r\n title = \"foo bar\", \r\n}"
+ ];
+ }
+
+ public function replaceTextProvider() {
+
+ yield [
+ 'uri',
+ 'abc-_+ÄäÖ',
+ 'abcAeaeOe'
+ ];
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/ExcelTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/ExcelTest.php
deleted file mode 100644
index ec30881c..00000000
--- a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/ExcelTest.php
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-namespace SRF\Tests\Unit\Formats;
-
-use SMW\Test\QueryPrinterRegistryTestCase;
-
-/**
- * Tests for the SRF\Excel class.
- *
- * @since 1.9
- *
- * @ingroup SemanticResultFormats
- * @ingroup Test
- *
- * @group SRF
- * @group SMWExtension
- * @group ResultPrinters
- *
- * @author Kim Eik
- */
-class ExcelTest extends QueryPrinterRegistryTestCase {
-
- /**
- * @see QueryPrinterRegistryTestCase::getFormats
- *
- * @since 1.8
- *
- * @return array
- */
- public function getFormats() {
- return [ 'excel' ];
- }
-
- /**
- * @see QueryPrinterRegistryTestCase::getClass
- *
- * @since 1.8
- *
- * @return string
- */
- public function getClass() {
- return 'SRF\SRFExcel';
- }
-
-}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/GanttTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/GanttTest.php
new file mode 100644
index 00000000..8eda6159
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/GanttTest.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace SRF\Tests\Gantt;
+
+use SMW\Test\QueryPrinterRegistryTestCase;
+
+class GanttTest extends QueryPrinterRegistryTestCase{
+
+ /**
+ * @see QueryPrinterRegistryTestCase::getFormats
+ *
+ * @since 1.8
+ *
+ * @return array
+ */
+ public function getFormats() {
+ return [ 'gantt' ];
+ }
+
+ /**
+ * @see QueryPrinterRegistryTestCase::getClass
+ *
+ * @since 1.8
+ *
+ * @return string
+ */
+ public function getClass() {
+ return '\SRF\Gantt\GanttPrinter';
+ }
+} \ No newline at end of file
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/GraphTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/GraphTest.php
index c28a93c0..f55ef3df 100644
--- a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/GraphTest.php
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/GraphTest.php
@@ -41,7 +41,7 @@ class GraphTest extends QueryPrinterRegistryTestCase {
* @return string
*/
public function getClass() {
- return '\SRFGraph';
+ return '\SRF\Graph\GraphPrinter';
}
}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/SpreadsheetTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/SpreadsheetTest.php
new file mode 100644
index 00000000..15783478
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Formats/SpreadsheetTest.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace SRF\Tests\Unit\Formats;
+
+use SMW\Test\QueryPrinterRegistryTestCase;
+use SRF\SpreadsheetPrinter;
+
+/**
+ * @ingroup SemanticResultFormats
+ * @ingroup Test
+ * @group SRF
+ * @group SMWExtension
+ * @group ResultPrinters
+ */
+class SpreadsheetTest extends QueryPrinterRegistryTestCase {
+
+ public function getFormats() {
+ return [ 'spreadsheet' ];
+ }
+
+ public function getClass() {
+ return 'SRF\SpreadsheetPrinter';
+ }
+
+ public function testLink() {
+
+ $link = $this->getMockBuilder( '\SMWInfolink' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $queryResult = $this->getMockBuilder( '\SMWQueryResult' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $queryResult->expects( $this->once() )
+ ->method( 'getQueryLink' )
+ ->will( $this->returnValue( $link ) );
+
+ $queryResult->expects( $this->any() )
+ ->method( 'getCount' )
+ ->will( $this->returnValue( 1 ) );
+
+ $queryResult->expects( $this->any() )
+ ->method( 'getErrors' )
+ ->will( $this->returnValue( [] ) );
+
+ $instance = new SpreadsheetPrinter( 'csv' );
+ $instance->getResult( $queryResult, [], SMW_OUTPUT_WIKI );
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/ListTreeBuilderTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/ListTreeBuilderTest.php
new file mode 100644
index 00000000..80679e90
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/ListTreeBuilderTest.php
@@ -0,0 +1,41 @@
+<?php
+
+namespace SRF\Tests\Outline;
+
+use SRF\Outline\ListTreeBuilder;
+use SRF\Outline\OutlineTree;
+
+/**
+ * @covers \SRF\Outline\ListTreeBuilder
+ * @group semantic-result-formats
+ *
+ * @license GNU GPL v2+
+ * @since 3.1
+ *
+ * @author mwjames
+ */
+class ListTreeBuilderTest extends \PHPUnit_Framework_TestCase {
+
+ public function testCanConstruct() {
+
+ $this->assertInstanceOf(
+ ListTreeBuilder::class,
+ new ListTreeBuilder( [] )
+ );
+ }
+
+ public function testBuildForEmptyTree() {
+
+ $params = [
+ 'outlineproperties' => [ 'Foo' ]
+ ];
+
+ $instance = new ListTreeBuilder( $params );
+
+ $this->assertInternalType(
+ 'string',
+ $instance->build( new OutlineTree() )
+ );
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/OutlineItemTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/OutlineItemTest.php
new file mode 100644
index 00000000..6819ee10
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/OutlineItemTest.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace SRF\Tests\Outline;
+
+use SRF\Outline\OutlineItem;
+
+/**
+ * @covers \SRF\Outline\OutlineItem
+ * @group semantic-result-formats
+ *
+ * @license GNU GPL v2+
+ * @since 3.1
+ *
+ * @author mwjames
+ */
+class OutlineItemTest extends \PHPUnit_Framework_TestCase {
+
+ public function testCanConstruct() {
+
+ $this->assertInstanceOf(
+ OutlineItem::class,
+ new OutlineItem( [] )
+ );
+ }
+
+ public function testPropertyAccess() {
+
+ $instance = new OutlineItem( [ 'Foo' ] );
+
+ $this->assertEquals(
+ [ 'Foo' ],
+ $instance->row
+ );
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/OutlineResultPrinterTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/OutlineResultPrinterTest.php
new file mode 100644
index 00000000..523ecf9b
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/OutlineResultPrinterTest.php
@@ -0,0 +1,96 @@
+<?php
+
+namespace SRF\Tests\Outline;
+
+use SRF\Outline\OutlineResultPrinter;
+
+/**
+ * @covers \SRF\Outline\OutlineResultPrinter
+ * @group semantic-result-formats
+ *
+ * @license GNU GPL v2+
+ * @since 3.1
+ *
+ * @author mwjames
+ */
+class OutlineResultPrinterTest extends \PHPUnit_Framework_TestCase {
+
+ private $queryResult;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->queryResult = $this->getMockBuilder( '\SMWQueryResult' )
+ ->disableOriginalConstructor()
+ ->getMock();
+ }
+
+ public function testCanConstruct() {
+
+ $this->assertInstanceOf(
+ OutlineResultPrinter::class,
+ new OutlineResultPrinter( 'outline' )
+ );
+ }
+
+ public function testGetResult_LinkOnNonFileOutput() {
+
+ $link = $this->getMockBuilder( '\SMWInfolink' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $link->expects( $this->any() )
+ ->method( 'getText' )
+ ->will( $this->returnValue( 'foo_link' ) );
+
+ $this->queryResult->expects( $this->any() )
+ ->method( 'getErrors' )
+ ->will( $this->returnValue( [] ) );
+
+ $this->queryResult->expects( $this->any() )
+ ->method( 'getCount' )
+ ->will( $this->returnValue( 1 ) );
+
+ $instance = new OutlineResultPrinter(
+ 'outline'
+ );
+
+ // IParam is an empty interface !!! so we use stdClass
+ $outlineproperties = $this->getMockBuilder( '\stdClass' )
+ ->disableOriginalConstructor()
+ ->setMethods( [ 'getName', 'getValue' ] )
+ ->getMock();
+
+ $outlineproperties->expects( $this->any() )
+ ->method( 'getName' )
+ ->will( $this->returnValue( 'outlineproperties' ) );
+
+ $outlineproperties->expects( $this->any() )
+ ->method( 'getValue' )
+ ->will( $this->returnValue( [] ) );
+
+ $template = $this->getMockBuilder( '\stdClass' )
+ ->disableOriginalConstructor()
+ ->setMethods( [ 'getName', 'getValue' ] )
+ ->getMock();
+
+ $template->expects( $this->any() )
+ ->method( 'getName' )
+ ->will( $this->returnValue( 'template' ) );
+
+ $template->expects( $this->any() )
+ ->method( 'getValue' )
+ ->will( $this->returnValue( '' ) );
+
+ $parameters = [
+ $outlineproperties,
+ $template
+ ];
+
+ $this->assertContains(
+ "<ul>\n</ul>\n",
+ $instance->getResult( $this->queryResult, $parameters, SMW_OUTPUT_HTML )
+ );
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/OutlineTreeTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/OutlineTreeTest.php
new file mode 100644
index 00000000..3af491c0
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/OutlineTreeTest.php
@@ -0,0 +1,49 @@
+<?php
+
+namespace SRF\Tests\Outline;
+
+use SRF\Outline\OutlineTree;
+
+/**
+ * @covers \SRF\Outline\OutlineTree
+ * @group semantic-result-formats
+ *
+ * @license GNU GPL v2+
+ * @since 3.1
+ *
+ * @author mwjames
+ */
+class OutlineTreeTest extends \PHPUnit_Framework_TestCase {
+
+ public function testCanConstruct() {
+
+ $this->assertInstanceOf(
+ OutlineTree::class,
+ new OutlineTree( [] )
+ );
+ }
+
+ public function testPropertyAccess() {
+
+ $instance = new OutlineTree();
+
+ $this->assertEmpty(
+ $instance->tree
+ );
+
+ $this->assertEmpty(
+ $instance->items
+ );
+
+ $this->assertEquals(
+ 0,
+ $instance->itemCount
+ );
+
+ $this->assertEquals(
+ 0,
+ $instance->leafCount
+ );
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/TemplateBuilderTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/TemplateBuilderTest.php
new file mode 100644
index 00000000..ac00d67c
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/Outline/TemplateBuilderTest.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace SRF\Tests\Outline;
+
+use SRF\Outline\TemplateBuilder;
+use SRF\Outline\OutlineTree;
+
+/**
+ * @covers \SRF\Outline\TemplateBuilder
+ * @group semantic-result-formats
+ *
+ * @license GNU GPL v2+
+ * @since 3.1
+ *
+ * @author mwjames
+ */
+class TemplateBuilderTest extends \PHPUnit_Framework_TestCase {
+
+ public function testCanConstruct() {
+
+ $this->assertInstanceOf(
+ TemplateBuilder::class,
+ new TemplateBuilder( [] )
+ );
+ }
+
+ public function testBuildForEmptyTree() {
+
+ $params = [
+ 'outlineproperties' => [ 'Foo' ],
+ 'template' => 'Bar',
+ 'userparam' => ''
+ ];
+
+ $instance = new TemplateBuilder( $params );
+
+ $this->assertInternalType(
+ 'string',
+ $instance->build( new OutlineTree() )
+ );
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/AddressTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/AddressTest.php
index 52c8b5a1..0b4855b2 100644
--- a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/AddressTest.php
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/AddressTest.php
@@ -23,6 +23,15 @@ class AddressTest extends \PHPUnit_Framework_TestCase {
);
}
+ public function testHasAddress() {
+
+ $instance = new Address( '', [] );
+
+ $this->assertFalse(
+ $instance->hasAddress()
+ );
+ }
+
public function testText() {
$adr = [
@@ -36,9 +45,10 @@ class AddressTest extends \PHPUnit_Framework_TestCase {
];
$instance = new Address( '', $adr );
+ $instance->set( 'region', 'Bar0042' );
$this->assertSame(
- "ADR;TYPE=WORK;CHARSET=UTF-8:;;2 Example Avenue;Anytown;Foo;01111;Bar\r\n",
+ "ADR;TYPE=WORK;CHARSET=UTF-8:;;2 Example Avenue;Anytown;Bar0042;01111;Bar\r\n",
$instance->text()
);
}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/vCardFileExportPrinterTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/vCardFileExportPrinterTest.php
new file mode 100644
index 00000000..f094268f
--- /dev/null
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/vCardFileExportPrinterTest.php
@@ -0,0 +1,133 @@
+<?php
+
+namespace SRF\Tests\vCard;
+
+use SRF\vCard\vCardFileExportPrinter;
+use SRF\Tests\ResultPrinterReflector;
+
+/**
+ * @covers \SRF\vCard\vCardFileExportPrinter
+ * @group semantic-result-formats
+ *
+ * @license GNU GPL v2+
+ * @since 3.1
+ *
+ * @author mwjames
+ */
+class vCardFileExportPrinterTest extends \PHPUnit_Framework_TestCase {
+
+ private $queryResult;
+ private $resultPrinterReflector;
+
+ protected function setUp() {
+ parent::setUp();
+
+ $this->resultPrinterReflector = new ResultPrinterReflector();
+
+ $this->queryResult = $this->getMockBuilder( '\SMWQueryResult' )
+ ->disableOriginalConstructor()
+ ->getMock();
+ }
+
+ public function testCanConstruct() {
+
+ $this->assertInstanceOf(
+ vCardFileExportPrinter::class,
+ new vCardFileExportPrinter( 'vcard' )
+ );
+ }
+
+ /**
+ * @dataProvider filenameProvider
+ */
+ public function testGetFileName( $filename, $searchlabel, $expected ) {
+
+ $parameters = [
+ 'filename' => $filename,
+ 'searchlabel' => $searchlabel
+ ];
+
+ $instance = new vCardFileExportPrinter(
+ 'vcard'
+ );
+
+ $this->resultPrinterReflector->addParameters( $instance, $parameters );
+
+ $this->assertEquals(
+ $expected,
+ $instance->getFileName( $this->queryResult )
+ );
+ }
+
+ public function testGetMimeType() {
+
+ $instance = new vCardFileExportPrinter(
+ 'vcard'
+ );
+
+ $this->assertEquals(
+ 'text/x-vcard',
+ $instance->getMimeType( $this->queryResult )
+ );
+ }
+
+ public function testGetResult_LinkOnNonFileOutput() {
+
+ $link = $this->getMockBuilder( '\SMWInfolink' )
+ ->disableOriginalConstructor()
+ ->getMock();
+
+ $link->expects( $this->any() )
+ ->method( 'getText' )
+ ->will( $this->returnValue( 'foo_link' ) );
+
+ $this->queryResult->expects( $this->any() )
+ ->method( 'getErrors' )
+ ->will( $this->returnValue( [] ) );
+
+ $this->queryResult->expects( $this->any() )
+ ->method( 'getCount' )
+ ->will( $this->returnValue( 1 ) );
+
+ $this->queryResult->expects( $this->once() )
+ ->method( 'getQueryLink' )
+ ->will( $this->returnValue( $link ) );
+
+ $instance = new vCardFileExportPrinter(
+ 'vcard'
+ );
+
+ $this->assertEquals(
+ 'foo_link',
+ $instance->getResult( $this->queryResult, [], SMW_OUTPUT_HTML )
+ );
+ }
+
+ public function filenameProvider() {
+
+ yield[
+ '',
+ 'foo bar',
+ 'foo_bar.vcf'
+ ];
+
+ yield[
+ 'foo',
+ '',
+ 'foo.vcf'
+ ];
+
+ yield[
+ 'foo.vcf',
+ '',
+ 'foo.vcf'
+ ];
+
+ yield[
+ 'foo bar.vcf',
+ '',
+ 'foo_bar.vcf'
+ ];
+ }
+
+}
diff --git a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/vCardTest.php b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/vCardTest.php
index 6d3d46df..2467df95 100644
--- a/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/vCardTest.php
+++ b/www/wiki/extensions/SemanticResultFormats/tests/phpunit/Unit/vCard/vCardTest.php
@@ -23,9 +23,10 @@ class vCardTest extends \PHPUnit_Framework_TestCase {
);
}
- public function testTextOnEmptyCard() {
+ public function testEmptyCard() {
$instance = new vCard( 'http://example.org/Foo', 'Foo', [] );
+ $instance->set( 'url', 'http://example.org/Bar' );
$this->assertSame(
"BEGIN:VCARD\r\n" .
@@ -36,7 +37,7 @@ class vCardTest extends \PHPUnit_Framework_TestCase {
"SOURCE;CHARSET=UTF-8:http://example.org/Foo\r\n" .
"PRODID:-////Semantic MediaWiki\r\n" .
"REV:\r\n" .
- "URL:http://example.org/Foo\r\n" .
+ "URL:http://example.org/Bar\r\n" .
"UID:http://example.org/Foo\r\n" .
"END:VCARD\r\n",
$instance->text()
diff --git a/www/wiki/skins/bo/reevo.less b/www/wiki/skins/bo/reevo.less
index 9d7283c6..e3b215d9 100644
--- a/www/wiki/skins/bo/reevo.less
+++ b/www/wiki/skins/bo/reevo.less
@@ -1,5 +1,9 @@
// Adaptaciones hechas para REEVO
+body.page-Portada #firstHeading {
+ display: none !important;
+}
+
.mw-body {
z-index: auto !important;
padding: 0 !important;
@@ -140,3 +144,11 @@ body.mw-mmv-lightbox-open #mw-navigation {
.ui-datepicker-header, .ui-datepicker-calendar, .ui-datepicker-buttonpane {
background: #ccc;
}
+
+#bodyContent .col-form-label {
+ text-align: left;
+}
+
+div#bodyContent {
+ margin: 0 15px;
+}
diff --git a/www/wiki/vendor/composer/autoload_classmap.php b/www/wiki/vendor/composer/autoload_classmap.php
index 03595271..f092b4f6 100644
--- a/www/wiki/vendor/composer/autoload_classmap.php
+++ b/www/wiki/vendor/composer/autoload_classmap.php
@@ -45,6 +45,7 @@ return array(
'Composer\\Installers\\CraftInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CraftInstaller.php',
'Composer\\Installers\\CroogoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/CroogoInstaller.php',
'Composer\\Installers\\DecibelInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DecibelInstaller.php',
+ 'Composer\\Installers\\DframeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DframeInstaller.php',
'Composer\\Installers\\DokuWikiInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php',
'Composer\\Installers\\DolibarrInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php',
'Composer\\Installers\\DrupalInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/DrupalInstaller.php',
@@ -62,6 +63,7 @@ return array(
'Composer\\Installers\\JoomlaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/JoomlaInstaller.php',
'Composer\\Installers\\KanboardInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KanboardInstaller.php',
'Composer\\Installers\\KirbyInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KirbyInstaller.php',
+ 'Composer\\Installers\\KnownInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KnownInstaller.php',
'Composer\\Installers\\KodiCMSInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php',
'Composer\\Installers\\KohanaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/KohanaInstaller.php',
'Composer\\Installers\\LanManagementSystemInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php',
@@ -96,6 +98,7 @@ return array(
'Composer\\Installers\\PxcmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/PxcmsInstaller.php',
'Composer\\Installers\\RadPHPInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php',
'Composer\\Installers\\ReIndexInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php',
+ 'Composer\\Installers\\Redaxo5Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Redaxo5Installer.php',
'Composer\\Installers\\RedaxoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php',
'Composer\\Installers\\RoundcubeInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php',
'Composer\\Installers\\SMFInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/SMFInstaller.php',
@@ -106,6 +109,7 @@ return array(
'Composer\\Installers\\Symfony1Installer' => $vendorDir . '/composer/installers/src/Composer/Installers/Symfony1Installer.php',
'Composer\\Installers\\TYPO3CmsInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php',
'Composer\\Installers\\TYPO3FlowInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php',
+ 'Composer\\Installers\\TaoInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TaoInstaller.php',
'Composer\\Installers\\TheliaInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TheliaInstaller.php',
'Composer\\Installers\\TuskInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/TuskInstaller.php',
'Composer\\Installers\\UserFrostingInstaller' => $vendorDir . '/composer/installers/src/Composer/Installers/UserFrostingInstaller.php',
@@ -596,6 +600,7 @@ return array(
'Maps\\Presentation\\CoordinateFormatter' => $baseDir . '/extensions/Maps/src/Presentation/CoordinateFormatter.php',
'Maps\\Presentation\\ElementJsonSerializer' => $baseDir . '/extensions/Maps/src/Presentation/ElementJsonSerializer.php',
'Maps\\Presentation\\KmlFormatter' => $baseDir . '/extensions/Maps/src/Presentation/KmlFormatter.php',
+ 'Maps\\Presentation\\MapHtmlBuilder' => $baseDir . '/extensions/Maps/src/Presentation/MapHtmlBuilder.php',
'Maps\\Presentation\\MapsDistanceParser' => $baseDir . '/extensions/Maps/src/Presentation/MapsDistanceParser.php',
'Maps\\Presentation\\ParameterExtractor' => $baseDir . '/extensions/Maps/src/Presentation/ParameterExtractor.php',
'Maps\\Presentation\\WikitextParser' => $baseDir . '/extensions/Maps/src/Presentation/WikitextParser.php',
@@ -648,6 +653,25 @@ return array(
'Maps\\Tests\\Unit\\Semantic\\DataValues\\CoordinateValueTest' => $baseDir . '/extensions/Maps/tests/Unit/Semantic/DataValues/CoordinateValueTest.php',
'Maps\\Tests\\Util\\PageCreator' => $baseDir . '/extensions/Maps/tests/Util/PageCreator.php',
'Maps\\Tests\\Util\\TestFactory' => $baseDir . '/extensions/Maps/tests/Util/TestFactory.php',
+ 'Mermaid\\HookRegistry' => $baseDir . '/extensions/Mermaid/src/HookRegistry.php',
+ 'Mermaid\\MermaidParserFunction' => $baseDir . '/extensions/Mermaid/src/MermaidParserFunction.php',
+ 'ModernTimeline\\Event' => $baseDir . '/extensions/ModernTimeline/src/Event.php',
+ 'ModernTimeline\\JsonBuilder' => $baseDir . '/extensions/ModernTimeline/src/JsonBuilder.php',
+ 'ModernTimeline\\ModernTimelinePrinter' => $baseDir . '/extensions/ModernTimeline/src/ModernTimelinePrinter.php',
+ 'ModernTimeline\\ModernTimelineSetup' => $baseDir . '/extensions/ModernTimeline/src/ModernTimelineSetup.php',
+ 'ModernTimeline\\ResultFacade\\PropertyValueCollection' => $baseDir . '/extensions/ModernTimeline/src/ResultFacade/PropertyValueCollection.php',
+ 'ModernTimeline\\ResultFacade\\ResultSimplifier' => $baseDir . '/extensions/ModernTimeline/src/ResultFacade/ResultSimplifier.php',
+ 'ModernTimeline\\ResultFacade\\Subject' => $baseDir . '/extensions/ModernTimeline/src/ResultFacade/Subject.php',
+ 'ModernTimeline\\ResultFacade\\SubjectCollection' => $baseDir . '/extensions/ModernTimeline/src/ResultFacade/SubjectCollection.php',
+ 'ModernTimeline\\SlidePresenter\\SimpleSlidePresenter' => $baseDir . '/extensions/ModernTimeline/src/SlidePresenter/SimpleSlidePresenter.php',
+ 'ModernTimeline\\SlidePresenter\\SlidePresenter' => $baseDir . '/extensions/ModernTimeline/src/SlidePresenter/SlidePresenter.php',
+ 'ModernTimeline\\SlidePresenter\\TemplateSlidePresenter' => $baseDir . '/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php',
+ 'ModernTimeline\\Tests\\Integration\\OptionsTest' => $baseDir . '/extensions/ModernTimeline/tests/Integration/OptionsTest.php',
+ 'ModernTimeline\\Tests\\System\\JsonScriptTest' => $baseDir . '/extensions/ModernTimeline/tests/System/JsonScriptTest.php',
+ 'ModernTimeline\\Tests\\Unit\\JsonBuilderTest' => $baseDir . '/extensions/ModernTimeline/tests/Unit/JsonBuilderTest.php',
+ 'ModernTimeline\\Tests\\Unit\\SlidePresenter\\TemplateSlidePresenterTest' => $baseDir . '/extensions/ModernTimeline/tests/Unit/SlidePresenter/TemplateSlidePresenterTest.php',
+ 'ModernTimeline\\TimelineOptions' => $baseDir . '/extensions/ModernTimeline/src/TimelineOptions.php',
+ 'ModernTimeline\\TimelinePresenter' => $baseDir . '/extensions/ModernTimeline/src/TimelinePresenter.php',
'Net_SMTP' => $vendorDir . '/pear/net_smtp/Net/SMTP.php',
'Net_Socket' => $vendorDir . '/pear/net_socket/Net/Socket.php',
'OOUI\\AccessKeyedElement' => $vendorDir . '/oojs/oojs-ui/php/mixins/AccessKeyedElement.php',
@@ -777,13 +801,14 @@ return array(
'PEAR_ErrorStack' => $vendorDir . '/pear/pear-core-minimal/src/PEAR/ErrorStack.php',
'PEAR_Exception' => $vendorDir . '/pear/pear_exception/PEAR/Exception.php',
'PEAR_ExceptionTest' => $vendorDir . '/pear/pear_exception/tests/PEAR/ExceptionTest.php',
- 'ParamProcessor\\Definition\\DimensionParam' => $vendorDir . '/param-processor/param-processor/src/Definition/DimensionParam.php',
'ParamProcessor\\Definition\\StringParam' => $vendorDir . '/param-processor/param-processor/src/Definition/StringParam.php',
'ParamProcessor\\IParam' => $vendorDir . '/param-processor/param-processor/src/IParam.php',
'ParamProcessor\\IParamDefinition' => $vendorDir . '/param-processor/param-processor/src/IParamDefinition.php',
'ParamProcessor\\MediaWikiTitleValue' => $baseDir . '/extensions/Validator/src/ParamProcessor/MediaWikiTitleValue.php',
'ParamProcessor\\Options' => $vendorDir . '/param-processor/param-processor/src/Options.php',
- 'ParamProcessor\\Param' => $vendorDir . '/param-processor/param-processor/src/Param.php',
+ 'ParamProcessor\\PackagePrivate\\DimensionParser' => $vendorDir . '/param-processor/param-processor/src/PackagePrivate/DimensionParser.php',
+ 'ParamProcessor\\PackagePrivate\\Param' => $vendorDir . '/param-processor/param-processor/src/PackagePrivate/Param.php',
+ 'ParamProcessor\\PackagePrivate\\ParamType' => $vendorDir . '/param-processor/param-processor/src/PackagePrivate/ParamType.php',
'ParamProcessor\\ParamDefinition' => $vendorDir . '/param-processor/param-processor/src/ParamDefinition.php',
'ParamProcessor\\ParamDefinitionFactory' => $vendorDir . '/param-processor/param-processor/src/ParamDefinitionFactory.php',
'ParamProcessor\\ParameterTypes' => $vendorDir . '/param-processor/param-processor/src/ParameterTypes.php',
@@ -794,8 +819,6 @@ return array(
'ParamProcessor\\Processor' => $vendorDir . '/param-processor/param-processor/src/Processor.php',
'ParamProcessor\\Settings' => $vendorDir . '/param-processor/param-processor/src/Settings.php',
'ParamProcessor\\TSNode' => $vendorDir . '/param-processor/param-processor/src/TopologicalSort.php',
- 'ParamProcessor\\Tests\\Definitions\\NumericParamTest' => $vendorDir . '/param-processor/param-processor/tests/phpunit/Definitions/NumericParamTest.php',
- 'ParamProcessor\\Tests\\Definitions\\ParamDefinitionTest' => $vendorDir . '/param-processor/param-processor/tests/phpunit/Definitions/ParamDefinitionTest.php',
'ParamProcessor\\TitleParser' => $baseDir . '/extensions/Validator/src/ParamProcessor/TitleParser.php',
'ParamProcessor\\TopologicalSort' => $vendorDir . '/param-processor/param-processor/src/TopologicalSort.php',
'ParserHook' => $baseDir . '/extensions/Validator/src/legacy/ParserHook.php',
@@ -919,7 +942,6 @@ return array(
'SFS\\Output' => $baseDir . '/extensions/SemanticFormsSelect/src/Output.php',
'SFS\\SelectField' => $baseDir . '/extensions/SemanticFormsSelect/src/SelectField.php',
'SFS\\SemanticFormsSelectInput' => $baseDir . '/extensions/SemanticFormsSelect/src/SemanticFormsSelectInput.php',
- 'SMWBibTeXEntry' => $baseDir . '/extensions/SemanticResultFormats/formats/bibtex/SRF_BibTeX.php',
'SMWCategoryResultPrinter' => $baseDir . '/extensions/SemanticMediaWiki/includes/IdeAliases.php',
'SMWConceptValue' => $baseDir . '/extensions/SemanticMediaWiki/includes/datavalues/SMW_DV_Concept.php',
'SMWDIBlob' => $baseDir . '/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Blob.php',
@@ -1714,7 +1736,6 @@ return array(
'SMW\\Utils\\Tokenizer' => $baseDir . '/extensions/SemanticMediaWiki/src/Utils/Tokenizer.php',
'SMW\\WantedPropertiesQueryPage' => $baseDir . '/extensions/SemanticMediaWiki/includes/querypages/WantedPropertiesQueryPage.php',
'SRFArray' => $baseDir . '/extensions/SemanticResultFormats/formats/array/SRF_Array.php',
- 'SRFBibTeX' => $baseDir . '/extensions/SemanticResultFormats/formats/bibtex/SRF_BibTeX.php',
'SRFBoilerplate' => $baseDir . '/extensions/SemanticResultFormats/formats/boilerplate/SRF_Boilerplate.php',
'SRFCHistoricalDate' => $baseDir . '/extensions/SemanticResultFormats/formats/calendar/SRFC_HistoricalDate.php',
'SRFCalendar' => $baseDir . '/extensions/SemanticResultFormats/formats/calendar/SRF_Calendar.php',
@@ -1723,16 +1744,12 @@ return array(
'SRFExhibit' => $baseDir . '/extensions/SemanticResultFormats/formats/Exhibit/SRF_Exhibit.php',
'SRFGoogleBar' => $baseDir . '/extensions/SemanticResultFormats/formats/googlecharts/SRF_GoogleBar.php',
'SRFGooglePie' => $baseDir . '/extensions/SemanticResultFormats/formats/googlecharts/SRF_GooglePie.php',
- 'SRFGraph' => $baseDir . '/extensions/SemanticResultFormats/formats/graphviz/SRF_Graph.php',
'SRFHash' => $baseDir . '/extensions/SemanticResultFormats/formats/array/SRF_Hash.php',
'SRFHooks' => $baseDir . '/extensions/SemanticResultFormats/SemanticResultFormats.hooks.php',
'SRFIncoming' => $baseDir . '/extensions/SemanticResultFormats/formats/incoming/SRF_Incoming.php',
'SRFJitGraph' => $baseDir . '/extensions/SemanticResultFormats/formats/JitGraph/SRF_JitGraph.php',
'SRFListWidget' => $baseDir . '/extensions/SemanticResultFormats/formats/widget/SRF_ListWidget.php',
'SRFMath' => $baseDir . '/extensions/SemanticResultFormats/formats/math/SRF_Math.php',
- 'SRFOutline' => $baseDir . '/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php',
- 'SRFOutlineItem' => $baseDir . '/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php',
- 'SRFOutlineTree' => $baseDir . '/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php',
'SRFPageWidget' => $baseDir . '/extensions/SemanticResultFormats/formats/widget/SRF_PageWidget.php',
'SRFParserFunctions' => $baseDir . '/extensions/SemanticResultFormats/SemanticResultFormats.parser.php',
'SRFProcess' => $baseDir . '/extensions/SemanticResultFormats/formats/graphviz/SRF_Process.php',
@@ -1744,6 +1761,8 @@ return array(
'SRFTimeseries' => $baseDir . '/extensions/SemanticResultFormats/formats/timeseries/SRF_Timeseries.php',
'SRFUtils' => $baseDir . '/extensions/SemanticResultFormats/SemanticResultFormats.utils.php',
'SRFValueRank' => $baseDir . '/extensions/SemanticResultFormats/formats/valuerank/SRF_ValueRank.php',
+ 'SRF\\BibTex\\BibTexFileExportPrinter' => $baseDir . '/extensions/SemanticResultFormats/src/BibTex/BibTexFileExportPrinter.php',
+ 'SRF\\BibTex\\Item' => $baseDir . '/extensions/SemanticResultFormats/src/BibTex/Item.php',
'SRF\\DataTables' => $baseDir . '/extensions/SemanticResultFormats/formats/datatables/DataTables.php',
'SRF\\EventCalendar' => $baseDir . '/extensions/SemanticResultFormats/formats/calendar/EventCalendar.php',
'SRF\\Filtered\\Filter\\DistanceFilter' => $baseDir . '/extensions/SemanticResultFormats/formats/filtered/src/Filters/DistanceFilter.php',
@@ -1762,9 +1781,19 @@ return array(
'SRF\\Formats\\Tree\\TreeNodePrinter' => $baseDir . '/extensions/SemanticResultFormats/formats/tree/TreeNodeVisitor.php',
'SRF\\Formats\\Tree\\TreeResultPrinter' => $baseDir . '/extensions/SemanticResultFormats/formats/tree/TreeResultPrinter.php',
'SRF\\Gallery' => $baseDir . '/extensions/SemanticResultFormats/formats/gallery/Gallery.php',
+ 'SRF\\Gantt\\Gantt' => $baseDir . '/extensions/SemanticResultFormats/formats/Gantt/src/Gantt.php',
+ 'SRF\\Gantt\\GanttPrinter' => $baseDir . '/extensions/SemanticResultFormats/formats/Gantt/GanttPrinter.php',
+ 'SRF\\Gantt\\GanttSection' => $baseDir . '/extensions/SemanticResultFormats/formats/Gantt/src/GanttSection.php',
+ 'SRF\\Gantt\\GanttTask' => $baseDir . '/extensions/SemanticResultFormats/formats/Gantt/src/GanttTask.php',
+ 'SRF\\Graph\\GraphPrinter' => $baseDir . '/extensions/SemanticResultFormats/src/Graph/GraphPrinter.php',
'SRF\\MediaPlayer' => $baseDir . '/extensions/SemanticResultFormats/formats/media/MediaPlayer.php',
+ 'SRF\\Outline\\ListTreeBuilder' => $baseDir . '/extensions/SemanticResultFormats/src/Outline/ListTreeBuilder.php',
+ 'SRF\\Outline\\OutlineItem' => $baseDir . '/extensions/SemanticResultFormats/src/Outline/OutlineItem.php',
+ 'SRF\\Outline\\OutlineResultPrinter' => $baseDir . '/extensions/SemanticResultFormats/src/Outline/OutlineResultPrinter.php',
+ 'SRF\\Outline\\OutlineTree' => $baseDir . '/extensions/SemanticResultFormats/src/Outline/OutlineTree.php',
+ 'SRF\\Outline\\TemplateBuilder' => $baseDir . '/extensions/SemanticResultFormats/src/Outline/TemplateBuilder.php',
'SRF\\ResourceFormatter' => $baseDir . '/extensions/SemanticResultFormats/src/ResourceFormatter.php',
- 'SRF\\SRFExcel' => $baseDir . '/extensions/SemanticResultFormats/formats/excel/SRF_Excel.php',
+ 'SRF\\SpreadsheetPrinter' => $baseDir . '/extensions/SemanticResultFormats/formats/spreadsheet/SpreadsheetPrinter.php',
'SRF\\TagCloud' => $baseDir . '/extensions/SemanticResultFormats/formats/tagcloud/TagCloud.php',
'SRF\\iCalendar\\IcalTimezoneFormatter' => $baseDir . '/extensions/SemanticResultFormats/src/iCalendar/IcalTimezoneFormatter.php',
'SRF\\iCalendar\\iCalendarFileExportPrinter' => $baseDir . '/extensions/SemanticResultFormats/src/iCalendar/iCalendarFileExportPrinter.php',
diff --git a/www/wiki/vendor/composer/autoload_files.php b/www/wiki/vendor/composer/autoload_files.php
index b32426db..cc6650f8 100644
--- a/www/wiki/vendor/composer/autoload_files.php
+++ b/www/wiki/vendor/composer/autoload_files.php
@@ -18,6 +18,7 @@ return array(
'23842c11409ef125f7fd90c8b167279e' => $vendorDir . '/wikimedia/at-ease/src/MediaWiki/Functions.php',
'eccc0347283a01e62f5536bcf76b6e62' => $vendorDir . '/wikimedia/at-ease/src/Wikimedia/Functions.php',
'909f49809564e82b2d61096b70b21283' => $baseDir . '/extensions/Bootstrap/Bootstrap.php',
+ '5a1406346dc1f0175f8532cdd2e4a952' => $baseDir . '/extensions/Mermaid/Mermaid.php',
'c3ae67574219cc56cab6c30ef8877b85' => $baseDir . '/extensions/Validator/Validator.php',
'd5ece1612187536cca0f0d445ce68f45' => $baseDir . '/skins/chameleon/Chameleon.php',
'cb42de33506561e6b5fe72b72238a9a0' => $baseDir . '/skins/chameleon/src/SkinChameleon.php',
diff --git a/www/wiki/vendor/composer/autoload_psr4.php b/www/wiki/vendor/composer/autoload_psr4.php
index 4e71ca4f..b9cf4e20 100644
--- a/www/wiki/vendor/composer/autoload_psr4.php
+++ b/www/wiki/vendor/composer/autoload_psr4.php
@@ -39,6 +39,9 @@ return array(
'Onoi\\CallbackContainer\\' => array($vendorDir . '/onoi/callback-container/src'),
'Onoi\\Cache\\' => array($vendorDir . '/onoi/cache/src'),
'Onoi\\BlobStore\\' => array($vendorDir . '/onoi/blob-store/src'),
+ 'ModernTimeline\\Tests\\' => array($baseDir . '/extensions/ModernTimeline/tests'),
+ 'ModernTimeline\\' => array($baseDir . '/extensions/ModernTimeline/src'),
+ 'Mermaid\\' => array($baseDir . '/extensions/Mermaid/src'),
'Maps\\Tests\\' => array($baseDir . '/extensions/Maps/tests'),
'Maps\\' => array($baseDir . '/extensions/Maps/src'),
'Jeroen\\SimpleGeocoder\\' => array($vendorDir . '/jeroen/simple-geocoder/src'),
diff --git a/www/wiki/vendor/composer/autoload_static.php b/www/wiki/vendor/composer/autoload_static.php
index e9970072..58689690 100644
--- a/www/wiki/vendor/composer/autoload_static.php
+++ b/www/wiki/vendor/composer/autoload_static.php
@@ -19,6 +19,7 @@ class ComposerStaticInit_mediawiki_vendor
'23842c11409ef125f7fd90c8b167279e' => __DIR__ . '/..' . '/wikimedia/at-ease/src/MediaWiki/Functions.php',
'eccc0347283a01e62f5536bcf76b6e62' => __DIR__ . '/..' . '/wikimedia/at-ease/src/Wikimedia/Functions.php',
'909f49809564e82b2d61096b70b21283' => __DIR__ . '/../..' . '/extensions/Bootstrap/Bootstrap.php',
+ '5a1406346dc1f0175f8532cdd2e4a952' => __DIR__ . '/../..' . '/extensions/Mermaid/Mermaid.php',
'c3ae67574219cc56cab6c30ef8877b85' => __DIR__ . '/../..' . '/extensions/Validator/Validator.php',
'd5ece1612187536cca0f0d445ce68f45' => __DIR__ . '/../..' . '/skins/chameleon/Chameleon.php',
'cb42de33506561e6b5fe72b72238a9a0' => __DIR__ . '/../..' . '/skins/chameleon/src/SkinChameleon.php',
@@ -87,6 +88,9 @@ class ComposerStaticInit_mediawiki_vendor
),
'M' =>
array (
+ 'ModernTimeline\\Tests\\' => 21,
+ 'ModernTimeline\\' => 15,
+ 'Mermaid\\' => 8,
'Maps\\Tests\\' => 11,
'Maps\\' => 5,
),
@@ -261,6 +265,18 @@ class ComposerStaticInit_mediawiki_vendor
array (
0 => __DIR__ . '/..' . '/onoi/blob-store/src',
),
+ 'ModernTimeline\\Tests\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/extensions/ModernTimeline/tests',
+ ),
+ 'ModernTimeline\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/extensions/ModernTimeline/src',
+ ),
+ 'Mermaid\\' =>
+ array (
+ 0 => __DIR__ . '/../..' . '/extensions/Mermaid/src',
+ ),
'Maps\\Tests\\' =>
array (
0 => __DIR__ . '/../..' . '/extensions/Maps/tests',
@@ -428,6 +444,7 @@ class ComposerStaticInit_mediawiki_vendor
'Composer\\Installers\\CraftInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CraftInstaller.php',
'Composer\\Installers\\CroogoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/CroogoInstaller.php',
'Composer\\Installers\\DecibelInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DecibelInstaller.php',
+ 'Composer\\Installers\\DframeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DframeInstaller.php',
'Composer\\Installers\\DokuWikiInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DokuWikiInstaller.php',
'Composer\\Installers\\DolibarrInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DolibarrInstaller.php',
'Composer\\Installers\\DrupalInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/DrupalInstaller.php',
@@ -445,6 +462,7 @@ class ComposerStaticInit_mediawiki_vendor
'Composer\\Installers\\JoomlaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/JoomlaInstaller.php',
'Composer\\Installers\\KanboardInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KanboardInstaller.php',
'Composer\\Installers\\KirbyInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KirbyInstaller.php',
+ 'Composer\\Installers\\KnownInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KnownInstaller.php',
'Composer\\Installers\\KodiCMSInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KodiCMSInstaller.php',
'Composer\\Installers\\KohanaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/KohanaInstaller.php',
'Composer\\Installers\\LanManagementSystemInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php',
@@ -479,6 +497,7 @@ class ComposerStaticInit_mediawiki_vendor
'Composer\\Installers\\PxcmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/PxcmsInstaller.php',
'Composer\\Installers\\RadPHPInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RadPHPInstaller.php',
'Composer\\Installers\\ReIndexInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/ReIndexInstaller.php',
+ 'Composer\\Installers\\Redaxo5Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Redaxo5Installer.php',
'Composer\\Installers\\RedaxoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RedaxoInstaller.php',
'Composer\\Installers\\RoundcubeInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/RoundcubeInstaller.php',
'Composer\\Installers\\SMFInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/SMFInstaller.php',
@@ -489,6 +508,7 @@ class ComposerStaticInit_mediawiki_vendor
'Composer\\Installers\\Symfony1Installer' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/Symfony1Installer.php',
'Composer\\Installers\\TYPO3CmsInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php',
'Composer\\Installers\\TYPO3FlowInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php',
+ 'Composer\\Installers\\TaoInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TaoInstaller.php',
'Composer\\Installers\\TheliaInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TheliaInstaller.php',
'Composer\\Installers\\TuskInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/TuskInstaller.php',
'Composer\\Installers\\UserFrostingInstaller' => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers/UserFrostingInstaller.php',
@@ -979,6 +999,7 @@ class ComposerStaticInit_mediawiki_vendor
'Maps\\Presentation\\CoordinateFormatter' => __DIR__ . '/../..' . '/extensions/Maps/src/Presentation/CoordinateFormatter.php',
'Maps\\Presentation\\ElementJsonSerializer' => __DIR__ . '/../..' . '/extensions/Maps/src/Presentation/ElementJsonSerializer.php',
'Maps\\Presentation\\KmlFormatter' => __DIR__ . '/../..' . '/extensions/Maps/src/Presentation/KmlFormatter.php',
+ 'Maps\\Presentation\\MapHtmlBuilder' => __DIR__ . '/../..' . '/extensions/Maps/src/Presentation/MapHtmlBuilder.php',
'Maps\\Presentation\\MapsDistanceParser' => __DIR__ . '/../..' . '/extensions/Maps/src/Presentation/MapsDistanceParser.php',
'Maps\\Presentation\\ParameterExtractor' => __DIR__ . '/../..' . '/extensions/Maps/src/Presentation/ParameterExtractor.php',
'Maps\\Presentation\\WikitextParser' => __DIR__ . '/../..' . '/extensions/Maps/src/Presentation/WikitextParser.php',
@@ -1031,6 +1052,25 @@ class ComposerStaticInit_mediawiki_vendor
'Maps\\Tests\\Unit\\Semantic\\DataValues\\CoordinateValueTest' => __DIR__ . '/../..' . '/extensions/Maps/tests/Unit/Semantic/DataValues/CoordinateValueTest.php',
'Maps\\Tests\\Util\\PageCreator' => __DIR__ . '/../..' . '/extensions/Maps/tests/Util/PageCreator.php',
'Maps\\Tests\\Util\\TestFactory' => __DIR__ . '/../..' . '/extensions/Maps/tests/Util/TestFactory.php',
+ 'Mermaid\\HookRegistry' => __DIR__ . '/../..' . '/extensions/Mermaid/src/HookRegistry.php',
+ 'Mermaid\\MermaidParserFunction' => __DIR__ . '/../..' . '/extensions/Mermaid/src/MermaidParserFunction.php',
+ 'ModernTimeline\\Event' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/Event.php',
+ 'ModernTimeline\\JsonBuilder' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/JsonBuilder.php',
+ 'ModernTimeline\\ModernTimelinePrinter' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/ModernTimelinePrinter.php',
+ 'ModernTimeline\\ModernTimelineSetup' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/ModernTimelineSetup.php',
+ 'ModernTimeline\\ResultFacade\\PropertyValueCollection' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/ResultFacade/PropertyValueCollection.php',
+ 'ModernTimeline\\ResultFacade\\ResultSimplifier' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/ResultFacade/ResultSimplifier.php',
+ 'ModernTimeline\\ResultFacade\\Subject' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/ResultFacade/Subject.php',
+ 'ModernTimeline\\ResultFacade\\SubjectCollection' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/ResultFacade/SubjectCollection.php',
+ 'ModernTimeline\\SlidePresenter\\SimpleSlidePresenter' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/SlidePresenter/SimpleSlidePresenter.php',
+ 'ModernTimeline\\SlidePresenter\\SlidePresenter' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/SlidePresenter/SlidePresenter.php',
+ 'ModernTimeline\\SlidePresenter\\TemplateSlidePresenter' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/SlidePresenter/TemplateSlidePresenter.php',
+ 'ModernTimeline\\Tests\\Integration\\OptionsTest' => __DIR__ . '/../..' . '/extensions/ModernTimeline/tests/Integration/OptionsTest.php',
+ 'ModernTimeline\\Tests\\System\\JsonScriptTest' => __DIR__ . '/../..' . '/extensions/ModernTimeline/tests/System/JsonScriptTest.php',
+ 'ModernTimeline\\Tests\\Unit\\JsonBuilderTest' => __DIR__ . '/../..' . '/extensions/ModernTimeline/tests/Unit/JsonBuilderTest.php',
+ 'ModernTimeline\\Tests\\Unit\\SlidePresenter\\TemplateSlidePresenterTest' => __DIR__ . '/../..' . '/extensions/ModernTimeline/tests/Unit/SlidePresenter/TemplateSlidePresenterTest.php',
+ 'ModernTimeline\\TimelineOptions' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/TimelineOptions.php',
+ 'ModernTimeline\\TimelinePresenter' => __DIR__ . '/../..' . '/extensions/ModernTimeline/src/TimelinePresenter.php',
'Net_SMTP' => __DIR__ . '/..' . '/pear/net_smtp/Net/SMTP.php',
'Net_Socket' => __DIR__ . '/..' . '/pear/net_socket/Net/Socket.php',
'OOUI\\AccessKeyedElement' => __DIR__ . '/..' . '/oojs/oojs-ui/php/mixins/AccessKeyedElement.php',
@@ -1160,13 +1200,14 @@ class ComposerStaticInit_mediawiki_vendor
'PEAR_ErrorStack' => __DIR__ . '/..' . '/pear/pear-core-minimal/src/PEAR/ErrorStack.php',
'PEAR_Exception' => __DIR__ . '/..' . '/pear/pear_exception/PEAR/Exception.php',
'PEAR_ExceptionTest' => __DIR__ . '/..' . '/pear/pear_exception/tests/PEAR/ExceptionTest.php',
- 'ParamProcessor\\Definition\\DimensionParam' => __DIR__ . '/..' . '/param-processor/param-processor/src/Definition/DimensionParam.php',
'ParamProcessor\\Definition\\StringParam' => __DIR__ . '/..' . '/param-processor/param-processor/src/Definition/StringParam.php',
'ParamProcessor\\IParam' => __DIR__ . '/..' . '/param-processor/param-processor/src/IParam.php',
'ParamProcessor\\IParamDefinition' => __DIR__ . '/..' . '/param-processor/param-processor/src/IParamDefinition.php',
'ParamProcessor\\MediaWikiTitleValue' => __DIR__ . '/../..' . '/extensions/Validator/src/ParamProcessor/MediaWikiTitleValue.php',
'ParamProcessor\\Options' => __DIR__ . '/..' . '/param-processor/param-processor/src/Options.php',
- 'ParamProcessor\\Param' => __DIR__ . '/..' . '/param-processor/param-processor/src/Param.php',
+ 'ParamProcessor\\PackagePrivate\\DimensionParser' => __DIR__ . '/..' . '/param-processor/param-processor/src/PackagePrivate/DimensionParser.php',
+ 'ParamProcessor\\PackagePrivate\\Param' => __DIR__ . '/..' . '/param-processor/param-processor/src/PackagePrivate/Param.php',
+ 'ParamProcessor\\PackagePrivate\\ParamType' => __DIR__ . '/..' . '/param-processor/param-processor/src/PackagePrivate/ParamType.php',
'ParamProcessor\\ParamDefinition' => __DIR__ . '/..' . '/param-processor/param-processor/src/ParamDefinition.php',
'ParamProcessor\\ParamDefinitionFactory' => __DIR__ . '/..' . '/param-processor/param-processor/src/ParamDefinitionFactory.php',
'ParamProcessor\\ParameterTypes' => __DIR__ . '/..' . '/param-processor/param-processor/src/ParameterTypes.php',
@@ -1177,8 +1218,6 @@ class ComposerStaticInit_mediawiki_vendor
'ParamProcessor\\Processor' => __DIR__ . '/..' . '/param-processor/param-processor/src/Processor.php',
'ParamProcessor\\Settings' => __DIR__ . '/..' . '/param-processor/param-processor/src/Settings.php',
'ParamProcessor\\TSNode' => __DIR__ . '/..' . '/param-processor/param-processor/src/TopologicalSort.php',
- 'ParamProcessor\\Tests\\Definitions\\NumericParamTest' => __DIR__ . '/..' . '/param-processor/param-processor/tests/phpunit/Definitions/NumericParamTest.php',
- 'ParamProcessor\\Tests\\Definitions\\ParamDefinitionTest' => __DIR__ . '/..' . '/param-processor/param-processor/tests/phpunit/Definitions/ParamDefinitionTest.php',
'ParamProcessor\\TitleParser' => __DIR__ . '/../..' . '/extensions/Validator/src/ParamProcessor/TitleParser.php',
'ParamProcessor\\TopologicalSort' => __DIR__ . '/..' . '/param-processor/param-processor/src/TopologicalSort.php',
'ParserHook' => __DIR__ . '/../..' . '/extensions/Validator/src/legacy/ParserHook.php',
@@ -1302,7 +1341,6 @@ class ComposerStaticInit_mediawiki_vendor
'SFS\\Output' => __DIR__ . '/../..' . '/extensions/SemanticFormsSelect/src/Output.php',
'SFS\\SelectField' => __DIR__ . '/../..' . '/extensions/SemanticFormsSelect/src/SelectField.php',
'SFS\\SemanticFormsSelectInput' => __DIR__ . '/../..' . '/extensions/SemanticFormsSelect/src/SemanticFormsSelectInput.php',
- 'SMWBibTeXEntry' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/bibtex/SRF_BibTeX.php',
'SMWCategoryResultPrinter' => __DIR__ . '/../..' . '/extensions/SemanticMediaWiki/includes/IdeAliases.php',
'SMWConceptValue' => __DIR__ . '/../..' . '/extensions/SemanticMediaWiki/includes/datavalues/SMW_DV_Concept.php',
'SMWDIBlob' => __DIR__ . '/../..' . '/extensions/SemanticMediaWiki/includes/dataitems/SMW_DI_Blob.php',
@@ -2097,7 +2135,6 @@ class ComposerStaticInit_mediawiki_vendor
'SMW\\Utils\\Tokenizer' => __DIR__ . '/../..' . '/extensions/SemanticMediaWiki/src/Utils/Tokenizer.php',
'SMW\\WantedPropertiesQueryPage' => __DIR__ . '/../..' . '/extensions/SemanticMediaWiki/includes/querypages/WantedPropertiesQueryPage.php',
'SRFArray' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/array/SRF_Array.php',
- 'SRFBibTeX' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/bibtex/SRF_BibTeX.php',
'SRFBoilerplate' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/boilerplate/SRF_Boilerplate.php',
'SRFCHistoricalDate' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/calendar/SRFC_HistoricalDate.php',
'SRFCalendar' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/calendar/SRF_Calendar.php',
@@ -2106,16 +2143,12 @@ class ComposerStaticInit_mediawiki_vendor
'SRFExhibit' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/Exhibit/SRF_Exhibit.php',
'SRFGoogleBar' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/googlecharts/SRF_GoogleBar.php',
'SRFGooglePie' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/googlecharts/SRF_GooglePie.php',
- 'SRFGraph' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/graphviz/SRF_Graph.php',
'SRFHash' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/array/SRF_Hash.php',
'SRFHooks' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/SemanticResultFormats.hooks.php',
'SRFIncoming' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/incoming/SRF_Incoming.php',
'SRFJitGraph' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/JitGraph/SRF_JitGraph.php',
'SRFListWidget' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/widget/SRF_ListWidget.php',
'SRFMath' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/math/SRF_Math.php',
- 'SRFOutline' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php',
- 'SRFOutlineItem' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php',
- 'SRFOutlineTree' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/outline/SRF_Outline.php',
'SRFPageWidget' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/widget/SRF_PageWidget.php',
'SRFParserFunctions' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/SemanticResultFormats.parser.php',
'SRFProcess' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/graphviz/SRF_Process.php',
@@ -2127,6 +2160,8 @@ class ComposerStaticInit_mediawiki_vendor
'SRFTimeseries' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/timeseries/SRF_Timeseries.php',
'SRFUtils' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/SemanticResultFormats.utils.php',
'SRFValueRank' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/valuerank/SRF_ValueRank.php',
+ 'SRF\\BibTex\\BibTexFileExportPrinter' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/src/BibTex/BibTexFileExportPrinter.php',
+ 'SRF\\BibTex\\Item' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/src/BibTex/Item.php',
'SRF\\DataTables' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/datatables/DataTables.php',
'SRF\\EventCalendar' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/calendar/EventCalendar.php',
'SRF\\Filtered\\Filter\\DistanceFilter' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/filtered/src/Filters/DistanceFilter.php',
@@ -2145,9 +2180,19 @@ class ComposerStaticInit_mediawiki_vendor
'SRF\\Formats\\Tree\\TreeNodePrinter' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/tree/TreeNodeVisitor.php',
'SRF\\Formats\\Tree\\TreeResultPrinter' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/tree/TreeResultPrinter.php',
'SRF\\Gallery' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/gallery/Gallery.php',
+ 'SRF\\Gantt\\Gantt' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/Gantt/src/Gantt.php',
+ 'SRF\\Gantt\\GanttPrinter' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/Gantt/GanttPrinter.php',
+ 'SRF\\Gantt\\GanttSection' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/Gantt/src/GanttSection.php',
+ 'SRF\\Gantt\\GanttTask' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/Gantt/src/GanttTask.php',
+ 'SRF\\Graph\\GraphPrinter' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/src/Graph/GraphPrinter.php',
'SRF\\MediaPlayer' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/media/MediaPlayer.php',
+ 'SRF\\Outline\\ListTreeBuilder' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/src/Outline/ListTreeBuilder.php',
+ 'SRF\\Outline\\OutlineItem' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/src/Outline/OutlineItem.php',
+ 'SRF\\Outline\\OutlineResultPrinter' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/src/Outline/OutlineResultPrinter.php',
+ 'SRF\\Outline\\OutlineTree' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/src/Outline/OutlineTree.php',
+ 'SRF\\Outline\\TemplateBuilder' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/src/Outline/TemplateBuilder.php',
'SRF\\ResourceFormatter' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/src/ResourceFormatter.php',
- 'SRF\\SRFExcel' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/excel/SRF_Excel.php',
+ 'SRF\\SpreadsheetPrinter' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/spreadsheet/SpreadsheetPrinter.php',
'SRF\\TagCloud' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/formats/tagcloud/TagCloud.php',
'SRF\\iCalendar\\IcalTimezoneFormatter' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/src/iCalendar/IcalTimezoneFormatter.php',
'SRF\\iCalendar\\iCalendarFileExportPrinter' => __DIR__ . '/../..' . '/extensions/SemanticResultFormats/src/iCalendar/iCalendarFileExportPrinter.php',
diff --git a/www/wiki/vendor/composer/installed.json b/www/wiki/vendor/composer/installed.json
index fc2bb924..604f3d8a 100644
--- a/www/wiki/vendor/composer/installed.json
+++ b/www/wiki/vendor/composer/installed.json
@@ -1,17 +1,17 @@
[
{
"name": "composer/installers",
- "version": "v1.6.0",
- "version_normalized": "1.6.0.0",
+ "version": "v1.7.0",
+ "version_normalized": "1.7.0.0",
"source": {
"type": "git",
"url": "https://github.com/composer/installers.git",
- "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b"
+ "reference": "141b272484481432cda342727a427dc1e206bfa0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/installers/zipball/cfcca6b1b60bc4974324efb5783c13dca6932b5b",
- "reference": "cfcca6b1b60bc4974324efb5783c13dca6932b5b",
+ "url": "https://api.github.com/repos/composer/installers/zipball/141b272484481432cda342727a427dc1e206bfa0",
+ "reference": "141b272484481432cda342727a427dc1e206bfa0",
"shasum": ""
},
"require": {
@@ -25,7 +25,7 @@
"composer/composer": "1.0.*@dev",
"phpunit/phpunit": "^4.8.36"
},
- "time": "2018-08-27T06:10:37+00:00",
+ "time": "2019-08-12T15:00:31+00:00",
"type": "composer-plugin",
"extra": {
"class": "Composer\\Installers\\Plugin",
@@ -69,6 +69,7 @@
"RadPHP",
"SMF",
"Thelia",
+ "Whmcs",
"WolfCMS",
"agl",
"aimeos",
@@ -91,6 +92,7 @@
"installer",
"itop",
"joomla",
+ "known",
"kohana",
"laravel",
"lavalite",
@@ -1133,17 +1135,17 @@
},
{
"name": "mediawiki/maps",
- "version": "7.3.2",
- "version_normalized": "7.3.2.0",
+ "version": "7.4.0",
+ "version_normalized": "7.4.0.0",
"source": {
"type": "git",
"url": "https://github.com/JeroenDeDauw/Maps.git",
- "reference": "57e5b822dacb7ed4eacb4a2d996ce8e6be4ae13a"
+ "reference": "d4d195d5f3e57d5361882b94284286b7599e23dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/JeroenDeDauw/Maps/zipball/57e5b822dacb7ed4eacb4a2d996ce8e6be4ae13a",
- "reference": "57e5b822dacb7ed4eacb4a2d996ce8e6be4ae13a",
+ "url": "https://api.github.com/repos/JeroenDeDauw/Maps/zipball/d4d195d5f3e57d5361882b94284286b7599e23dc",
+ "reference": "d4d195d5f3e57d5361882b94284286b7599e23dc",
"shasum": ""
},
"require": {
@@ -1155,7 +1157,7 @@
"jeroen/simple-geocoder": "~1.2",
"mediawiki/parser-hooks": "~1.5",
"mediawiki/validator": "~2.2",
- "param-processor/param-processor": "~1.4.2",
+ "param-processor/param-processor": "^1.4.2",
"php": ">=7.1"
},
"replace": {
@@ -1167,7 +1169,7 @@
"suggest": {
"mediawiki/semantic-media-wiki": "Add, edit, aggregate and visualize structured coordinate data stored with Semantic MediaWiki"
},
- "time": "2019-07-25T04:17:46+00:00",
+ "time": "2019-08-09T18:15:24+00:00",
"type": "mediawiki-extension",
"extra": {
"branch-alias": {
@@ -1213,6 +1215,59 @@
]
},
{
+ "name": "mediawiki/mermaid",
+ "version": "2.1.1",
+ "version_normalized": "2.1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/SemanticMediaWiki/Mermaid.git",
+ "reference": "9fe1279a9aed7afdecbbed4c183a81302ce63dce"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/SemanticMediaWiki/Mermaid/zipball/9fe1279a9aed7afdecbbed4c183a81302ce63dce",
+ "reference": "9fe1279a9aed7afdecbbed4c183a81302ce63dce",
+ "shasum": ""
+ },
+ "require": {
+ "composer/installers": "1.*,>=1.0.1",
+ "php": ">=5.6.0"
+ },
+ "time": "2019-05-20T10:17:44+00:00",
+ "type": "mediawiki-extension",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "files": [
+ "Mermaid.php"
+ ],
+ "psr-4": {
+ "Mermaid\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "James Hong Kong",
+ "role": "Developer"
+ }
+ ],
+ "description": "Provides a parser function to generate diagrams and flowcharts with the help of the mermaid script language",
+ "homepage": "https://github.com/SemanticMediaWiki/Mermaid",
+ "keywords": [
+ "mediawiki",
+ "mermaid",
+ "parser function"
+ ]
+ },
+ {
"name": "mediawiki/page-forms",
"version": "4.5.1",
"version_normalized": "4.5.1.0",
@@ -1504,36 +1559,38 @@
},
{
"name": "mediawiki/semantic-result-formats",
- "version": "3.0.1",
- "version_normalized": "3.0.1.0",
+ "version": "3.1.0",
+ "version_normalized": "3.1.0.0",
"source": {
"type": "git",
"url": "https://github.com/SemanticMediaWiki/SemanticResultFormats.git",
- "reference": "e1956df8796b8df9a156083801e7dcc0ab2b9a25"
+ "reference": "aa0649f28e536fd9da363dcdff9405dc402ff275"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/SemanticMediaWiki/SemanticResultFormats/zipball/e1956df8796b8df9a156083801e7dcc0ab2b9a25",
- "reference": "e1956df8796b8df9a156083801e7dcc0ab2b9a25",
+ "url": "https://api.github.com/repos/SemanticMediaWiki/SemanticResultFormats/zipball/aa0649f28e536fd9da363dcdff9405dc402ff275",
+ "reference": "aa0649f28e536fd9da363dcdff9405dc402ff275",
"shasum": ""
},
"require": {
"composer/installers": "1.*,>=1.0.1",
"data-values/geo": "~4.0|~3.0|~2.0",
+ "mediawiki/mermaid": "~2.1",
"mediawiki/semantic-media-wiki": "~3.0",
"nicmart/tree": "^0.2.7",
- "php": ">=5.6.0",
+ "php": ">=7.0",
"symfony/css-selector": "^3.3"
},
"suggest": {
"mediawiki/graph-viz": "Required for 'format=graph' and 'format=process'",
- "phpoffice/phpexcel": "Required for 'format=excel'"
+ "phpoffice/phpexcel": "Required for 'format=excel'",
+ "phpoffice/phpspreadsheet": "Required for 'format=spreadsheet'"
},
- "time": "2019-03-27T22:43:56+00:00",
+ "time": "2019-08-18T17:55:25+00:00",
"type": "mediawiki-extension",
"extra": {
"branch-alias": {
- "dev-master": "3.0.x-dev"
+ "dev-master": "3.1.x-dev"
}
},
"installation-source": "dist",
@@ -2167,17 +2224,17 @@
},
{
"name": "param-processor/param-processor",
- "version": "1.4.2",
- "version_normalized": "1.4.2.0",
+ "version": "1.10.0",
+ "version_normalized": "1.10.0.0",
"source": {
"type": "git",
"url": "https://github.com/JeroenDeDauw/ParamProcessor.git",
- "reference": "40cd2140aa339f59c5500760a9f6f1fa6c0ef0a6"
+ "reference": "5dec3e41bdc684640faf334db650e9bd32092e23"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/JeroenDeDauw/ParamProcessor/zipball/40cd2140aa339f59c5500760a9f6f1fa6c0ef0a6",
- "reference": "40cd2140aa339f59c5500760a9f6f1fa6c0ef0a6",
+ "url": "https://api.github.com/repos/JeroenDeDauw/ParamProcessor/zipball/5dec3e41bdc684640faf334db650e9bd32092e23",
+ "reference": "5dec3e41bdc684640faf334db650e9bd32092e23",
"shasum": ""
},
"require": {
@@ -2193,11 +2250,11 @@
"phpunit/phpunit": "~7.4",
"squizlabs/php_codesniffer": "~3.3"
},
- "time": "2018-11-26T05:02:09+00:00",
+ "time": "2019-08-03T15:18:54+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.4.x-dev"
+ "dev-master": "1.x-dev"
}
},
"installation-source": "dist",
@@ -2205,10 +2262,6 @@
"psr-4": {
"ParamProcessor\\": "src"
},
- "classmap": [
- "tests/phpunit/Definitions/ParamDefinitionTest.php",
- "tests/phpunit/Definitions/NumericParamTest.php"
- ],
"files": [
"DefaultConfig.php"
]
@@ -2613,6 +2666,65 @@
]
},
{
+ "name": "professional-wiki/modern-timeline",
+ "version": "1.0.0",
+ "version_normalized": "1.0.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ProfessionalWiki/ModernTimeline.git",
+ "reference": "458b66e8c1e4d05ba3819a0f73b655b97203144c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ProfessionalWiki/ModernTimeline/zipball/458b66e8c1e4d05ba3819a0f73b655b97203144c",
+ "reference": "458b66e8c1e4d05ba3819a0f73b655b97203144c",
+ "shasum": ""
+ },
+ "require": {
+ "composer/installers": "^1.0.1",
+ "param-processor/param-processor": "~1.10",
+ "php": ">=7.1"
+ },
+ "time": "2019-08-16T00:14:56+00:00",
+ "type": "mediawiki-extension",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "ModernTimeline\\": "src/",
+ "ModernTimeline\\Tests\\": "tests/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Professional.Wiki",
+ "role": "Creator",
+ "email": "info@professional.wiki",
+ "homepage": "https://professional.wiki"
+ },
+ {
+ "name": "Jeroen De Dauw",
+ "role": "Creator and lead developer",
+ "email": "jeroendedauw@gmail.com",
+ "homepage": "https://www.entropywins.wtf"
+ }
+ ],
+ "description": "Adds a modern timeline visualization as Semantic MediaWiki result format",
+ "homepage": "https://github.com/ProfessionalWiki/ModernTimeline",
+ "keywords": [
+ "Result format",
+ "Semantic MediaWiki",
+ "mediawiki",
+ "timeline",
+ "timelineJS3",
+ "visualization",
+ "wiki"
+ ]
+ },
+ {
"name": "psr/log",
"version": "1.0.2",
"version_normalized": "1.0.2.0",
diff --git a/www/wiki/vendor/composer/installers/composer.json b/www/wiki/vendor/composer/installers/composer.json
index 6de40853..1f68e72a 100644
--- a/www/wiki/vendor/composer/installers/composer.json
+++ b/www/wiki/vendor/composer/installers/composer.json
@@ -31,6 +31,7 @@
"iTop",
"Joomla",
"Kanboard",
+ "Known",
"Kohana",
"Lan Management System",
"Laravel",
@@ -65,6 +66,7 @@
"symfony",
"Thelia",
"TYPO3",
+ "WHMCS",
"WolfCMS",
"WordPress",
"YAWIK",
diff --git a/www/wiki/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php b/www/wiki/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php
new file mode 100644
index 00000000..70788163
--- /dev/null
+++ b/www/wiki/vendor/composer/installers/src/Composer/Installers/DframeInstaller.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Composer\Installers;
+
+class DframeInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'module' => 'modules/{$vendor}/{$name}/',
+ );
+}
diff --git a/www/wiki/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php b/www/wiki/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php
index fef7c525..f520bfe2 100644
--- a/www/wiki/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php
+++ b/www/wiki/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php
@@ -4,13 +4,17 @@ namespace Composer\Installers;
class DrupalInstaller extends BaseInstaller
{
protected $locations = array(
- 'core' => 'core/',
- 'module' => 'modules/{$name}/',
- 'theme' => 'themes/{$name}/',
- 'library' => 'libraries/{$name}/',
- 'profile' => 'profiles/{$name}/',
- 'drush' => 'drush/{$name}/',
- 'custom-theme' => 'themes/custom/{$name}/',
- 'custom-module' => 'modules/custom/{$name}/',
+ 'core' => 'core/',
+ 'module' => 'modules/{$name}/',
+ 'theme' => 'themes/{$name}/',
+ 'library' => 'libraries/{$name}/',
+ 'profile' => 'profiles/{$name}/',
+ 'drush' => 'drush/{$name}/',
+ 'custom-theme' => 'themes/custom/{$name}/',
+ 'custom-module' => 'modules/custom/{$name}/',
+ 'custom-profile' => 'profiles/custom/{$name}/',
+ 'drupal-multisite' => 'sites/{$name}/',
+ 'console' => 'console/{$name}/',
+ 'console-language' => 'console/language/{$name}/',
);
}
diff --git a/www/wiki/vendor/composer/installers/src/Composer/Installers/Installer.php b/www/wiki/vendor/composer/installers/src/Composer/Installers/Installer.php
index 352cb7fa..651c1904 100644
--- a/www/wiki/vendor/composer/installers/src/Composer/Installers/Installer.php
+++ b/www/wiki/vendor/composer/installers/src/Composer/Installers/Installer.php
@@ -35,6 +35,7 @@ class Installer extends LibraryInstaller
'concrete5' => 'Concrete5Installer',
'craft' => 'CraftInstaller',
'croogo' => 'CroogoInstaller',
+ 'dframe' => 'DframeInstaller',
'dokuwiki' => 'DokuWikiInstaller',
'dolibarr' => 'DolibarrInstaller',
'decibel' => 'DecibelInstaller',
@@ -53,6 +54,7 @@ class Installer extends LibraryInstaller
'joomla' => 'JoomlaInstaller',
'kanboard' => 'KanboardInstaller',
'kirby' => 'KirbyInstaller',
+ 'known' => 'KnownInstaller',
'kodicms' => 'KodiCMSInstaller',
'kohana' => 'KohanaInstaller',
'lms' => 'LanManagementSystemInstaller',
@@ -85,6 +87,7 @@ class Installer extends LibraryInstaller
'phifty' => 'PhiftyInstaller',
'porto' => 'PortoInstaller',
'redaxo' => 'RedaxoInstaller',
+ 'redaxo5' => 'Redaxo5Installer',
'reindex' => 'ReIndexInstaller',
'roundcube' => 'RoundcubeInstaller',
'shopware' => 'ShopwareInstaller',
@@ -93,6 +96,7 @@ class Installer extends LibraryInstaller
'smf' => 'SMFInstaller',
'sydes' => 'SyDESInstaller',
'symfony1' => 'Symfony1Installer',
+ 'tao' => 'TaoInstaller',
'thelia' => 'TheliaInstaller',
'tusk' => 'TuskInstaller',
'typo3-cms' => 'TYPO3CmsInstaller',
diff --git a/www/wiki/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php b/www/wiki/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php
new file mode 100644
index 00000000..c5d08c5f
--- /dev/null
+++ b/www/wiki/vendor/composer/installers/src/Composer/Installers/KnownInstaller.php
@@ -0,0 +1,11 @@
+<?php
+namespace Composer\Installers;
+
+class KnownInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'plugin' => 'IdnoPlugins/{$name}/',
+ 'theme' => 'Themes/{$name}/',
+ 'console' => 'ConsolePlugins/{$name}/',
+ );
+}
diff --git a/www/wiki/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php b/www/wiki/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php
index 4bbbec8c..b7d97039 100644
--- a/www/wiki/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php
+++ b/www/wiki/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php
@@ -4,12 +4,12 @@ namespace Composer\Installers;
class MicroweberInstaller extends BaseInstaller
{
protected $locations = array(
- 'module' => 'userfiles/modules/{$name}/',
- 'module-skin' => 'userfiles/modules/{$name}/templates/',
- 'template' => 'userfiles/templates/{$name}/',
- 'element' => 'userfiles/elements/{$name}/',
- 'vendor' => 'vendor/{$name}/',
- 'components' => 'components/{$name}/'
+ 'module' => 'userfiles/modules/{$install_item_dir}/',
+ 'module-skin' => 'userfiles/modules/{$install_item_dir}/templates/',
+ 'template' => 'userfiles/templates/{$install_item_dir}/',
+ 'element' => 'userfiles/elements/{$install_item_dir}/',
+ 'vendor' => 'vendor/{$install_item_dir}/',
+ 'components' => 'components/{$install_item_dir}/'
);
/**
@@ -22,89 +22,97 @@ class MicroweberInstaller extends BaseInstaller
*/
public function inflectPackageVars($vars)
{
- if ($vars['type'] === 'microweber-template') {
- return $this->inflectTemplateVars($vars);
- }
- if ($vars['type'] === 'microweber-templates') {
- return $this->inflectTemplatesVars($vars);
- }
- if ($vars['type'] === 'microweber-core') {
- return $this->inflectCoreVars($vars);
- }
- if ($vars['type'] === 'microweber-adapter') {
- return $this->inflectCoreVars($vars);
- }
- if ($vars['type'] === 'microweber-module') {
- return $this->inflectModuleVars($vars);
- }
- if ($vars['type'] === 'microweber-modules') {
- return $this->inflectModulesVars($vars);
- }
- if ($vars['type'] === 'microweber-skin') {
- return $this->inflectSkinVars($vars);
- }
- if ($vars['type'] === 'microweber-element' or $vars['type'] === 'microweber-elements') {
- return $this->inflectElementVars($vars);
+
+
+ if ($this->package->getTargetDir()) {
+ $vars['install_item_dir'] = $this->package->getTargetDir();
+ } else {
+ $vars['install_item_dir'] = $vars['name'];
+ if ($vars['type'] === 'microweber-template') {
+ return $this->inflectTemplateVars($vars);
+ }
+ if ($vars['type'] === 'microweber-templates') {
+ return $this->inflectTemplatesVars($vars);
+ }
+ if ($vars['type'] === 'microweber-core') {
+ return $this->inflectCoreVars($vars);
+ }
+ if ($vars['type'] === 'microweber-adapter') {
+ return $this->inflectCoreVars($vars);
+ }
+ if ($vars['type'] === 'microweber-module') {
+ return $this->inflectModuleVars($vars);
+ }
+ if ($vars['type'] === 'microweber-modules') {
+ return $this->inflectModulesVars($vars);
+ }
+ if ($vars['type'] === 'microweber-skin') {
+ return $this->inflectSkinVars($vars);
+ }
+ if ($vars['type'] === 'microweber-element' or $vars['type'] === 'microweber-elements') {
+ return $this->inflectElementVars($vars);
+ }
}
+
return $vars;
}
protected function inflectTemplateVars($vars)
{
- $vars['name'] = preg_replace('/-template$/', '', $vars['name']);
- $vars['name'] = preg_replace('/template-$/', '', $vars['name']);
+ $vars['install_item_dir'] = preg_replace('/-template$/', '', $vars['install_item_dir']);
+ $vars['install_item_dir'] = preg_replace('/template-$/', '', $vars['install_item_dir']);
return $vars;
}
protected function inflectTemplatesVars($vars)
{
- $vars['name'] = preg_replace('/-templates$/', '', $vars['name']);
- $vars['name'] = preg_replace('/templates-$/', '', $vars['name']);
+ $vars['install_item_dir'] = preg_replace('/-templates$/', '', $vars['install_item_dir']);
+ $vars['install_item_dir'] = preg_replace('/templates-$/', '', $vars['install_item_dir']);
return $vars;
}
protected function inflectCoreVars($vars)
{
- $vars['name'] = preg_replace('/-providers$/', '', $vars['name']);
- $vars['name'] = preg_replace('/-provider$/', '', $vars['name']);
- $vars['name'] = preg_replace('/-adapter$/', '', $vars['name']);
+ $vars['install_item_dir'] = preg_replace('/-providers$/', '', $vars['install_item_dir']);
+ $vars['install_item_dir'] = preg_replace('/-provider$/', '', $vars['install_item_dir']);
+ $vars['install_item_dir'] = preg_replace('/-adapter$/', '', $vars['install_item_dir']);
return $vars;
}
protected function inflectModuleVars($vars)
{
- $vars['name'] = preg_replace('/-module$/', '', $vars['name']);
- $vars['name'] = preg_replace('/module-$/', '', $vars['name']);
+ $vars['install_item_dir'] = preg_replace('/-module$/', '', $vars['install_item_dir']);
+ $vars['install_item_dir'] = preg_replace('/module-$/', '', $vars['install_item_dir']);
return $vars;
}
protected function inflectModulesVars($vars)
{
- $vars['name'] = preg_replace('/-modules$/', '', $vars['name']);
- $vars['name'] = preg_replace('/modules-$/', '', $vars['name']);
+ $vars['install_item_dir'] = preg_replace('/-modules$/', '', $vars['install_item_dir']);
+ $vars['install_item_dir'] = preg_replace('/modules-$/', '', $vars['install_item_dir']);
return $vars;
}
protected function inflectSkinVars($vars)
{
- $vars['name'] = preg_replace('/-skin$/', '', $vars['name']);
- $vars['name'] = preg_replace('/skin-$/', '', $vars['name']);
+ $vars['install_item_dir'] = preg_replace('/-skin$/', '', $vars['install_item_dir']);
+ $vars['install_item_dir'] = preg_replace('/skin-$/', '', $vars['install_item_dir']);
return $vars;
}
protected function inflectElementVars($vars)
{
- $vars['name'] = preg_replace('/-elements$/', '', $vars['name']);
- $vars['name'] = preg_replace('/elements-$/', '', $vars['name']);
- $vars['name'] = preg_replace('/-element$/', '', $vars['name']);
- $vars['name'] = preg_replace('/element-$/', '', $vars['name']);
+ $vars['install_item_dir'] = preg_replace('/-elements$/', '', $vars['install_item_dir']);
+ $vars['install_item_dir'] = preg_replace('/elements-$/', '', $vars['install_item_dir']);
+ $vars['install_item_dir'] = preg_replace('/-element$/', '', $vars['install_item_dir']);
+ $vars['install_item_dir'] = preg_replace('/element-$/', '', $vars['install_item_dir']);
return $vars;
}
diff --git a/www/wiki/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php b/www/wiki/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php
index a89c82f7..75dbe71b 100644
--- a/www/wiki/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php
+++ b/www/wiki/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php
@@ -20,6 +20,7 @@ class MoodleInstaller extends BaseInstaller
'calendartype' => 'calendar/type/{$name}/',
'format' => 'course/format/{$name}/',
'coursereport' => 'course/report/{$name}/',
+ 'customcertelement' => 'mod/customcert/element/{$name}/',
'datafield' => 'mod/data/field/{$name}/',
'datapreset' => 'mod/data/preset/{$name}/',
'editor' => 'lib/editor/{$name}/',
diff --git a/www/wiki/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php b/www/wiki/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php
new file mode 100644
index 00000000..23a20347
--- /dev/null
+++ b/www/wiki/vendor/composer/installers/src/Composer/Installers/Redaxo5Installer.php
@@ -0,0 +1,10 @@
+<?php
+namespace Composer\Installers;
+
+class Redaxo5Installer extends BaseInstaller
+{
+ protected $locations = array(
+ 'addon' => 'redaxo/src/addons/{$name}/',
+ 'bestyle-plugin' => 'redaxo/src/addons/be_style/plugins/{$name}/'
+ );
+}
diff --git a/www/wiki/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php b/www/wiki/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php
new file mode 100644
index 00000000..108def15
--- /dev/null
+++ b/www/wiki/vendor/composer/installers/src/Composer/Installers/TaoInstaller.php
@@ -0,0 +1,12 @@
+<?php
+namespace Composer\Installers;
+
+/**
+ * An installer to handle TAO extensions.
+ */
+class TaoInstaller extends BaseInstaller
+{
+ protected $locations = array(
+ 'extension' => '{$name}'
+ );
+}
diff --git a/www/wiki/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php b/www/wiki/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php
index 2cbb4a46..b65dbbaf 100644
--- a/www/wiki/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php
+++ b/www/wiki/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php
@@ -5,6 +5,17 @@ namespace Composer\Installers;
class WHMCSInstaller extends BaseInstaller
{
protected $locations = array(
- 'gateway' => 'modules/gateways/{$name}/',
+ 'addons' => 'modules/addons/{$vendor}_{$name}/',
+ 'fraud' => 'modules/fraud/{$vendor}_{$name}/',
+ 'gateways' => 'modules/gateways/{$vendor}_{$name}/',
+ 'notifications' => 'modules/notifications/{$vendor}_{$name}/',
+ 'registrars' => 'modules/registrars/{$vendor}_{$name}/',
+ 'reports' => 'modules/reports/{$vendor}_{$name}/',
+ 'security' => 'modules/security/{$vendor}_{$name}/',
+ 'servers' => 'modules/servers/{$vendor}_{$name}/',
+ 'social' => 'modules/social/{$vendor}_{$name}/',
+ 'support' => 'modules/support/{$vendor}_{$name}/',
+ 'templates' => 'templates/{$vendor}_{$name}/',
+ 'includes' => 'includes/{$vendor}_{$name}/'
);
}
diff --git a/www/wiki/vendor/param-processor/param-processor/.travis.yml b/www/wiki/vendor/param-processor/param-processor/.travis.yml
index bebb02de..b773815d 100644
--- a/www/wiki/vendor/param-processor/param-processor/.travis.yml
+++ b/www/wiki/vendor/param-processor/param-processor/.travis.yml
@@ -3,14 +3,14 @@ language: php
php:
- 7.1
- 7.2
- - master
+ - 7.3
install: travis_retry composer install
script: composer ci
after_success:
- - if [[ "`phpenv version-name`" != "7.2" ]]; then exit 0; fi
+ - if [[ "`phpenv version-name`" != "7.3" ]]; then exit 0; fi
- vendor/bin/phpunit --coverage-clover coverage.clover
- wget https://scrutinizer-ci.com/ocular.phar
- php ocular.phar code-coverage:upload --format=php-clover coverage.clover
diff --git a/www/wiki/vendor/param-processor/param-processor/IdeHelper.php b/www/wiki/vendor/param-processor/param-processor/IdeHelper.php
new file mode 100644
index 00000000..a5292e0d
--- /dev/null
+++ b/www/wiki/vendor/param-processor/param-processor/IdeHelper.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace ParamProcessor;
+
+/**
+ * Deprecated since 1.0 - this class is for internal use only
+ */
+class Param extends PackagePrivate\Param {
+
+} \ No newline at end of file
diff --git a/www/wiki/vendor/param-processor/param-processor/README.md b/www/wiki/vendor/param-processor/param-processor/README.md
index 753b299f..c3ec4ebf 100644
--- a/www/wiki/vendor/param-processor/param-processor/README.md
+++ b/www/wiki/vendor/param-processor/param-processor/README.md
@@ -172,7 +172,7 @@ The requires fields currently are: name and message
<li>minlength: int or false</li>
<li>maxlength: int or false</li>
<li>regex: string</li>
- <ul>
+ </ul>
</td>
</tr>
<tr>
@@ -190,7 +190,7 @@ The requires fields currently are: name and message
<li>upperbound: int, float or false</li>
<li>range: [lowerbound, upperbound]</li>
<li>withinrange: [float $point, float $deviation]</li>
- <ul>
+ </ul>
</td>
</tr>
<tr>
@@ -214,7 +214,7 @@ The requires fields currently are: name and message
<li>defaultunit: string</li>
<li>lowerbound: int, float or false</li>
<li>upperbound: int, float or false</li>
- <ul>
+ </ul>
</td>
</tr>
</table>
@@ -284,12 +284,6 @@ $processor->setFunctionParams(
);
```
-## Tests
-
-This library comes with a set up PHPUnit tests that cover all non-trivial code. You can run these
-tests using the PHPUnit configuration file found in the root directory. The tests can also be run
-via TravisCI, as a TravisCI configuration file is also provided in the root directory.
-
## Contributing
* [File an issue](https://github.com/JeroenDeDauw/ParamProcessor/issues)
@@ -297,12 +291,76 @@ via TravisCI, as a TravisCI configuration file is also provided in the root dire
## Authors
-ParamProcessor has been written by [Jeroen De Dauw](https://github.com/JeroenDeDauw) to
+ParamProcessor has been written by [Jeroen De Dauw](https://www.entropywins.wtf/) to
support the [Maps](https://github.com/JeroenDeDauw/Maps) and
[Semantic MediaWiki](https://semantic-mediawiki.org/) projects.
## Release notes
+### 1.10.0 (2019-08-03)
+
+* Removed `DimensionParam`
+* Fixed bug in parsing of parameters of type `dimension`
+
+### 1.9.0 (2019-08-03)
+
+* Added `ParamDefinitionFactory::newDefinitionsFromArrays`
+
+### 1.8.0 (2019-08-03)
+
+* Removed `ParamDefinitionFactory::getComponentForType`
+* Added `ParamDefinitionFactory` constructor
+* Added `ParameterTypes` constructor
+* Added `ParameterTypes::addType`
+* Added `ParameterTypes::newCoreTypes`
+* Added `ProcessingResult::getParameterArray`
+
+### 1.7.0 (2019-08-02)
+
+* Added `ParameterTypes` public constants: `BOOLEAN`, `FLOAT`, `INTEGER`, `STRING`, `DIMENSION`
+* Deprecated `ParamDefinition::getCleanDefinitions` in favour of `ParamDefinitionFactory`
+* Deprecated `ParamDefinition::setDefault` in favour of constructor parameter
+* Deprecated `Processor::getParameterValues` in favour of `processParameters` and `ProcessingResult`
+* Deprecated `Processor::getErrors` in favour of `processParameters` and `ProcessingResult`
+* Deprecated `Processor::getErrorMessages` in favour of `processParameters` and `ProcessingResult`
+* Deprecated `Processor::hasErrors` in favour of `processParameters` and `ProcessingResult`
+* Deprecated `Processor::hasFatalError` in favour of `processParameters` and `ProcessingResult`
+* Deprecated parameter dependencies
+ * Deprecated `ParamDefinition::hasDependency`
+ * Deprecated `ParamDefinition::addDependencies`
+ * Deprecated `ParamDefinition::getDependencies`
+ * Deprecated `dependencies` key in `ParamDefinition::setArrayValues` parameter
+ * Deprecated `TopologicalSort`
+ * Deprecated `TSNode`
+* Deprecated extending `ParamDefinition`
+* Deprecated `StringParam`
+* Deprecated `DimensionParam`
+* Deprecated `ParamDefinition::setArrayValues`
+* Deprecated `ParamDefinition::$acceptOverriding`
+* Deprecated `ParamDefinition::$accumulateParameterErrors`
+* Deprecated `Param::$accumulateParameterErrors`
+* Deprecated `Settings`
+* Deprecated `Options::setRawStringInputs`
+* Deprecated `Options::isStringlyTyped`
+
+### 1.6.1 (2019-07-28)
+
+* Fixed message defaulting bug in `ParamDefinition`
+
+### 1.6.0 (2019-07-28)
+
+* Added `Processor::setParameterDefinitions`
+* Deprecated second parameter of `Processor::setParameters` in favour of `setParameterDefinitions`
+* Deprecated second parameter of `Processor::setFunctionParams` in favour of `setParameterDefinitions`
+* Deprecated second parameter of `ParamDefinitionFactory::newDefinitionFromArray`
+* Deprecated return value of `ParamDefinitionFactory::registerType`
+* Deprecated `ParamDefinitionFactory::registerGlobals`
+* Deprecated `typed-parser` key in parameter type definitions
+
+### 1.5.0 (2019-07-28)
+
+* Improved code comments and added extra type checks
+
### 1.4.2 (2018-11-26)
* Fixed defaulting behaviour of list parameters
@@ -315,6 +373,8 @@ support the [Maps](https://github.com/JeroenDeDauw/Maps) and
* Dropped support for PHP older than 7.1
* Added `ParameterTypes` to allow gradual migration away from the now deprecated `$wgParamDefinitions`
+* Deprecated `$wgParamDefinitions`
+* Deprecated `$egValidatorSettings`
### 1.3.4 (2018-05-05)
diff --git a/www/wiki/vendor/param-processor/param-processor/composer.json b/www/wiki/vendor/param-processor/param-processor/composer.json
index 5827117b..df8036f1 100644
--- a/www/wiki/vendor/param-processor/param-processor/composer.json
+++ b/www/wiki/vendor/param-processor/param-processor/composer.json
@@ -39,17 +39,18 @@
"psr-4": {
"ParamProcessor\\": "src"
},
- "classmap": [
- "tests/phpunit/Definitions/ParamDefinitionTest.php",
- "tests/phpunit/Definitions/NumericParamTest.php"
- ],
"files": [
"DefaultConfig.php"
]
},
+ "autoload-dev": {
+ "psr-4": {
+ "ParamProcessor\\Tests\\": "tests"
+ }
+ },
"extra": {
"branch-alias": {
- "dev-master": "1.4.x-dev"
+ "dev-master": "1.x-dev"
}
},
"scripts": {
@@ -63,7 +64,8 @@
"@phpmd"
],
"ci": [
- "@test"
+ "@test",
+ "@cs"
],
"phpcs": [
"vendor/bin/phpcs src/* tests/* --standard=phpcs.xml --extensions=php -sp"
diff --git a/www/wiki/vendor/param-processor/param-processor/phpcs.xml b/www/wiki/vendor/param-processor/param-processor/phpcs.xml
index 20f96009..b9008d97 100644
--- a/www/wiki/vendor/param-processor/param-processor/phpcs.xml
+++ b/www/wiki/vendor/param-processor/param-processor/phpcs.xml
@@ -6,15 +6,17 @@
<ruleset name="MediaWiki">
<rule ref="Generic.Classes" />
<rule ref="Generic.CodeAnalysis" />
+ <rule ref="Generic.CodeAnalysis.UnusedFunctionParameter">
+ <severity>0</severity>
+ </rule>
<rule ref="Generic.ControlStructures" />
<rule ref="Generic.Files.ByteOrderMark" />
- <rule ref="Generic.Files.EndFileNewline" />
<rule ref="Generic.Files.LineEndings" />
<rule ref="Generic.Files.LineLength">
<properties>
- <property name="lineLimit" value="125" />
- <property name="absoluteLineLimit" value="125" />
+ <property name="lineLimit" value="140" />
+ <property name="absoluteLineLimit" value="140" />
</properties>
</rule>
<rule ref="Generic.Files.OneClassPerFile" />
@@ -27,8 +29,8 @@
<rule ref="Generic.Metrics.NestingLevel">
<properties>
- <property name="nestingLevel" value="3" />
- <property name="absoluteNestingLevel" value="3" />
+ <property name="nestingLevel" value="5" />
+ <property name="absoluteNestingLevel" value="5" />
</properties>
</rule>
diff --git a/www/wiki/vendor/param-processor/param-processor/phpmd.xml b/www/wiki/vendor/param-processor/param-processor/phpmd.xml
index 95a85368..66bfad24 100644
--- a/www/wiki/vendor/param-processor/param-processor/phpmd.xml
+++ b/www/wiki/vendor/param-processor/param-processor/phpmd.xml
@@ -4,19 +4,9 @@
xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
xsi:noNamespaceSchemaLocation=" http://pmd.sf.net/ruleset_xml_schema.xsd">
- <rule ref="rulesets/codesize.xml">
- <exclude name="TooManyMethods" />
- <exclude name="ExcessiveClassComplexity" />
- </rule>
- <rule ref="rulesets/codesize.xml/TooManyMethods">
- <properties>
- <property name="maxmethods" value="20" />
- </properties>
- </rule>
-
- <!-- todo: enable the camel case method rule for non-tests -->
<rule ref="rulesets/controversial.xml">
<exclude name="CamelCaseMethodName" />
+ <exclude name="Superglobals" />
</rule>
<rule ref="rulesets/design.xml" />
@@ -25,8 +15,4 @@
<exclude name="ShortVariable" />
<exclude name="LongVariable" />
</rule>
-
- <rule ref="rulesets/unusedcode.xml">
- <exclude name="UnusedLocalVariable" />
- </rule>
</ruleset> \ No newline at end of file
diff --git a/www/wiki/vendor/param-processor/param-processor/src/Definition/DimensionParam.php b/www/wiki/vendor/param-processor/param-processor/src/Definition/DimensionParam.php
deleted file mode 100644
index 1bf272cc..00000000
--- a/www/wiki/vendor/param-processor/param-processor/src/Definition/DimensionParam.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-namespace ParamProcessor\Definition;
-
-use Exception;
-use ParamProcessor\ParamDefinition;
-use ParamProcessor\IParam;
-use ParamProcessor\IParamDefinition;
-
-/**
- * Defines the dimension parameter type.
- * This parameter describes the size of a dimension (ie width) in some unit (ie px) or a percentage.
- * Specifies the type specific validation and formatting logic.
- *
- * TODO: this class is silly, should be handled by a dedicated formatting object/function.
- *
- * @since 1.0
- *
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class DimensionParam extends ParamDefinition {
-
- /**
- * Formats the parameter value to it's final result.
- * @see ParamDefinition::formatValue
- *
- * @since 1.0
- *
- * @param mixed $value
- * @param IParam $param
- * @param IParamDefinition[] $definitions
- * @param IParam[] $params
- *
- * @return mixed
- * @throws Exception
- */
- protected function formatValue( $value, IParam $param, array &$definitions, array $params ) {
- if ( $value === 'auto' ) {
- return $value;
- }
-
- /**
- * @var \ValueValidators\DimensionValidator $validator
- */
- $validator = $this->getValueValidator();
-
- if ( get_class( $validator ) === 'ValueValidators\DimensionValidator' ) {
- foreach ( $validator->getAllowedUnits() as $unit ) {
- if ( $unit !== '' && strpos( $value, $unit ) !== false ) {
- return $value;
- }
- }
-
- return $value . $validator->getDefaultUnit();
- }
- else {
- throw new Exception(
- 'ValueValidator of a DimensionParam should be a ValueValidators\DimensionValidator and not a '
- . get_class( $validator )
- );
- }
- }
-
-}
diff --git a/www/wiki/vendor/param-processor/param-processor/src/Definition/StringParam.php b/www/wiki/vendor/param-processor/param-processor/src/Definition/StringParam.php
index 6488f697..3c74716d 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/Definition/StringParam.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/Definition/StringParam.php
@@ -9,7 +9,7 @@ use ParamProcessor\IParam;
* Defines the string parameter type.
* Specifies the type specific validation and formatting logic.
*
- * @since 1.0
+ * @deprecated since 1.7
*
* @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
@@ -75,4 +75,4 @@ class StringParam extends ParamDefinition {
$this->toLower = $toLower;
}
-} \ No newline at end of file
+}
diff --git a/www/wiki/vendor/param-processor/param-processor/src/IParam.php b/www/wiki/vendor/param-processor/param-processor/src/IParam.php
index 31766d6c..ebb0a548 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/IParam.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/IParam.php
@@ -3,10 +3,10 @@
namespace ParamProcessor;
/**
- * Interface for objects representing an "instance" of a parameter.
- *
* NOTE: as of version 1.0, this class is for internal use only!
*
+ * Interface for objects representing an "instance" of a parameter.
+ *
* @since 1.0
* @deprecated since 1.0
*
diff --git a/www/wiki/vendor/param-processor/param-processor/src/IParamDefinition.php b/www/wiki/vendor/param-processor/param-processor/src/IParamDefinition.php
index 38b07179..410b8096 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/IParamDefinition.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/IParamDefinition.php
@@ -53,7 +53,7 @@ interface IParamDefinition {
*
* @return string[]
*/
- public function getAliases();
+ public function getAliases(): array;
/**
* Returns the default value.
@@ -72,7 +72,7 @@ interface IParamDefinition {
*
* @return string
*/
- public function getDelimiter();
+ public function getDelimiter(): string;
/**
* Returns a list of dependencies the parameter has, in the form of
@@ -82,7 +82,7 @@ interface IParamDefinition {
*
* @return string[]
*/
- public function getDependencies();
+ public function getDependencies(): array;
/**
* Returns a message that will act as a description message for the parameter.
@@ -91,7 +91,7 @@ interface IParamDefinition {
*
* @return string
*/
- public function getMessage();
+ public function getMessage(): string;
/**
* Returns the parameters main name.
@@ -100,7 +100,7 @@ interface IParamDefinition {
*
* @return string
*/
- public function getName();
+ public function getName(): string;
/**
* Returns an identifier for the type of the parameter.
@@ -109,7 +109,7 @@ interface IParamDefinition {
*
* @return string
*/
- public function getType();
+ public function getType(): string;
/**
* Returns if the parameter has a certain alias.
@@ -120,7 +120,7 @@ interface IParamDefinition {
*
* @return boolean
*/
- public function hasAlias( $alias );
+ public function hasAlias( string $alias ): bool;
/**
* Returns if the parameter has a certain dependency.
@@ -131,7 +131,7 @@ interface IParamDefinition {
*
* @return boolean
*/
- public function hasDependency( $dependency );
+ public function hasDependency( string $dependency ): bool;
/**
* Returns if the parameter is a list or not.
@@ -140,7 +140,7 @@ interface IParamDefinition {
*
* @return boolean
*/
- public function isList();
+ public function isList(): bool;
/**
* Returns if the parameter is a required one or not.
@@ -149,7 +149,7 @@ interface IParamDefinition {
*
* @return boolean
*/
- public function isRequired();
+ public function isRequired(): bool;
/**
* Sets the default parameter value. Null indicates no default,
@@ -170,7 +170,7 @@ interface IParamDefinition {
*
* @param $delimiter string
*/
- public function setDelimiter( $delimiter );
+ public function setDelimiter( string $delimiter );
/**
* Set if the parameter manipulations should be applied to the default value.
@@ -179,19 +179,17 @@ interface IParamDefinition {
*
* @param boolean $manipulateDefault
*/
- public function setDoManipulationOfDefault( $manipulateDefault );
+ public function setDoManipulationOfDefault( bool $manipulateDefault );
/**
* Sets a message for the parameter that will act as description.
- * This should be a message key, ie something that can be passed
- * to wfMsg. Not an actual text. If you do not have a message key,
- * but only a text, use setDescription instead.
+ *
*
* @since 1.0
*
* @param string $message
*/
- public function setMessage( $message );
+ public function setMessage( string $message );
/**
* Returns if the parameter manipulations should be applied to the default value.
@@ -200,7 +198,7 @@ interface IParamDefinition {
*
* @return boolean
*/
- public function shouldManipulateDefault();
+ public function shouldManipulateDefault(): bool;
/**
* Returns a message key for a message describing the parameter type.
@@ -209,11 +207,10 @@ interface IParamDefinition {
*
* @return string
*/
- public function getTypeMessage();
+ public function getTypeMessage(): string;
/**
* Returns if the value should be trimmed before validation and any further processing.
- * @see IParamDefinition::trimDuringClean
*
* @since 1.0
*
@@ -267,7 +264,7 @@ interface IParamDefinition {
*
* @param callable $validationFunction
*/
- public function setValidationCallback( /* callable */ $validationFunction );
+ public function setValidationCallback( callable $validationFunction );
/**
* Sets the parameter definition values contained in the provided array.
diff --git a/www/wiki/vendor/param-processor/param-processor/src/Options.php b/www/wiki/vendor/param-processor/param-processor/src/Options.php
index 897ed25c..99e11b45 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/Options.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/Options.php
@@ -39,6 +39,9 @@ class Options {
$this->lowercaseNames = $lowercase;
}
+ /**
+ * @deprecated since 1.7
+ */
public function setRawStringInputs( bool $rawInputs ) {
$this->rawStringInputs = $rawInputs;
}
@@ -67,6 +70,9 @@ class Options {
return $this->lowercaseNames;
}
+ /**
+ * @deprecated since 1.7
+ */
public function isStringlyTyped(): bool {
return $this->rawStringInputs;
}
diff --git a/www/wiki/vendor/param-processor/param-processor/src/PackagePrivate/DimensionParser.php b/www/wiki/vendor/param-processor/param-processor/src/PackagePrivate/DimensionParser.php
new file mode 100644
index 00000000..06aa2ad5
--- /dev/null
+++ b/www/wiki/vendor/param-processor/param-processor/src/PackagePrivate/DimensionParser.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace ParamProcessor\PackagePrivate;
+
+use ValueParsers\ParseException;
+use ValueParsers\ParserOptions;
+use ValueParsers\ValueParser;
+
+/**
+ * Package private
+ */
+class DimensionParser implements ValueParser {
+
+ public const DEFAULT_UNIT = 'defaultunit';
+
+ public const PIXELS = 'px';
+
+ private $defaultUnit;
+
+ public function __construct( ParserOptions $options = null ) {
+ $options = $options ?? new ParserOptions();
+
+ $this->defaultUnit = $options->hasOption( self::DEFAULT_UNIT ) ? $options->getOption( self::DEFAULT_UNIT ) : self::PIXELS;
+ }
+
+ public function parse( $value ) {
+ if ( !is_string( $value ) ) {
+ throw new ParseException( 'Not a string' );
+ }
+
+ $value = $this->removeWhitespace( $value );
+
+ if ( preg_match( '/^(\d|\.)+$/', $value ) ) {
+ $value .= $this->defaultUnit;
+ }
+
+ return $value;
+ }
+
+ private function removeWhitespace( string $string ): string {
+ return preg_replace( '/\s+/', '', $string );
+ }
+
+}
diff --git a/www/wiki/vendor/param-processor/param-processor/src/PackagePrivate/Param.php b/www/wiki/vendor/param-processor/param-processor/src/PackagePrivate/Param.php
new file mode 100644
index 00000000..49011579
--- /dev/null
+++ b/www/wiki/vendor/param-processor/param-processor/src/PackagePrivate/Param.php
@@ -0,0 +1,418 @@
+<?php
+
+namespace ParamProcessor\PackagePrivate;
+
+use DataValues\DataValue;
+use Exception;
+use ParamProcessor\IParam;
+use ParamProcessor\IParamDefinition;
+use ParamProcessor\Options;
+use ParamProcessor\ParamDefinition;
+use ParamProcessor\ParamDefinitionFactory;
+use ParamProcessor\ProcessingError;
+use ValueParsers\NullParser;
+use ValueParsers\ParseException;
+use ValueParsers\ValueParser;
+
+/**
+ * Package private!
+ *
+ * Parameter class, representing the "instance" of a parameter.
+ * Holds a ParamDefinition, user provided input (name & value) and processing state.
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class Param implements IParam {
+
+ /**
+ * Indicates whether parameters not found in the criteria list
+ * should be stored in case they are not accepted. The default is false.
+ *
+ * @deprecated since 1.7
+ */
+ public static $accumulateParameterErrors = false;
+
+ /**
+ * The original parameter name as provided by the user. This can be the
+ * main name or an alias.
+ * @var string
+ */
+ protected $originalName;
+
+ /**
+ * The original value as provided by the user. This is mainly retained for
+ * usage in error messages when the parameter turns out to be invalid.
+ * @var string
+ */
+ protected $originalValue;
+
+ /**
+ * @var mixed
+ */
+ protected $value;
+
+ /**
+ * Keeps track of how many times the parameter has been set by the user.
+ * This is used to detect overrides and for figuring out a parameter is missing.
+ * @var integer
+ */
+ protected $setCount = 0;
+
+ /**
+ * @var ProcessingError[]
+ */
+ protected $errors = [];
+
+ /**
+ * Indicates if the parameter was set to it's default.
+ * @var boolean
+ */
+ protected $defaulted = false;
+
+ /**
+ * @var ParamDefinition
+ */
+ protected $definition;
+
+ public function __construct( IParamDefinition $definition ) {
+ $this->definition = $definition;
+ }
+
+ /**
+ * Sets and cleans the original value and name.
+ */
+ public function setUserValue( string $paramName, $paramValue, Options $options ): bool {
+ if ( $this->setCount > 0 && !$options->acceptOverriding() ) {
+ // TODO
+ return false;
+ }
+
+ $this->originalName = $paramName;
+ $this->originalValue = $paramValue;
+
+ $this->cleanValue( $options );
+
+ $this->setCount++;
+
+ return true;
+ }
+
+ /**
+ * @param mixed $value
+ */
+ public function setValue( $value ) {
+ $this->value = $value;
+ }
+
+ /**
+ * Sets the $value to a cleaned value of $originalValue.
+ */
+ protected function cleanValue( Options $options ) {
+ if ( $this->definition->isList() ) {
+ $this->value = explode( $this->definition->getDelimiter(), $this->originalValue );
+ }
+ else {
+ $this->value = $this->originalValue;
+ }
+
+ if ( $this->shouldTrim( $options ) ) {
+ $this->trimValue();
+ }
+
+ if ( $this->shouldLowercase( $options ) ) {
+ $this->lowercaseValue();
+ }
+ }
+
+ private function shouldTrim( Options $options ): bool {
+ $trim = $this->definition->trimDuringClean();
+
+ if ( $trim === true ) {
+ return true;
+ }
+
+ return is_null( $trim ) && $options->trimValues();
+ }
+
+ private function trimValue() {
+ if ( is_string( $this->value ) ) {
+ $this->value = trim( $this->value );
+ }
+ elseif ( $this->definition->isList() ) {
+ foreach ( $this->value as &$element ) {
+ if ( is_string( $element ) ) {
+ $element = trim( $element );
+ }
+ }
+ }
+ }
+
+ private function shouldLowercase( Options $options ): bool {
+ if ( $options->lowercaseValues() ) {
+ return true;
+ }
+
+ $definitionOptions = $this->definition->getOptions();
+
+ return array_key_exists( 'tolower', $definitionOptions ) && $definitionOptions['tolower'];
+ }
+
+ private function lowercaseValue() {
+ if ( $this->definition->isList() ) {
+ foreach ( $this->value as &$element ) {
+ if ( is_string( $element ) ) {
+ $element = strtolower( $element );
+ }
+ }
+ }
+ elseif ( is_string( $this->value ) ) {
+ $this->value = strtolower( $this->value );
+ }
+ }
+
+ /**
+ * Parameter processing entry point.
+ * Processes the parameter. This includes parsing, validation and additional formatting.
+ *
+ * @param ParamDefinition[] $definitions
+ * @param Param[] $params
+ * @param Options $options
+ *
+ * @throws Exception
+ */
+ public function process( array &$definitions, array $params, Options $options ) {
+ if ( $this->setCount == 0 ) {
+ if ( $this->definition->isRequired() ) {
+ // This should not occur, so throw an exception.
+ throw new Exception( 'Attempted to validate a required parameter without first setting a value.' );
+ }
+ else {
+ $this->setToDefault();
+ }
+ }
+ else {
+ $this->parseAndValidate( $options );
+ }
+
+ if ( !$this->hasFatalError() && ( $this->definition->shouldManipulateDefault() || !$this->wasSetToDefault() ) ) {
+ $this->definition->format( $this, $definitions, $params );
+ }
+ }
+
+ public function getValueParser( Options $options ): ValueParser {
+ $parser = $this->definition->getValueParser();
+
+ if ( !( $parser instanceof NullParser ) ) {
+ return $parser;
+ }
+
+ // TODO: inject factory
+ $type = ParamDefinitionFactory::singleton()->getType( $this->definition->getType() );
+
+ $parserClass = $options->isStringlyTyped() ? $type->getStringParserClass() : $type->getTypedParserClass();
+
+ return new $parserClass( new \ValueParsers\ParserOptions( $this->definition->getOptions() ) );
+ }
+
+ protected function parseAndValidate( Options $options ) {
+ $parser = $this->getValueParser( $options );
+
+ if ( $this->definition->isList() ) {
+ $values = [];
+
+ foreach ( $this->getValue() as $value ) {
+ $parsedValue = $this->parseAndValidateValue( $parser, $value );
+
+ if ( is_array( $parsedValue ) ) {
+ $values[] = $parsedValue[0];
+ }
+ }
+
+ $this->value = $values;
+ }
+ else {
+ $parsedValue = $this->parseAndValidateValue( $parser, $this->getValue() );
+
+ if ( is_array( $parsedValue ) ) {
+ $this->value = $parsedValue[0];
+ }
+ }
+
+ $this->setToDefaultIfNeeded();
+ }
+
+ /**
+ * Parses and validates the provided with with specified parser.
+ * The result is returned in an array on success. On fail, false is returned.
+ * The result is wrapped in an array since we need to be able to distinguish
+ * between the method returning false and the value being false.
+ *
+ * Parsing and validation errors get added to $this->errors.
+ *
+ * @since 1.0
+ *
+ * @param ValueParser $parser
+ * @param mixed $value
+ *
+ * @return array|bool
+ */
+ protected function parseAndValidateValue( ValueParser $parser, $value ) {
+ try {
+ $value = $parser->parse( $value );
+ }
+ catch ( ParseException $parseException ) {
+ $this->registerProcessingError( $parseException->getMessage() );
+ return false;
+ }
+
+ if ( $value instanceof DataValue ) {
+ $value = $value->getValue();
+ }
+
+ $this->validateValue( $value );
+
+ return [ $value ];
+ }
+
+ protected function registerProcessingError( string $message ) {
+ $this->errors[] = $this->newProcessingError( $message );
+ }
+
+ protected function newProcessingError( string $message ): ProcessingError {
+ $severity = $this->isRequired() ? ProcessingError::SEVERITY_FATAL : ProcessingError::SEVERITY_NORMAL;
+ return new ProcessingError( $message, $severity );
+ }
+
+ /**
+ * @param mixed $value
+ */
+ protected function validateValue( $value ) {
+ $validationCallback = $this->definition->getValidationCallback();
+
+ if ( $validationCallback !== null && $validationCallback( $value ) !== true ) {
+ $this->registerProcessingError( 'Validation callback failed' );
+ }
+ else {
+ $validator = $this->definition->getValueValidator();
+ if ( method_exists( $validator, 'setOptions' ) ) {
+ $validator->setOptions( $this->definition->getOptions() );
+ }
+ $validationResult = $validator->validate( $value );
+
+ if ( !$validationResult->isValid() ) {
+ foreach ( $validationResult->getErrors() as $error ) {
+ $this->registerProcessingError( $error->getText() );
+ }
+ }
+ }
+ }
+
+ /**
+ * Sets the parameter value to the default if needed.
+ */
+ protected function setToDefaultIfNeeded() {
+ if ( $this->shouldSetToDefault() ) {
+ $this->setToDefault();
+ }
+ }
+
+ private function shouldSetToDefault(): bool {
+ if ( $this->hasFatalError() ) {
+ return false;
+ }
+
+ if ( $this->definition->isList() ) {
+ return $this->errors !== [] && $this->value === [];
+ }
+
+ return $this->errors !== [];
+ }
+
+ /**
+ * Returns the original use-provided name.
+ *
+ * @throws Exception
+ * @return string
+ */
+ public function getOriginalName(): string {
+ if ( $this->setCount == 0 ) {
+ throw new Exception( 'No user input set to the parameter yet, so the original name does not exist' );
+ }
+ return $this->originalName;
+ }
+
+ /**
+ * Returns the original use-provided value.
+ *
+ * @throws Exception
+ * @return mixed
+ */
+ public function getOriginalValue() {
+ if ( $this->setCount == 0 ) {
+ throw new Exception( 'No user input set to the parameter yet, so the original value does not exist' );
+ }
+ return $this->originalValue;
+ }
+
+ /**
+ * Returns all validation errors that occurred so far.
+ *
+ * @return ProcessingError[]
+ */
+ public function getErrors(): array {
+ return $this->errors;
+ }
+
+ /**
+ * Sets the parameter value to the default.
+ */
+ protected function setToDefault() {
+ $this->defaulted = true;
+ $this->value = $this->definition->getDefault();
+ }
+
+ public function wasSetToDefault(): bool {
+ return $this->defaulted;
+ }
+
+ public function hasFatalError(): bool {
+ foreach ( $this->errors as $error ) {
+ if ( $error->isFatal() ) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Returns the ParamDefinition this Param was constructed from.
+ */
+ public function getDefinition(): ParamDefinition {
+ return $this->definition;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function &getValue() {
+ return $this->value;
+ }
+
+ public function isRequired(): bool {
+ return $this->definition->isRequired();
+ }
+
+ public function getName(): string {
+ return $this->definition->getName();
+ }
+
+ /**
+ * @return string[]
+ */
+ public function getAliases(): array {
+ return $this->definition->getAliases();
+ }
+
+} \ No newline at end of file
diff --git a/www/wiki/vendor/param-processor/param-processor/src/PackagePrivate/ParamType.php b/www/wiki/vendor/param-processor/param-processor/src/PackagePrivate/ParamType.php
new file mode 100644
index 00000000..01022a1d
--- /dev/null
+++ b/www/wiki/vendor/param-processor/param-processor/src/PackagePrivate/ParamType.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace ParamProcessor\PackagePrivate;
+
+use ParamProcessor\ParamDefinition;
+use ValueParsers\NullParser;
+use ValueValidators\NullValidator;
+
+/**
+ * Package private
+ */
+class ParamType {
+
+ private $typeId;
+
+ private $className;
+ private $stringParser;
+ private $typedParser;
+ private $validator;
+ private $validationCallback;
+
+ private function __construct( string $typeId ) {
+ $this->typeId = $typeId;
+ }
+
+ public static function newFromArray( string $typeId, array $spec ): self {
+ $type = new self( $typeId );
+
+ $type->className = array_key_exists( 'definition', $spec ) ? $spec['definition'] : ParamDefinition::class;
+ $type->stringParser = array_key_exists( 'string-parser', $spec ) ? $spec['string-parser'] : NullParser::class;
+ $type->typedParser = array_key_exists( 'typed-parser', $spec ) ? $spec['typed-parser'] : NullParser::class;
+ $type->validator = array_key_exists( 'validator', $spec ) ? $spec['validator'] : NullValidator::class;
+ $type->validationCallback = array_key_exists( 'validation-callback', $spec ) ? $spec['validation-callback'] : null;
+
+ return $type;
+ }
+
+ public function getClassName(): string {
+ return $this->className;
+ }
+
+ public function getValidatorClass(): string {
+ return $this->validator;
+ }
+
+ public function getValidationCallback(): ?callable {
+ return $this->validationCallback;
+ }
+
+ public function getStringParserClass(): string {
+ return $this->stringParser;
+ }
+
+ public function getTypedParserClass(): string {
+ return $this->typedParser;
+ }
+
+}
diff --git a/www/wiki/vendor/param-processor/param-processor/src/Param.php b/www/wiki/vendor/param-processor/param-processor/src/Param.php
index 826cf9a4..aa05c78c 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/Param.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/Param.php
@@ -1,517 +1,3 @@
<?php
-namespace ParamProcessor;
-
-use Exception;
-use ValueParsers\NullParser;
-use ValueParsers\ParseException;
-use ValueParsers\ValueParser;
-
-/**
- * Parameter class, representing the "instance" of a parameter.
- * Holds a ParamDefinition, user provided input (name & value) and processing state.
- *
- * NOTE: as of version 1.0, this class is for internal use only!
- *
- * @since 1.0
- *
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-final class Param implements IParam {
-
- /**
- * Indicates whether parameters not found in the criteria list
- * should be stored in case they are not accepted. The default is false.
- *
- * @since 1.0
- *
- * @var boolean
- */
- public static $accumulateParameterErrors = false;
-
- /**
- * The original parameter name as provided by the user. This can be the
- * main name or an alias.
- *
- * @since 1.0
- *
- * @var string
- */
- protected $originalName;
-
- /**
- * The original value as provided by the user. This is mainly retained for
- * usage in error messages when the parameter turns out to be invalid.
- *
- * @since 1.0
- *
- * @var string
- */
- protected $originalValue;
-
- /**
- * The value of the parameter.
- *
- * @since 1.0
- *
- * @var mixed
- */
- protected $value;
-
- /**
- * Keeps track of how many times the parameter has been set by the user.
- * This is used to detect overrides and for figuring out a parameter is missing.
- *
- * @since 1.0
- *
- * @var integer
- */
- protected $setCount = 0;
-
- /**
- * List of validation errors for this parameter.
- *
- * @since 1.0
- *
- * @var array of ProcessingError
- */
- protected $errors = [];
-
- /**
- * Indicates if the parameter was set to it's default.
- *
- * @since 1.0
- *
- * @var boolean
- */
- protected $defaulted = false;
-
- /**
- * @since 1.0
- *
- * @var ParamDefinition
- */
- protected $definition;
-
- /**
- * Constructor.
- *
- * @since 1.0
- *
- * @param IParamDefinition $definition
- */
- public function __construct( IParamDefinition $definition ) {
- $this->definition = $definition;
- }
-
- /**
- * Sets and cleans the original value and name.
- * @see IParam::setUserValue
- *
- * @since 1.0
- *
- * @param string $paramName
- * @param string $paramValue
- * @param Options $options
- *
- * @return boolean
- */
- public function setUserValue( $paramName, $paramValue, Options $options ) {
- if ( $this->setCount > 0 && !$options->acceptOverriding() ) {
- // TODO
- return false;
- }
- else {
- $this->originalName = $paramName;
- $this->originalValue = $paramValue;
-
- $this->cleanValue( $options );
-
- $this->setCount++;
-
- return true;
- }
- }
-
- /**
- * Sets the value.
- *
- * @since 1.0
- *
- * @param mixed $value
- */
- public function setValue( $value ) {
- $this->value = $value;
- }
-
- /**
- * Sets the $value to a cleaned value of $originalValue.
- *
- * TODO: the per-parameter lowercaseing and trimming here needs some thought
- *
- * @since 1.0
- *
- * @param Options $options
- */
- protected function cleanValue( Options $options ) {
- $this->value = $this->originalValue;
-
- $trim = $this->getDefinition()->trimDuringClean();
-
- if ( $trim === true || ( is_null( $trim ) && $options->trimValues() ) ) {
- if ( is_string( $this->value ) ) {
- $this->value = trim( $this->value );
- }
- }
-
-
- if ( $this->definition->isList() ) {
- $this->value = explode( $this->definition->getDelimiter(), $this->value );
-
- if ( $trim === true || ( is_null( $trim ) && $options->trimValues() ) ) {
- foreach ( $this->value as &$element ) {
- if ( is_string( $element ) ) {
- $element = trim( $element );
- }
- }
- }
- }
-
- $definitionOptions = $this->definition->getOptions();
-
- if ( $options->lowercaseValues() || ( array_key_exists( 'tolower', $definitionOptions ) && $definitionOptions['tolower'] ) ) {
- if ( $this->definition->isList() ) {
- foreach ( $this->value as &$element ) {
- if ( is_string( $element ) ) {
- $element = strtolower( $element );
- }
- }
- }
- elseif ( is_string( $this->value ) ) {
- $this->value = strtolower( $this->value );
- }
- }
- }
-
- /**
- * Parameter processing entry point.
- * Processes the parameter. This includes parsing, validation and additional formatting.
- *
- * @since 1.0
- *
- * @param $definitions array of IParamDefinition
- * @param $params array of IParam
- * @param Options $options
- *
- * @throws Exception
- */
- public function process( array &$definitions, array $params, Options $options ) {
- if ( $this->setCount == 0 ) {
- if ( $this->definition->isRequired() ) {
- // This should not occur, so throw an exception.
- throw new Exception( 'Attempted to validate a required parameter without first setting a value.' );
- }
- else {
- $this->setToDefault();
- }
- }
- else {
- $this->parseAndValidate( $options );
- }
-
- if ( !$this->hasFatalError() && ( $this->definition->shouldManipulateDefault() || !$this->wasSetToDefault() ) ) {
- $this->definition->format( $this, $definitions, $params );
- }
- }
-
- /**
- * @since 1.0
- *
- * @param Options $options
- *
- * @return ValueParser
- */
- public function getValueParser( Options $options ) {
- $parser = $this->definition->getValueParser();
-
- if ( get_class( $parser ) === NullParser::class ) {
- $parserType = $options->isStringlyTyped() ? 'string-parser' : 'typed-parser';
-
- // TODO: inject factory
- $parserClass = ParamDefinitionFactory::singleton()->getComponentForType( $this->definition->getType(), $parserType );
-
- if ( $parserClass !== NullParser::class ) {
- $parser = new $parserClass( new \ValueParsers\ParserOptions() );
- }
- }
-
- return $parser;
- }
-
- /**
- * @since 1.0
- *
- * @param Options $options
- */
- protected function parseAndValidate( Options $options ) {
- $parser = $this->getValueParser( $options );
-
- if ( $this->definition->isList() ) {
- $values = [];
-
- foreach ( $this->getValue() as $value ) {
- $parsedValue = $this->parseAndValidateValue( $parser, $value );
-
- if ( is_array( $parsedValue ) ) {
- $values[] = $parsedValue[0];
- }
- }
-
- $this->value = $values;
- }
- else {
- $parsedValue = $this->parseAndValidateValue( $parser, $this->getValue() );
-
- if ( is_array( $parsedValue ) ) {
- $this->value = $parsedValue[0];
- }
- }
-
- $this->setToDefaultIfNeeded();
- }
-
- /**
- * Parses and validates the provided with with specified parser.
- * The result is returned in an array on success. On fail, false is returned.
- * The result is wrapped in an array since we need to be able to distinguish
- * between the method returning false and the value being false.
- *
- * Parsing and validation errors get added to $this->errors.
- *
- * @since 1.0
- *
- * @param ValueParser $parser
- * @param mixed $value
- *
- * @return array|bool
- */
- protected function parseAndValidateValue( ValueParser $parser, $value ) {
- try {
- $value = $parser->parse( $value );
- }
- catch ( ParseException $parseException ) {
- $this->registerProcessingError( $parseException->getMessage() );
- return false;
- }
-
- if ( $value instanceof \DataValues\DataValue ) {
- $value = $value->getValue();
- }
-
- $this->validateValue( $value );
-
- return [ $value ];
- }
-
- /**
- * @since 1.0
- *
- * @param string $message
- */
- protected function registerProcessingError( $message ) {
- $this->errors[] = $this->newProcessingError( $message );
- }
-
- /**
- * @since 1.0
- *
- * @param string $message
- *
- * @return ProcessingError
- */
- protected function newProcessingError( $message ) {
- $severity = $this->isRequired() ? ProcessingError::SEVERITY_FATAL : ProcessingError::SEVERITY_NORMAL;
- return new ProcessingError( $message, $severity );
- }
-
- /**
- * @since 1.0
- *
- * @param mixed $value
- */
- protected function validateValue( $value ) {
- $validationCallback = $this->definition->getValidationCallback();
-
- if ( $validationCallback !== null && $validationCallback( $value ) !== true ) {
- $this->registerProcessingError( 'Validation callback failed' );
- }
- else {
- $validator = $this->definition->getValueValidator();
- if ( method_exists( $validator, 'setOptions' ) ) {
- $validator->setOptions( $this->definition->getOptions() );
- }
- $validationResult = $validator->validate( $value );
-
- if ( !$validationResult->isValid() ) {
- foreach ( $validationResult->getErrors() as $error ) {
- $this->registerProcessingError( $error->getText() );
- }
- }
- }
- }
-
- /**
- * Sets the parameter value to the default if needed.
- *
- * @since 1.0
- */
- protected function setToDefaultIfNeeded() {
- if ( $this->shouldSetToDefault() ) {
- $this->setToDefault();
- }
- }
-
- private function shouldSetToDefault(): bool {
- if ( $this->hasFatalError() ) {
- return false;
- }
-
- if ( $this->definition->isList() ) {
- return $this->errors !== [] && $this->value === [];
- }
-
- return $this->errors !== [];
- }
-
- /**
- * Returns the original use-provided name.
- *
- * @since 1.0
- *
- * @throws Exception
- * @return string
- */
- public function getOriginalName() {
- if ( $this->setCount == 0 ) {
- throw new Exception( 'No user input set to the parameter yet, so the original name does not exist' );
- }
- return $this->originalName;
- }
-
- /**
- * Returns the original use-provided value.
- *
- * @since 1.0
- *
- * @throws Exception
- * @return string
- */
- public function getOriginalValue() {
- if ( $this->setCount == 0 ) {
- throw new Exception( 'No user input set to the parameter yet, so the original value does not exist' );
- }
- return $this->originalValue;
- }
-
- /**
- * Returns all validation errors that occurred so far.
- *
- * @since 1.0
- *
- * @return ProcessingError[]
- */
- public function getErrors() {
- return $this->errors;
- }
-
- /**
- * Sets the parameter value to the default.
- *
- * @since 1.0
- */
- protected function setToDefault() {
- $this->defaulted = true;
- $this->value = $this->definition->getDefault();
- }
-
- /**
- * Gets if the parameter was set to it's default.
- *
- * @since 1.0
- *
- * @return boolean
- */
- public function wasSetToDefault() {
- return $this->defaulted;
- }
-
- /**
- * @return boolean
- */
- public function hasFatalError() {
- foreach ( $this->errors as $error ) {
- if ( $error->isFatal() ) {
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * Returns the IParamDefinition this IParam was constructed from.
- *
- * @since 1.0
- *
- * @return IParamDefinition
- */
- public function getDefinition() {
- return $this->definition;
- }
-
- /**
- * Returns the parameters value.
- *
- * @since 1.0
- *
- * @return mixed
- */
- public function &getValue() {
- return $this->value;
- }
-
- /**
- * Returns if the parameter is required or not.
- *
- * @since 1.0
- *
- * @return boolean
- */
- public function isRequired() {
- return $this->definition->isRequired();
- }
-
- /**
- * Returns if the name of the parameter.
- *
- * @since 1.0
- *
- * @return boolean
- */
- public function getName() {
- return $this->definition->getName();
- }
-
- /**
- * Returns the parameter name aliases.
- *
- * @since 1.0
- *
- * @return string[]
- */
- public function getAliases() {
- return $this->definition->getAliases();
- }
-
-} \ No newline at end of file
+class_alias(\ParamProcessor\PackagePrivate\Param::class, 'ParamProcessor\Param'); \ No newline at end of file
diff --git a/www/wiki/vendor/param-processor/param-processor/src/ParamDefinition.php b/www/wiki/vendor/param-processor/param-processor/src/ParamDefinition.php
index 3990e757..1f49bb4a 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/ParamDefinition.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/ParamDefinition.php
@@ -3,19 +3,17 @@
namespace ParamProcessor;
use Exception;
-
-use ValueParsers\ValueParser;
+use ParamProcessor\PackagePrivate\Param;
use ValueParsers\NullParser;
-
-use ValueValidators\ValueValidator;
+use ValueParsers\ValueParser;
use ValueValidators\NullValidator;
+use ValueValidators\ValueValidator;
/**
- * Parameter definition.
* Specifies what kind of values are accepted, how they should be validated,
* how they should be formatted, what their dependencies are and how they should be described.
*
- * Try to avoid using this interface outside of ParamProcessor for anything else then defining parameters.
+ * Try to avoid using this interface outside of ParamProcessor for anything else than defining parameters.
* In particular, do not derive from this class to implement methods such as formatValue.
*
* @since 1.0
@@ -23,13 +21,13 @@ use ValueValidators\NullValidator;
* @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
-class ParamDefinition implements IParamDefinition {
+/* final */ class ParamDefinition implements IParamDefinition {
/**
* Indicates whether parameters that are provided more then once should be accepted,
* and use the first provided value, or not, and generate an error.
*
- * @since 1.0
+ * @deprected since 1.7
*
* @var boolean
*/
@@ -39,65 +37,44 @@ class ParamDefinition implements IParamDefinition {
* Indicates whether parameters not found in the criteria list
* should be stored in case they are not accepted. The default is false.
*
- * @since 1.0
+ * @deprected since 1.7
*
* @var boolean
*/
public static $accumulateParameterErrors = false;
+ protected $type;
+ protected $name;
+ protected $default;
+ protected $isList;
+
/**
- * Indicates if the parameter value should trimmed during the clean process.
- *
- * @since 1.0
+ * A message that acts as description for the parameter or false when there is none.
+ * Can be obtained via getMessage and set via setMessage.
*
+ * @var string
+ */
+ protected $message;
+
+ /**
+ * Indicates if the parameter value should trimmed during the clean process.
* @var boolean|null
*/
protected $trimValue = null;
/**
* Indicates if the parameter manipulations should be applied to the default value.
- *
- * @since 1.0
- *
* @var boolean
*/
protected $applyManipulationsToDefault = true;
/**
* Dependency list containing parameters that need to be handled before this one.
- *
- * @since 1.0
- *
* @var string[]
*/
protected $dependencies = [];
/**
- * The default value for the parameter, or null when the parameter is required.
- *
- * @since 1.0
- *
- * @var mixed
- */
- protected $default;
-
- /**
- * The main name of the parameter.
- *
- * @since 1.0
- *
- * @var string
- */
- protected $name;
-
- /**
- * @since 1.0
- * @var boolean
- */
- protected $isList;
-
- /**
- * @since 1.0
* @var string
*/
protected $delimiter = ',';
@@ -105,75 +82,43 @@ class ParamDefinition implements IParamDefinition {
/**
* List of aliases for the parameter name.
*
- * @since 1.0
- *
* @var string[]
*/
protected $aliases = [];
/**
- * A message that acts as description for the parameter or false when there is none.
- * Can be obtained via getMessage and set via setMessage.
- *
- * @since 1.0
- *
- * @var string
- */
- protected $message = 'validator-message-nodesc';
-
- /**
* Original array definition of the parameter
- *
- * @since 1.0
- *
* @var array
*/
protected $options = [];
/**
- * @since 1.0
- *
* @var ValueParser|null
*/
protected $parser = null;
/**
- * @since 1.0
- *
* @var ValueValidator|null
*/
protected $validator = null;
/**
- * @since 0.1
- *
* @var callable|null
*/
protected $validationFunction = null;
/**
- * @since 0.1
- *
- * @var string
- */
- protected $type;
-
- /**
- * Constructor.
- *
- * @since 1.0
- *
* @param string $type
* @param string $name
* @param mixed $default Use null for no default (which makes the parameter required)
* @param string $message
* @param boolean $isList
*/
- public function __construct( $type, $name, $default = null, $message = null, $isList = false ) {
+ public function __construct( string $type, string $name, $default = null, string $message = null, bool $isList = false ) {
$this->type = $type;
$this->name = $name;
$this->default = $default;
- $this->message = $message;
+ $this->message = $message ?? 'validator-message-nodesc';
$this->isList = $isList;
$this->postConstruct();
@@ -190,61 +135,39 @@ class ParamDefinition implements IParamDefinition {
}
/**
- * @see IParamDefinition::trimDuringClean
- *
- * @since 1.0
- *
- * @return boolean|null
+ * Returns if the value should be trimmed before validation and any further processing.
+ * - true: always trim
+ * - false: never trim
+ * - null: trim based on context settings
*/
- public function trimDuringClean() {
+ public function trimDuringClean(): ?bool {
return $this->trimValue;
}
/**
- * @see IParamDefinition::getAliases
- *
- * @since 1.0
- *
+ * Returns the parameter name aliases.
* @return string[]
*/
- public function getAliases() {
+ public function getAliases(): array {
return $this->aliases;
}
- /**
- * @see IParamDefinition::hasAlias
- *
- * @since 1.0
- *
- * @param string $alias
- *
- * @return boolean
- */
- public function hasAlias( $alias ) {
+ public function hasAlias( string $alias ): bool {
return in_array( $alias, $this->getAliases() );
}
/**
- * @see IParamDefinition::hasDependency
- *
- * @since 1.0
- *
- * @param string $dependency
- *
- * @return boolean
+ * @deprecated since 1.7
+ * Returns if the parameter has a certain dependency.
*/
- public function hasDependency( $dependency ) {
+ public function hasDependency( string $dependency ): bool {
return in_array( $dependency, $this->getDependencies() );
}
/**
* Returns the list of allowed values, or an empty array if there is no such restriction.
- *
- * @since 1.0
- *
- * @return array
*/
- public function getAllowedValues() {
+ public function getAllowedValues(): array {
$allowedValues = [];
if ( $this->validator !== null && method_exists( $this->validator, 'getWhitelistedValues' ) ) {
@@ -263,9 +186,7 @@ class ParamDefinition implements IParamDefinition {
}
/**
- * @see IParamDefinition::setDefault
- *
- * @since 1.0
+ * @deprecated since 1.7
*
* @param mixed $default
* @param boolean $manipulate Should the default be manipulated or not? Since 0.4.6.
@@ -276,10 +197,7 @@ class ParamDefinition implements IParamDefinition {
}
/**
- * @see IParamDefinition::getDefault
- *
- * @since 1.0
- *
+ * Returns the default value.
* @return mixed
*/
public function getDefault() {
@@ -287,53 +205,33 @@ class ParamDefinition implements IParamDefinition {
}
/**
- * @see IParamDefinition::getMessage
- *
- * @since 1.0
- *
- * @return string
+ * Returns a message describing the parameter.
*/
- public function getMessage() {
+ public function getMessage(): string {
return $this->message;
}
/**
- * @see IParamDefinition::setMessage
- *
- * @since 1.0
- *
- * @param string $message
+ * This should be a message key, ie something that can be passed
+ * to wfMsg. Not an actual text.
*/
- public function setMessage( $message ) {
+ public function setMessage( string $message ) {
$this->message = $message;
}
/**
- * @see IParamDefinition::setDoManipulationOfDefault
- *
- * @since 1.0
- *
- * @param boolean $doOrDoNotThereIsNoTry
+ * Set if the parameter manipulations should be applied to the default value.
*/
- public function setDoManipulationOfDefault( $doOrDoNotThereIsNoTry ) {
+ public function setDoManipulationOfDefault( bool $doOrDoNotThereIsNoTry ) {
$this->applyManipulationsToDefault = $doOrDoNotThereIsNoTry;
}
- /**
- * @see IParamDefinition::shouldManipulateDefault
- *
- * @since 1.0
- *
- * @return boolean
- */
- public function shouldManipulateDefault() {
+ public function shouldManipulateDefault(): bool {
return $this->applyManipulationsToDefault;
}
/**
- * @see IParamDefinition::addAliases
- *
- * @since 1.0
+ * Adds one or more aliases for the parameter name.
*
* @param string|string[] $aliases
*/
@@ -343,9 +241,8 @@ class ParamDefinition implements IParamDefinition {
}
/**
- * @see IParamDefinition::addDependencies
- *
- * @since 1.0
+ * Adds one or more dependencies. There are the names of parameters
+ * that need to be validated and formatted before this one.
*
* @param string|string[] $dependencies
*/
@@ -354,25 +251,14 @@ class ParamDefinition implements IParamDefinition {
$this->dependencies = array_merge( $this->dependencies, is_array( $args[0] ) ? $args[0] : $args );
}
- /**
- * @see IParamDefinition::getName
- *
- * @since 1.0
- *
- * @return string
- */
- public function getName() {
+ public function getName(): string {
return $this->name;
}
/**
* Returns a message key for a message describing the parameter type.
- *
- * @since 1.0
- *
- * @return string
*/
- public function getTypeMessage() {
+ public function getTypeMessage(): string {
$message = 'validator-type-' . $this->getType();
if ( $this->isList() ) {
@@ -383,66 +269,45 @@ class ParamDefinition implements IParamDefinition {
}
/**
- * @see IParamDefinition::getDependencies
- *
- * @since 1.0
+ * @deprecated since 1.7
+ * Returns a list of dependencies the parameter has, in the form of
+ * other parameter names.
*
* @return string[]
*/
- public function getDependencies() {
+ public function getDependencies(): array {
return $this->dependencies;
}
- /**
- * @see IParamDefinition::isRequired
- *
- * @since 1.0
- *
- * @return boolean
- */
- public function isRequired() {
+ public function isRequired(): bool {
return is_null( $this->default );
}
- /**
- * @see IParamDefinition::isList
- *
- * @since 1.0
- *
- * @return boolean
- */
- public function isList() {
+ public function isList(): bool {
return $this->isList;
}
/**
- * @see IParamDefinition::getDelimiter
- *
- * @since 1.0
- *
- * @return string
+ * Returns the delimiter to use to split the raw value in case the
+ * parameter is a list.
*/
- public function getDelimiter() {
+ public function getDelimiter(): string {
return $this->delimiter;
}
/**
- * @see IParamDefinition::setDelimiter
- *
- * @since 1.0
- *
- * @param $delimiter string
+ * Sets the delimiter to use to split the raw value in case the
+ * parameter is a list.
*/
- public function setDelimiter( $delimiter ) {
+ public function setDelimiter( string $delimiter ) {
$this->delimiter = $delimiter;
}
/**
- * @see IParamDefinition::setArrayValues
+ * Sets the parameter definition values contained in the provided array.
*
- * @since 1.0
- *
- * @param array $param
+ * @deprecated since 1.7
+ * TODO: provide alternative in ParamDefinitionFactory
*/
public function setArrayValues( array $param ) {
if ( array_key_exists( 'aliases', $param ) ) {
@@ -471,7 +336,6 @@ class ParamDefinition implements IParamDefinition {
/**
* @see IParamDefinition::format
*
- * @since 1.0
* @deprecated
*
* @param IParam $param
@@ -479,6 +343,10 @@ class ParamDefinition implements IParamDefinition {
* @param IParam[] $params
*/
public function format( IParam $param, array &$definitions, array $params ) {
+ /**
+ * @var Param $param
+ */
+
if ( $this->isList() && is_array( $param->getValue() ) ) {
// TODO: if isList returns true, the value should be an array.
// The second check here is to avoid a mysterious error.
@@ -516,7 +384,6 @@ class ParamDefinition implements IParamDefinition {
* @param $params array of IParam
*/
protected function formatList( IParam $param, array &$definitions, array $params ) {
- // TODO
}
/**
@@ -534,7 +401,6 @@ class ParamDefinition implements IParamDefinition {
*/
protected function formatValue( $value, IParam $param, array &$definitions, array $params ) {
return $value;
- // No-op
}
/**
@@ -543,54 +409,28 @@ class ParamDefinition implements IParamDefinition {
* ParamDefinition classes and having all keys set to the names of the
* corresponding parameters.
*
- * @since 1.0
+ * @deprecated since 1.7 - use ParamDefinitionFactory
*
- * @param IParamDefinition[] $definitions
+ * @param ParamDefinition[] $definitions
*
- * @return IParamDefinition[]
+ * @return ParamDefinition[]
* @throws Exception
*/
- public static function getCleanDefinitions( array $definitions ) {
- $cleanList = [];
-
- foreach ( $definitions as $key => $definition ) {
- if ( is_array( $definition ) ) {
- if ( !array_key_exists( 'name', $definition ) && is_string( $key ) ) {
- $definition['name'] = $key;
- }
-
- $definition = ParamDefinitionFactory::singleton()->newDefinitionFromArray( $definition );
- }
-
- if ( !( $definition instanceof IParamDefinition ) ) {
- throw new Exception( '$definition not an instance of IParamDefinition' );
- }
-
- $cleanList[$definition->getName()] = $definition;
- }
-
- return $cleanList;
+ public static function getCleanDefinitions( array $definitions ): array {
+ return ParamDefinitionFactory::singleton()->newDefinitionsFromArrays( $definitions );
}
/**
- * @see IParamDefinition::getType
- *
- * @since 1.0
- *
- * @return string
+ * Returns an identifier for the type of the parameter.
*/
- public function getType() {
+ public function getType(): string {
return $this->type;
}
/**
- * @see IParamDefinition::getValueParser
- *
- * @since 1.0
- *
- * @return ValueParser
+ * Returns a ValueParser object to parse the parameters value.
*/
- public function getValueParser() {
+ public function getValueParser(): ValueParser {
if ( $this->parser === null ) {
$this->parser = new NullParser();
}
@@ -599,13 +439,9 @@ class ParamDefinition implements IParamDefinition {
}
/**
- * @see IParamDefinition::getValueValidator
- *
- * @since 1.0
- *
- * @return ValueValidator
+ * Returns a ValueValidator that can be used to validate the parameters value.
*/
- public function getValueValidator() {
+ public function getValueValidator(): ValueValidator {
if ( $this->validator === null ) {
$this->validator = new NullValidator();
}
@@ -613,56 +449,32 @@ class ParamDefinition implements IParamDefinition {
return $this->validator;
}
- /**
- * @see IParamDefinition::setValueParser
- *
- * @since 1.0
- *
- * @param ValueParser $parser
- */
public function setValueParser( ValueParser $parser ) {
$this->parser = $parser;
}
- /**
- * @see IParamDefinition::setValueValidator
- *
- * @since 1.0
- *
- * @param ValueValidator $validator
- */
public function setValueValidator( ValueValidator $validator ) {
$this->validator = $validator;
}
/**
- * @see IParamDefinition::setValidationCallback
+ * Sets a validation function that will be run before the ValueValidator.
*
- * @since 1.0
- *
- * @param callable $validationFunction
+ * This can be used instead of a ValueValidator where validation is very
+ * trivial, ie checking if something is a boolean can be done with is_bool.
*/
- public function setValidationCallback( /* callable */ $validationFunction ) {
+ public function setValidationCallback( ?callable $validationFunction ) {
$this->validationFunction = $validationFunction;
}
/**
- * @see IParamDefinition::getValidationCallback
- *
- * @since 1.0
- *
- * @return callable|null
+ * @see setValidationCallback
*/
- public function getValidationCallback() {
+ public function getValidationCallback(): ?callable {
return $this->validationFunction;
}
- /**
- * @since 0.1
- *
- * @return array
- */
- public function getOptions() {
+ public function getOptions(): array {
return $this->options;
}
diff --git a/www/wiki/vendor/param-processor/param-processor/src/ParamDefinitionFactory.php b/www/wiki/vendor/param-processor/param-processor/src/ParamDefinitionFactory.php
index f582d67f..dcf72839 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/ParamDefinitionFactory.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/ParamDefinitionFactory.php
@@ -4,42 +4,39 @@ namespace ParamProcessor;
use Exception;
use OutOfBoundsException;
+use ParamProcessor\PackagePrivate\ParamType;
+use ValueValidators\NullValidator;
/**
- * Factory for IParamDefinition implementing objects.
+ * Factory for ParamDefinition implementing objects.
*
* @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class ParamDefinitionFactory {
+ private $types;
+
/**
- * Maps parameter type to handling IParameterDefinition implementing class.
- *
- * @since 1.0
- *
- * @var array
+ * @since 1.8
*/
- private $typeToClass = [];
+ public function __construct( ParameterTypes $types = null ) {
+ $this->types = $types ?? new ParameterTypes();
+ }
/**
- * Maps parameter type to its associated components.
- *
- * @since 1.0
+ * Returns a ParamDefinitionFactory that already has the core parameter types (@see ParameterTypes) registered.
*
- * @var array
+ * @since 1.6
*/
- private $typeToComponent = [];
+ public static function newDefault(): self {
+ return new self( ParameterTypes::newCoreTypes() );
+ }
/**
- * Singleton.
- *
- * @since 1.0
* @deprecated since 1.0
- *
- * @return ParamDefinitionFactory
*/
- public static function singleton() {
+ public static function singleton(): self {
static $instance = false;
if ( $instance === false ) {
@@ -52,8 +49,7 @@ class ParamDefinitionFactory {
/**
* Registers the parameter types specified in the global $wgParamDefinitions.
- *
- * @since 1.0
+ * @deprecated since 1.6
*/
public function registerGlobals() {
if ( array_key_exists( 'wgParamDefinitions', $GLOBALS ) ) {
@@ -75,7 +71,7 @@ class ParamDefinitionFactory {
*
* - string-parser: the parser to use to transform string values
* This class needs to implement ValueParser. Default: NullParser
- * - typed-parser: the parser to use to transform typed PHP values
+ * - typed-parser: DEPRECATED since 1.6 - the parser to use to transform typed PHP values
* This class needs to implement ValueParser. Default: NullParser
* - validator: the validation object to use
* This class needs to implement ValueValidator. Default: NullValidator
@@ -87,71 +83,56 @@ class ParamDefinitionFactory {
* @param string $type
* @param array $data
*
- * @return boolean Indicates if the type was registered
+ * @return boolean DEPRECATED since 1.6 - Indicates if the type was registered
*/
public function registerType( $type, array $data ) {
- if ( array_key_exists( $type, $this->typeToClass ) ) {
+ if ( $this->types->hasType( $type ) ) {
return false;
}
- $class = array_key_exists( 'definition', $data ) ? $data['definition'] : 'ParamProcessor\ParamDefinition';
- $this->typeToClass[$type] = $class;
-
- $defaults = [
- 'string-parser' => 'ValueParsers\NullParser',
- 'typed-parser' => 'ValueParsers\NullParser',
- 'validator' => 'ValueValidators\NullValidator',
- 'validation-callback' => null,
- ];
-
- $this->typeToComponent[$type] = [];
-
- foreach ( $defaults as $component => $default ) {
- $this->typeToComponent[$type][$component] = array_key_exists( $component, $data ) ? $data[$component] : $default;
- }
+ $this->types->addType( $type, $data );
return true;
}
/**
- * Creates a new instance of a IParamDefinition based on the provided type.
- *
- * @since 1.0
+ * Creates a new instance of a ParamDefinition based on the provided type.
*
- * @param string $type
+ * @param string $typeName
* @param string $name
* @param mixed $default
* @param string $message
* @param boolean $isList
*
- * @return IParamDefinition
+ * @return ParamDefinition
* @throws OutOfBoundsException
*/
- public function newDefinition( $type, $name, $default, $message, $isList = false ) {
- if ( !array_key_exists( $type, $this->typeToClass ) ) {
- throw new OutOfBoundsException( 'Unknown parameter type "' . $type . '".' );
+ public function newDefinition( string $typeName, string $name, $default, string $message, bool $isList = false ): ParamDefinition {
+ if ( !$this->types->hasType( $typeName ) ) {
+ throw new OutOfBoundsException( 'Unknown parameter type "' . $typeName . '".' );
}
- $class = $this->typeToClass[$type];
+ $type = $this->types->getType( $typeName );
+ $class = $type->getClassName();
/**
- * @var IParamDefinition $definition
+ * @var ParamDefinition $definition
*/
$definition = new $class(
- $type,
+ $typeName,
$name,
$default,
$message,
$isList
);
- $validator = $this->typeToComponent[$type]['validator'];
+ $validator = $type->getValidatorClass();
- if ( $validator !== '\ValueValidators\NullValidator' ) {
+ if ( $validator !== NullValidator::class ) {
$definition->setValueValidator( new $validator() );
}
- $validationCallback = $this->typeToComponent[$type]['validation-callback'];
+ $validationCallback = $type->getValidationCallback();
if ( $validationCallback !== null ) {
$definition->setValidationCallback( $validationCallback );
@@ -161,43 +142,22 @@ class ParamDefinitionFactory {
}
/**
- * Returns the specified component for the provided parameter type.
- * This method is likely to change in the future in a compat breaking way.
- *
- * @since 1.0
- *
- * @param string $paramType
- * @param string $componentType
- *
- * @throws Exception
- * @return mixed
+ * Package private
*/
- public function getComponentForType( $paramType, $componentType ) {
- if ( !array_key_exists( $paramType, $this->typeToComponent ) ) {
- throw new Exception( 'Unknown parameter type "' . $paramType . '".' );
- }
-
- if ( !array_key_exists( $componentType, $this->typeToComponent[$paramType] ) ) {
- throw new Exception( 'Unknown parameter component type "' . $paramType . '".' );
- }
-
- return $this->typeToComponent[$paramType][$componentType];
+ public function getType( string $typeName ): ParamType {
+ return $this->types->getType( $typeName );
}
/**
- * Construct a new ParamDefinition from an array.
- *
- * @since 1.0
+ * @param array $definitionArray
+ * @param bool $getMad DEPRECATED since 1.6
*
- * @param array $param
- * @param bool $getMad
- *
- * @return IParamDefinition|false
+ * @return ParamDefinition|false
* @throws Exception
*/
- public function newDefinitionFromArray( array $param, $getMad = true ) {
+ public function newDefinitionFromArray( array $definitionArray, $getMad = true ) {
foreach ( [ 'name', 'message' ] as $requiredElement ) {
- if ( !array_key_exists( $requiredElement, $param ) ) {
+ if ( !array_key_exists( $requiredElement, $definitionArray ) ) {
if ( $getMad ) {
throw new Exception( 'Could not construct a ParamDefinition from an array without ' . $requiredElement . ' element' );
}
@@ -206,17 +166,50 @@ class ParamDefinitionFactory {
}
}
- $parameter = $this->newDefinition(
- array_key_exists( 'type', $param ) ? $param['type'] : 'string',
- $param['name'],
- array_key_exists( 'default', $param ) ? $param['default'] : null,
- $param['message'],
- array_key_exists( 'islist', $param ) ? $param['islist'] : false
+ $definition = $this->newDefinition(
+ array_key_exists( 'type', $definitionArray ) ? $definitionArray['type'] : 'string',
+ $definitionArray['name'],
+ array_key_exists( 'default', $definitionArray ) ? $definitionArray['default'] : null,
+ $definitionArray['message'],
+ array_key_exists( 'islist', $definitionArray ) ? $definitionArray['islist'] : false
);
- $parameter->setArrayValues( $param );
+ $definition->setArrayValues( $definitionArray );
+
+ return $definition;
+ }
+
+ /**
+ * @since 1.9
+ *
+ * @param array $definitionArrays Each element must either be
+ * - A definition array with "name" key
+ * - A name key pointing to a definition array
+ * - A ParamDefinition instance (discouraged)
+ *
+ * @return ParamDefinition[]
+ * @throws Exception
+ */
+ public function newDefinitionsFromArrays( array $definitionArrays ): array {
+ $cleanList = [];
+
+ foreach ( $definitionArrays as $key => $definitionArray ) {
+ if ( is_array( $definitionArray ) ) {
+ if ( !array_key_exists( 'name', $definitionArray ) && is_string( $key ) ) {
+ $definitionArray['name'] = $key;
+ }
+
+ $definitionArray = $this->newDefinitionFromArray( $definitionArray );
+ }
+
+ if ( !( $definitionArray instanceof IParamDefinition ) ) {
+ throw new Exception( 'Parameter definition not an instance of IParamDefinition' );
+ }
+
+ $cleanList[$definitionArray->getName()] = $definitionArray;
+ }
- return $parameter;
+ return $cleanList;
}
}
diff --git a/www/wiki/vendor/param-processor/param-processor/src/ParameterTypes.php b/www/wiki/vendor/param-processor/param-processor/src/ParameterTypes.php
index ca4e66bc..4f984e51 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/ParameterTypes.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/ParameterTypes.php
@@ -4,8 +4,9 @@ declare( strict_types = 1 );
namespace ParamProcessor;
-use ParamProcessor\Definition\DimensionParam;
use ParamProcessor\Definition\StringParam;
+use ParamProcessor\PackagePrivate\DimensionParser;
+use ParamProcessor\PackagePrivate\ParamType;
use ValueParsers\BoolParser;
use ValueParsers\FloatParser;
use ValueParsers\IntParser;
@@ -14,37 +15,89 @@ use ValueValidators\RangeValidator;
use ValueValidators\StringValidator;
/**
- * @since 1.4
- *
* @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class ParameterTypes {
+ /**
+ * @since 1.7
+ */
+ public const BOOLEAN = 'boolean';
+ public const FLOAT = 'float';
+ public const INTEGER = 'integer';
+ public const STRING = 'string';
+ public const DIMENSION = 'dimension';
+
+ /**
+ * @var ParamType[]
+ */
+ private $types = [];
+
+ /**
+ * @param array[] $typeSpecs
+ */
+ public function __construct( array $typeSpecs = [] ) {
+ foreach ( $typeSpecs as $typeName => $typeSpec ) {
+ $this->addType( $typeName, $typeSpec );
+ }
+ }
+
+ /**
+ * @since 1.8
+ */
+ public function addType( string $typeName, array $typeSpec ) {
+ $this->types[$typeName] = ParamType::newFromArray( $typeName, $typeSpec );
+ }
+
+ /**
+ * Package private
+ */
+ public function hasType( string $typeName ): bool {
+ return array_key_exists( $typeName, $this->types );
+ }
+
+ /**
+ * Package private
+ */
+ public function getType( string $typeName ): ParamType {
+ return $this->types[$typeName];
+ }
+
+ /**
+ * @since 1.8
+ */
+ public static function newCoreTypes(): self {
+ return new self( self::getCoreTypes() );
+ }
+
+ /**
+ * @since 1.4
+ */
public static function getCoreTypes(): array {
return [
- 'boolean' => [
+ self::BOOLEAN => [
'string-parser' => BoolParser::class,
'validation-callback' => 'is_bool',
],
- 'float' => [
+ self::FLOAT => [
'string-parser' => FloatParser::class,
'validation-callback' => function( $value ) {
return is_float( $value ) || is_int( $value );
},
'validator' => RangeValidator::class,
],
- 'integer' => [
+ self::INTEGER => [
'string-parser' => IntParser::class,
'validation-callback' => 'is_int',
'validator' => RangeValidator::class,
],
- 'string' => [
+ self::STRING => [
'validator' => StringValidator::class,
'definition' => StringParam::class,
],
- 'dimension' => [
- 'definition' => DimensionParam::class,
+ self::DIMENSION => [
+ 'string-parser' => DimensionParser::class,
'validator' => DimensionValidator::class,
],
];
diff --git a/www/wiki/vendor/param-processor/param-processor/src/ProcessingError.php b/www/wiki/vendor/param-processor/param-processor/src/ProcessingError.php
index 03418661..2e5cd51a 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/ProcessingError.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/ProcessingError.php
@@ -83,7 +83,7 @@ class ProcessingError {
/**
* Returns the severity of the error.
- * @return integer Element of the ProcessingError::SEVERITY_ enum
+ * @return integer Element of the self::SEVERITY_ enum
*/
public function getSeverity(): int {
return $this->severity;
@@ -113,16 +113,16 @@ class ProcessingError {
/**
* Returns the action associated with the errors severity.
*
- * @return integer Element of the ProcessingError::ACTION_ enum
+ * @return integer Element of the self::ACTION_ enum
* @throws \Exception
*/
public function getAction(): int {
// TODO: as option
$errorActions = [
- ProcessingError::SEVERITY_MINOR => ProcessingError::ACTION_LOG,
- ProcessingError::SEVERITY_LOW => ProcessingError::ACTION_WARN,
- ProcessingError::SEVERITY_NORMAL => ProcessingError::ACTION_SHOW,
- ProcessingError::SEVERITY_HIGH => ProcessingError::ACTION_DEMAND,
+ self::SEVERITY_MINOR => self::ACTION_LOG,
+ self::SEVERITY_LOW => self::ACTION_WARN,
+ self::SEVERITY_NORMAL => self::ACTION_SHOW,
+ self::SEVERITY_HIGH => self::ACTION_DEMAND,
];
if ( $this->severity === self::SEVERITY_FATAL ) {
diff --git a/www/wiki/vendor/param-processor/param-processor/src/ProcessingErrorHandler.php b/www/wiki/vendor/param-processor/param-processor/src/ProcessingErrorHandler.php
index 8ce9e8ca..faa6fcea 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/ProcessingErrorHandler.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/ProcessingErrorHandler.php
@@ -4,7 +4,7 @@ namespace ParamProcessor;
/**
* Static class for error handling.
- *
+ *
* @since 0.4
* @deprecated since 1.0
*
@@ -12,48 +12,48 @@ namespace ParamProcessor;
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
final class ProcessingErrorHandler {
-
+
/**
* @since 0.4
- *
+ *
* @var array of ProcessingError
*/
private static $errors = [];
-
+
/**
* Adds a single ProcessingError.
- *
+ *
* @since 0.4
- *
+ *
* @param string $errorMessage
* @param integer $severity
*/
public static function addError( ProcessingError $error ) {
self::$errors[$error->getElement()][] = $error;
}
-
+
/**
* Adds a list of ProcessingError.
- *
+ *
* @since 0.4
- *
+ *
* @param array $errors
- */
+ */
public static function addErrors( array $errors ) {
foreach ( $errors as $error ) {
self::addError( $error );
}
}
-
+
/**
* Returns a list of all registered errors.
- *
+ *
* @since 0.4
- *
+ *
* @return array of ProcessingError
*/
public static function getErrors() {
return self::$errors;
}
-
+
} \ No newline at end of file
diff --git a/www/wiki/vendor/param-processor/param-processor/src/ProcessingResult.php b/www/wiki/vendor/param-processor/param-processor/src/ProcessingResult.php
index 1f519156..f184808f 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/ProcessingResult.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/ProcessingResult.php
@@ -30,6 +30,19 @@ class ProcessingResult {
}
/**
+ * @since 1.8
+ */
+ public function getParameterArray(): array {
+ $parameters = [];
+
+ foreach ( $this->parameters as $parameter ) {
+ $parameters[$parameter->getName()] = $parameter->getValue();
+ }
+
+ return $parameters;
+ }
+
+ /**
* @return ProcessingError[]
*/
public function getErrors(): array {
diff --git a/www/wiki/vendor/param-processor/param-processor/src/Processor.php b/www/wiki/vendor/param-processor/param-processor/src/Processor.php
index a6f2cb46..73a8d67a 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/Processor.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/Processor.php
@@ -2,6 +2,8 @@
namespace ParamProcessor;
+use ParamProcessor\PackagePrivate\Param;
+
/**
* Class for parameter validation of a single parser hook or other parametrized construct.
*
@@ -41,7 +43,7 @@ class Processor {
private $paramsToHandle = [];
/**
- * @var IParamDefinition[]
+ * @var ParamDefinition[]
*/
private $paramDefinitions = [];
@@ -58,10 +60,6 @@ class Processor {
/**
* Constructs and returns a Validator object based on the default options.
- *
- * @since 1.0
- *
- * @return Processor
*/
public static function newDefault(): self {
return new Processor( new Options() );
@@ -69,12 +67,6 @@ class Processor {
/**
* Constructs and returns a Validator object based on the provided options.
- *
- * @since 1.0
- *
- * @param Options $options
- *
- * @return Processor
*/
public static function newFromOptions( Options $options ): self {
return new Processor( $options );
@@ -82,10 +74,6 @@ class Processor {
/**
* Returns the options used by this Validator object.
- *
- * @since 1.0
- *
- * @return Options
*/
public function getOptions(): Options {
return $this->options;
@@ -98,18 +86,14 @@ class Processor {
* @since 0.4
*
* @param string[] $rawParams
- * @param array $parameterDefinitions
+ * @param ParamDefinition[]|array[] $parameterDefinitions DEPRECATED! Use @see setParameterDefinitions instead
* @param array $defaultParams array of strings or array of arrays to define which parameters can be used unnamed.
* The second value in array-form is reserved for flags. Currently, Processor::PARAM_UNNAMED determines that
* the parameter has no name which can be used to set it. Therefore all these parameters must be set before
* any named parameter. The effect is, that '=' within the string won't confuse the parameter anymore like
* it would happen with default parameters that still have a name as well.
*/
- public function setFunctionParams( array $rawParams, array $parameterDefinitions, array $defaultParams = [] ) {
- $parameters = [];
-
- $nr = 0;
- $defaultNr = 0;
+ public function setFunctionParams( array $rawParams, array $parameterDefinitions = [], array $defaultParams = [] ) {
$lastUnnamedDefaultNr = -1;
/*
@@ -118,7 +102,7 @@ class Processor {
* after the first named param. Wouldn't be possible to determine which unnamed value
* belongs to which parameter otherwise.
*/
- for( $i = count( $defaultParams ) - 1; $i >= 0 ; $i-- ) {
+ for( $i = count( $defaultParams ) - 1; $i >= 0; $i-- ) {
$dflt = $defaultParams[$i];
if( is_array( $dflt ) && !empty( $dflt[1] ) && ( $dflt[1] | self::PARAM_UNNAMED ) ) {
$lastUnnamedDefaultNr = $i;
@@ -126,6 +110,10 @@ class Processor {
}
}
+ $parameters = [];
+ $nr = 0;
+ $defaultNr = 0;
+
foreach ( $rawParams as $arg ) {
// Only take into account strings. If the value is not a string,
// it is not a raw parameter, and can not be parsed correctly in all cases.
@@ -150,9 +138,6 @@ class Processor {
];
$defaultNr++;
}
- else {
- // It might be nice to have some sort of warning or error here, as the value is simply ignored.
- }
} else {
$paramName = trim( strtolower( $parts[0] ) );
@@ -167,7 +152,9 @@ class Processor {
$newDefaults = [];
foreach( $defaultParams as $defaultParam ) {
- if ( $defaultParam != $paramName ) $newDefaults[] = $defaultParam;
+ if ( $defaultParam != $paramName ) {
+ $newDefaults[] = $defaultParam;
+ }
}
$defaultParams = $newDefaults;
@@ -181,13 +168,21 @@ class Processor {
}
/**
+ * @since 1.6.0
+ * @param ParamDefinition[] $paramDefinitions
+ */
+ public function setParameterDefinitions( array $paramDefinitions ) {
+ $this->paramDefinitions = $paramDefinitions;
+ }
+
+ /**
* Loops through a list of provided parameters, resolves aliasing and stores errors
* for unknown parameters and optionally for parameter overriding.
*
* @param array $parameters Parameter name as key, parameter value as value
- * @param IParamDefinition[] $paramDefinitions List of parameter definitions. Either ParamDefinition objects or equivalent arrays.
+ * @param ParamDefinition[]|array[] $paramDefinitions DEPRECATED! Use @see setParameterDefinitions instead
*/
- public function setParameters( array $parameters, array $paramDefinitions ) {
+ public function setParameters( array $parameters, array $paramDefinitions = [] ) {
$this->paramDefinitions = ParamDefinition::getCleanDefinitions( $paramDefinitions );
// Loop through all the user provided parameters, and distinguish between those that are allowed and those that are not.
@@ -208,10 +203,10 @@ class Processor {
/**
* @param string $message
- * @param mixed $tags string or array
+ * @param string[] $tags
* @param integer $severity
*/
- private function registerNewError( $message, $tags = [], $severity = ProcessingError::SEVERITY_NORMAL ) {
+ private function registerNewError( string $message, array $tags = [], int $severity = ProcessingError::SEVERITY_NORMAL ) {
$this->registerError(
new ProcessingError(
$message,
@@ -247,7 +242,7 @@ class Processor {
foreach ( $this->rawParameters as $paramName => $paramValue ) {
$this->registerNewError(
$paramName . ' is not a valid parameter', // TODO
- $paramName
+ [ $paramName ]
);
}
}
@@ -262,9 +257,6 @@ class Processor {
$this->params = [];
}
- /**
- * @var Param $parameter
- */
foreach ( $this->params as $parameter ) {
// TODO
$processedParam = new ProcessedParam(
@@ -289,9 +281,6 @@ class Processor {
);
}
- /**
- * Does the actual parameter processing.
- */
private function doParamProcessing() {
$this->errors = [];
@@ -361,7 +350,7 @@ class Processor {
}
/**
- * @param IParamDefinition[] $paramDefinitions
+ * @param ParamDefinition[] $paramDefinitions
* @param string[] $paramsToHandle
*
* @return array
@@ -376,8 +365,8 @@ class Processor {
throw new \UnexpectedValueException( 'Unexpected parameter name "' . $paramName . '"' );
}
- if ( !is_object( $paramDefinitions[$paramName] ) || !( $paramDefinitions[$paramName] instanceof IParamDefinition ) ) {
- throw new \UnexpectedValueException( 'Parameter "' . $paramName . '" is not a IParamDefinition' );
+ if ( !is_object( $paramDefinitions[$paramName] ) || !( $paramDefinitions[$paramName] instanceof ParamDefinition ) ) {
+ throw new \UnexpectedValueException( 'Parameter "' . $paramName . '" is not a ParamDefinition' );
}
// Only include dependencies that are in the list of parameters to handle.
@@ -420,34 +409,24 @@ class Processor {
}
/**
- * Returns the parameters.
- *
- * @since 0.4
* @deprecated since 1.0
- *
- * @return IParam[]
+ * @return Param[]
*/
public function getParameters(): array {
return $this->params;
}
/**
- * Returns a single parameter.
- *
- * @since 0.4
* @deprecated since 1.0
- *
- * @param string $parameterName The name of the parameter to return
- *
- * @return IParam
*/
- public function getParameter( string $parameterName ): IParam {
+ public function getParameter( string $parameterName ): Param {
return $this->params[$parameterName];
}
/**
* Returns an associative array with the parameter names as key and their
* corresponding values as value.
+ * @deprecated since 1.7 - use processParameters() return value
*/
public function getParameterValues(): array {
$parameters = [];
@@ -460,6 +439,7 @@ class Processor {
}
/**
+ * @deprecated since 1.7 - use processParameters() return value
* @return ProcessingError[]
*/
public function getErrors(): array {
@@ -467,6 +447,7 @@ class Processor {
}
/**
+ * @deprecated since 1.7 - use processParameters() return value
* @return string[]
*/
public function getErrorMessages(): array {
@@ -480,15 +461,14 @@ class Processor {
}
/**
- * Returns if there where any errors during validation.
+ * @deprecated since 1.7 - use processParameters() return value
*/
public function hasErrors(): bool {
return !empty( $this->errors );
}
/**
- * Returns false when there are no fatal errors or an ProcessingError when one is found.
- *
+ * @deprecated since 1.7 - use processParameters() return value
* @return ProcessingError|boolean false
*/
public function hasFatalError() {
diff --git a/www/wiki/vendor/param-processor/param-processor/src/Settings.php b/www/wiki/vendor/param-processor/param-processor/src/Settings.php
index c43a94cd..b38c59e6 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/Settings.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/Settings.php
@@ -10,7 +10,7 @@ namespace ParamProcessor;
* Changing one of these settings can be done by assigning to $egValidatorSettings,
* AFTER the inclusion of the extension itself.
*
- * @since 1.0
+ * @deprecated since 1.7
*
* @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
diff --git a/www/wiki/vendor/param-processor/param-processor/src/TopologicalSort.php b/www/wiki/vendor/param-processor/param-processor/src/TopologicalSort.php
index 9833e5a3..ccb79eac 100644
--- a/www/wiki/vendor/param-processor/param-processor/src/TopologicalSort.php
+++ b/www/wiki/vendor/param-processor/param-processor/src/TopologicalSort.php
@@ -7,19 +7,8 @@ namespace ParamProcessor;
*
* Based on http://blog.metafoundry.com/2007/09/topological-sort-in-php.html
*
- * usage:
- * $t = new TopologicalSort($dependency_pairs);
- * $load_order = $t->doSort();
- *
- * where dependency_pairs is in the form:
- * $name => (depends on) $value
- *
- * @author Eddie Haber
- * @author Jeroen De Dauw
- *
+ * @deprecated since 1.7
* @codingStandardsIgnoreFile
- *
- * TODO: handle dependency loops and other crap more nicely
*/
class TopologicalSort {
@@ -155,7 +144,7 @@ class TopologicalSort {
}
/**
- * Node class for Topological Sort Class
+ * @deprecated since 1.7
*/
class TSNode {
public $name;
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/BoolParamTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/BoolParamTest.php
index 875a05fb..d8b23f06 100644
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/BoolParamTest.php
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/BoolParamTest.php
@@ -1,6 +1,6 @@
<?php
-namespace ParamProcessor\Tests\Definitions;
+namespace ParamProcessor\Tests\Integration\Definitions;
/**
* @licence GNU GPL v2+
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/FloatParamTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/FloatParamTest.php
index b86fd77a..742f1342 100644
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/FloatParamTest.php
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/FloatParamTest.php
@@ -1,6 +1,6 @@
<?php
-namespace ParamProcessor\Tests\Definitions;
+namespace ParamProcessor\Tests\Integration\Definitions;
/**
* @licence GNU GPL v2+
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/IntParamTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/IntParamTest.php
index 6a7f4e87..4e8872e8 100644
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/IntParamTest.php
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/IntParamTest.php
@@ -1,6 +1,6 @@
<?php
-namespace ParamProcessor\Tests\Definitions;
+namespace ParamProcessor\Tests\Integration\Definitions;
/**
* @licence GNU GPL v2+
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/NumericParamTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/NumericParamTest.php
index 4d40eeda..2af9a2b0 100644
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/NumericParamTest.php
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/NumericParamTest.php
@@ -1,6 +1,6 @@
<?php
-namespace ParamProcessor\Tests\Definitions;
+namespace ParamProcessor\Tests\Integration\Definitions;
use ParamProcessor\Options;
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/ParamDefinitionTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/ParamDefinitionTest.php
index 08e22ce0..64ac9004 100644
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/ParamDefinitionTest.php
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/ParamDefinitionTest.php
@@ -1,11 +1,11 @@
<?php
-namespace ParamProcessor\Tests\Definitions;
+namespace ParamProcessor\Tests\Integration\Definitions;
+use ParamProcessor\IParamDefinition;
use ParamProcessor\Options;
+use ParamProcessor\PackagePrivate\Param;
use ParamProcessor\ParamDefinition;
-use ParamProcessor\IParamDefinition;
-use ParamProcessor\Param;
use ParamProcessor\ParamDefinitionFactory;
use PHPUnit\Framework\TestCase;
@@ -82,7 +82,7 @@ abstract class ParamDefinitionTest extends TestCase {
/**
* @dataProvider instanceProvider
*/
- public function testGetType( IParamDefinition $definition ) {
+ public function testGetType( IParamDefinition $definition ) {
$this->assertEquals( $this->getType(), $definition->getType() );
}
@@ -156,4 +156,11 @@ abstract class ParamDefinitionTest extends TestCase {
$this->assertEquals( $validity, $param->getErrors() === [] );
}
+ public function testConstructingWithoutMessageLeadsToDefaultMessage() {
+ $this->assertSame(
+ 'validator-message-nodesc',
+ ( new ParamDefinition( 'type', 'name' ) )->getMessage()
+ );
+ }
+
} \ No newline at end of file
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/StringParamTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/StringParamTest.php
index dea22920..2fb31db1 100644
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/StringParamTest.php
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Integration/Definitions/StringParamTest.php
@@ -1,6 +1,6 @@
<?php
-namespace ParamProcessor\Tests\Definitions;
+namespace ParamProcessor\Tests\Integration\Definitions;
/**
* @licence GNU GPL v2+
@@ -9,17 +9,6 @@ namespace ParamProcessor\Tests\Definitions;
class StringParamTest extends ParamDefinitionTest {
/**
- * @see ParamDefinitionTest::getDefinitions
- */
- public function getDefinitions() {
- $params = parent::getDefinitions();
-
-
-
- return $params;
- }
-
- /**
* @see ParamDefinitionTest::valueProvider
*
* @param boolean $stringlyTyped
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/Integration/DimensionTypeTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Integration/DimensionTypeTest.php
new file mode 100644
index 00000000..9fdac669
--- /dev/null
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Integration/DimensionTypeTest.php
@@ -0,0 +1,208 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ParamProcessor\Tests\Integration;
+
+use ParamProcessor\ParamDefinitionFactory;
+use ParamProcessor\ParameterTypes;
+use ParamProcessor\ProcessingResult;
+use ParamProcessor\Processor;
+use PHPUnit\Framework\TestCase;
+
+class DimensionTypeTest extends TestCase {
+
+ /**
+ * @dataProvider widthProvider
+ */
+ public function testWidth( string $input, string $expected ) {
+ $parameters = $this->process(
+ [
+ 'width' => [
+ 'type' => ParameterTypes::DIMENSION,
+ 'message' => 'test-message'
+ ]
+ ],
+ [
+ 'width' => $input,
+ ]
+ )->getParameterArray();
+
+ $this->assertSame( $expected, $parameters['width'] );
+ }
+
+ public function widthProvider() {
+ yield [ '10', '10px' ];
+ yield [ '10px', '10px' ];
+ yield [ '10%', '10%' ];
+ yield [ '10em', '10em' ];
+ yield [ '10ex', '10ex' ];
+ yield [ 'auto', 'auto' ];
+ yield [ ' 10 ', '10px' ];
+ yield [ ' 1 ', '1px' ];
+ yield [ '1 px', '1px' ];
+ yield [ '1 ex', '1ex' ];
+ // TODO: make sure unit is after the value
+ // TODO: make sure only the unit is present
+ }
+
+ private function process( array $definitionArrays, array $userInput ): ProcessingResult {
+ $processor = Processor::newDefault();
+
+ $processor->setParameters( $userInput );
+ $processor->setParameterDefinitions(
+ ParamDefinitionFactory::newDefault()->newDefinitionsFromArrays( $definitionArrays )
+ );
+
+ return $processor->processParameters();
+ }
+
+ /**
+ * @dataProvider heightProvider
+ */
+ public function testHeight( string $input, string $expected ) {
+ $parameters = $this->process(
+ [
+ 'height' => [
+ 'type' => ParameterTypes::DIMENSION,
+ 'message' => 'test-message'
+ ]
+ ],
+ [
+ 'height' => $input,
+ ]
+ )->getParameterArray();
+
+ $this->assertSame( $expected, $parameters['height'] );
+ }
+
+ public function heightProvider() {
+ yield [ '10', '10px' ];
+ yield [ '10px', '10px' ];
+ yield [ '10em', '10em' ];
+ yield [ '10ex', '10ex' ];
+ }
+
+ public function testAlternateDefaultUnit() {
+ $parameters = $this->process(
+ [
+ 'height' => [
+ 'type' => ParameterTypes::DIMENSION,
+ 'defaultunit' => '%',
+ 'message' => 'test-message'
+ ]
+ ],
+ [
+ 'height' => '2.5',
+ ]
+ )->getParameterArray();
+
+ $this->assertSame( '2.5%', $parameters['height'] );
+ }
+
+ /**
+ * @dataProvider invalidDimensionProvider
+ */
+ public function testInvalidInputsDefault( string $invalidDimension ) {
+ $parameters = $this->process(
+ [
+ 'height' => [
+ 'type' => ParameterTypes::DIMENSION,
+ 'default' => '42%',
+ 'lowerbound' => 20,
+ 'upperbound' => 80,
+ 'minpercentage' => 30,
+ 'maxpercentage' => 70,
+ 'message' => 'test-message'
+ ]
+ ],
+ [
+ 'height' => $invalidDimension,
+ ]
+ )->getParameterArray();
+
+ $this->assertSame( '42%', $parameters['height'] );
+ }
+
+ public function invalidDimensionProvider() {
+ yield [ 'invalid' ];
+ yield [ 'px' ];
+ yield [ '19' ];
+ yield [ '81' ];
+ yield [ '29%' ];
+ yield [ '71%' ];
+ yield 'auto not allowed' => [ 'auto' ];
+ yield 'unit not allowed' => [ '1 wtf' ];
+ }
+
+ /**
+ * @dataProvider validBoundsInput
+ */
+ public function testValidInputWithBounds( string $valid ) {
+ $parameters = $this->process(
+ [
+ 'height' => [
+ 'type' => ParameterTypes::DIMENSION,
+ 'default' => '42%',
+ 'lowerbound' => 20,
+ 'upperbound' => 80,
+ 'minpercentage' => 30,
+ 'maxpercentage' => 70,
+ 'message' => 'test-message'
+ ]
+ ],
+ [
+ 'height' => $valid,
+ ]
+ )->getParameterArray();
+
+ $this->assertSame( $valid, $parameters['height'] );
+ }
+
+ public function validBoundsInput() {
+ yield [ '20px' ];
+ yield [ '21px' ];
+ yield [ '80px' ];
+ yield [ '79px' ];
+ // FIXME
+// yield [ '30%' ];
+// yield [ '31%' ];
+// yield [ '70%' ];
+// yield [ '69%' ];
+ }
+
+ public function testAllowAuto() {
+ $parameters = $this->process(
+ [
+ 'height' => [
+ 'type' => ParameterTypes::DIMENSION,
+ 'allowauto' => true,
+ 'message' => 'test-message'
+ ]
+ ],
+ [
+ 'height' => 'auto',
+ ]
+ )->getParameterArray();
+
+ $this->assertSame( 'auto', $parameters['height'] );
+ }
+
+ public function testCanUseSpecialUnit() {
+ $parameters = $this->process(
+ [
+ 'height' => [
+ 'type' => ParameterTypes::DIMENSION,
+ 'units' => [ 'wtf' ],
+ 'message' => 'test-message'
+ ]
+ ],
+ [
+ 'height' => '4.2 wtf',
+ ]
+ )->getParameterArray();
+
+ $this->assertSame( '4.2wtf', $parameters['height'] );
+ }
+
+}
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/ProcessorTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Integration/ProcessorTest.php
index 936c3118..cf1acde5 100644
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/ProcessorTest.php
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Integration/ProcessorTest.php
@@ -1,12 +1,13 @@
<?php
-namespace ParamProcessor\Tests;
+declare( strict_types = 1 );
-use ParamProcessor\ProcessedParam;
-use ParamProcessor\ProcessingError;
+namespace ParamProcessor\Tests\Integration;
+
+use ParamProcessor\Options;
+use ParamProcessor\ParamDefinitionFactory;
use ParamProcessor\ProcessingResult;
use ParamProcessor\Processor;
-use ParamProcessor\Options;
use PHPUnit\Framework\TestCase;
/**
@@ -458,4 +459,28 @@ class ProcessorTest extends TestCase {
);
}
+ public function testSetParameterDefinitions() {
+ $processor = Processor::newDefault();
+
+ $processor->setFunctionParams( [ 'some-list=42,23,9001' ] );
+
+ $processor->setParameterDefinitions(
+ [
+ ( ParamDefinitionFactory::newDefault() )->newDefinitionFromArray(
+ [
+ 'name' => 'some-list',
+ 'type' => 'integer',
+ 'message' => 'test',
+ 'islist' => true
+ ]
+ )
+ ]
+ );
+
+ $this->assertSame(
+ [ 42, 23, 9001 ],
+ $processor->processParameters()->getParameters()['some-list']->getValue()
+ );
+ }
+
}
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/OptionsTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Unit/OptionsTest.php
index 044a4f59..76b826ca 100644
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/OptionsTest.php
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Unit/OptionsTest.php
@@ -1,6 +1,8 @@
<?php
-namespace ParamProcessor\Tests;
+declare( strict_types = 1 );
+
+namespace ParamProcessor\Tests\Unit;
use ParamProcessor\Options;
use PHPUnit\Framework\TestCase;
@@ -13,10 +15,6 @@ use PHPUnit\Framework\TestCase;
*/
class OptionsTest extends TestCase {
- protected function getInstance() {
- return new Options();
- }
-
public function testBooleanSettersAndGetters() {
$methods = [
'setUnknownInvalid' => 'unknownIsInvalid',
@@ -28,7 +26,7 @@ class OptionsTest extends TestCase {
];
foreach ( $methods as $setter => $getter ) {
- $options = $this->getInstance();
+ $options = new Options();
foreach ( [ false, true, false ] as $boolean ) {
call_user_func_array( [ $options, $setter ], [ $boolean ] );
@@ -39,7 +37,7 @@ class OptionsTest extends TestCase {
}
public function testSetAndGetName() {
- $options = $this->getInstance();
+ $options = new Options();
foreach ( [ 'foo', 'bar baz' ] as $name ) {
$options->setName( $name );
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/Unit/PackagePrivate/DimensionParserTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Unit/PackagePrivate/DimensionParserTest.php
new file mode 100644
index 00000000..e82bb8b7
--- /dev/null
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Unit/PackagePrivate/DimensionParserTest.php
@@ -0,0 +1,51 @@
+<?php
+
+declare( strict_types = 1 );
+
+namespace ParamProcessor\Tests\Unit\PackagePrivate;
+
+use ParamProcessor\PackagePrivate\DimensionParser;
+use PHPUnit\Framework\TestCase;
+use ValueParsers\ParseException;
+use ValueParsers\ParserOptions;
+
+class DimensionParserTest extends TestCase {
+
+ public function testParserExceptionOnNonString() {
+ $this->expectException( ParseException::class );
+ $this->parse( 32202 );
+ }
+
+ private function parse( $input ) {
+ return ( new DimensionParser() )->parse( $input );
+ }
+
+ /**
+ * @dataProvider validDimensionProvider
+ */
+ public function testParsingValidInputs( string $input, string $expected ) {
+ $this->assertSame( $expected, $this->parse( $input ) );
+ }
+
+ public function validDimensionProvider() {
+ yield [ '10px', '10px' ];
+ yield [ '10ex', '10ex' ];
+ yield [ '10em', '10em' ];
+ yield [ '2.5px', '2.5px' ];
+
+ yield [ '10 px', '10px' ];
+ yield [ '10 px', '10px' ];
+ yield [ ' 10 px ', '10px' ];
+
+ yield [ '10', '10px' ];
+ yield [ '2.5', '2.5px' ];
+ }
+
+ public function testAlternateDefaultUnit() {
+ $this->assertSame(
+ '1%',
+ ( new DimensionParser( new ParserOptions( [ DimensionParser::DEFAULT_UNIT => '%' ] ) ) )->parse( '1' )
+ );
+ }
+
+}
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/Unit/ParamAliasTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Unit/ParamAliasTest.php
new file mode 100644
index 00000000..bd57dbd3
--- /dev/null
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Unit/ParamAliasTest.php
@@ -0,0 +1,21 @@
+<?php
+
+namespace ParamProcessor\Tests\Unit;
+
+use ParamProcessor\Param;
+use ParamProcessor\ParamDefinition;
+use PHPUnit\Framework\TestCase;
+
+/**
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class ParamAliasTest extends TestCase {
+
+ public function testListParamProcessingWithEmptyListAsDefault() {
+ $definition = new ParamDefinition( 'string', 'something' );
+ $param = new Param( $definition );
+ $this->assertTrue( $param->isRequired() );
+ }
+
+}
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/Unit/ParamDefinitionFactoryTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Unit/ParamDefinitionFactoryTest.php
new file mode 100644
index 00000000..1e727713
--- /dev/null
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Unit/ParamDefinitionFactoryTest.php
@@ -0,0 +1,140 @@
+<?php
+
+namespace ParamProcessor\Tests\Unit;
+
+use ParamProcessor\ParamDefinition;
+use ParamProcessor\ParamDefinitionFactory;
+use ParamProcessor\ParameterTypes;
+use PHPUnit\Framework\TestCase;
+
+/**
+ * @covers \ParamProcessor\ParamDefinitionFactory
+ *
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroendedauw@gmail.com >
+ */
+class ParamDefinitionFactoryTest extends TestCase {
+
+ public function testNewDefinitionFromArray() {
+ $definition = ParamDefinitionFactory::newDefault()->newDefinitionFromArray(
+ [
+ 'name' => 'some-list',
+ 'type' => 'integer',
+ 'message' => 'test-message',
+ 'islist' => true
+ ]
+ );
+
+ $this->assertSame( 'some-list', $definition->getName() );
+ $this->assertSame( 'integer', $definition->getType() );
+ $this->assertSame( 'test-message', $definition->getMessage() );
+ $this->assertTrue( $definition->isList() );
+ $this->assertTrue( $definition->isRequired() );
+ }
+
+ public function testNewDefinition() {
+ $definition = ParamDefinitionFactory::newDefault()->newDefinition(
+ 'integer',
+ 'some-list',
+ null,
+ 'test-message',
+ true
+ );
+
+ $this->assertSame( 'some-list', $definition->getName() );
+ $this->assertSame( 'integer', $definition->getType() );
+ $this->assertSame( 'test-message', $definition->getMessage() );
+ $this->assertTrue( $definition->isList() );
+ $this->assertTrue( $definition->isRequired() );
+ }
+
+ public function testNewDefinitionFromArray_typeDefaultsToString() {
+ $this->assertSame( 'string', $this->newBasicParamFromArray()->getType() );
+ }
+
+ private function newBasicParamFromArray(): ParamDefinition {
+ return ParamDefinitionFactory::newDefault()->newDefinitionFromArray(
+ [
+ 'name' => 'irrelevant',
+ 'message' => 'irrelevant'
+ ]
+ );
+ }
+
+ public function testNewDefinitionFromArray_isListDefaultsToFalse() {
+ $this->assertFalse( $this->newBasicParamFromArray()->isList() );
+ }
+
+ public function testNewDefinitionFromArray_isRequiredDefaultsToTrue() {
+ $this->assertTrue( $this->newBasicParamFromArray()->isRequired() );
+ }
+
+ public function testNewDefinitionFromArray_optionsAreSet() {
+ $arrayDefinition = [
+ 'name' => 'some-list',
+ 'type' => 'integer',
+ 'message' => 'test-message',
+ 'islist' => true
+ ];
+
+ $definition = ParamDefinitionFactory::newDefault()->newDefinitionFromArray( $arrayDefinition );
+
+ $this->assertSame( $arrayDefinition, $definition->getOptions() );
+ }
+
+ public function testNewDefinitionsFromArrays_preservesDefinitionInstances() {
+ $this->assertEquals(
+ [
+ 'kittens' => new ParamDefinition( ParameterTypes::STRING, 'kittens' ),
+ 'cats' => new ParamDefinition( ParameterTypes::INTEGER, 'cats' ),
+ ],
+ ParamDefinitionFactory::newDefault()->newDefinitionsFromArrays(
+ [
+ new ParamDefinition( ParameterTypes::STRING, 'kittens' ),
+ new ParamDefinition( ParameterTypes::INTEGER, 'cats' ),
+ ]
+ )
+ );
+ }
+
+ public function testNewDefinitionsFromArrays_handlesNamesAsKeys() {
+ $definitions = ParamDefinitionFactory::newDefault()->newDefinitionsFromArrays(
+ [
+ 'kittens' => [
+ 'type' => ParameterTypes::STRING,
+ 'message' => 'test-message',
+ ]
+ ]
+ );
+
+ $this->assertSame( 'kittens', $definitions['kittens']->getName() );
+ }
+
+ public function testNewDefinitionsFromArrays_nameFieldTakesPriorityOverKey() {
+ $definitions = ParamDefinitionFactory::newDefault()->newDefinitionsFromArrays(
+ [
+ 'cats' => [
+ 'name' => 'kittens',
+ 'type' => ParameterTypes::STRING,
+ 'message' => 'test-message',
+ ]
+ ]
+ );
+
+ $this->assertSame( 'kittens', $definitions['kittens']->getName() );
+ }
+
+ public function testNewDefinitionsFromArrays_missingNameLeadsToException() {
+ $this->expectException( \Exception::class );
+
+ ParamDefinitionFactory::newDefault()->newDefinitionsFromArrays(
+ [
+ [
+ 'type' => ParameterTypes::STRING,
+ 'message' => 'test-message',
+ ]
+ ]
+ );
+ }
+
+}
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/ParamTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Unit/ParamTest.php
index f25e4af3..4510409d 100644
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/ParamTest.php
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Unit/ParamTest.php
@@ -1,14 +1,14 @@
<?php
-namespace ParamProcessor\Tests;
+namespace ParamProcessor\Tests\Unit;
use ParamProcessor\Options;
-use ParamProcessor\Param;
+use ParamProcessor\PackagePrivate\Param;
use ParamProcessor\ParamDefinition;
use PHPUnit\Framework\TestCase;
/**
- * @covers \ParamProcessor\Param
+ * @covers \ParamProcessor\PackagePrivate\Param
*
* @licence GNU GPL v2+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/Unit/ParameterTypesTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Unit/ParameterTypesTest.php
new file mode 100644
index 00000000..7f4970a6
--- /dev/null
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Unit/ParameterTypesTest.php
@@ -0,0 +1,75 @@
+<?php
+
+namespace ParamProcessor\Tests\Unit;
+
+use ParamProcessor\ParameterTypes;
+use PHPUnit\Framework\TestCase;
+use ValueParsers\NullParser;
+use ValueValidators\NullValidator;
+
+/**
+ * @covers \ParamProcessor\ParameterTypes
+ */
+class ParameterTypesTest extends TestCase {
+
+ public function testAddType_defaultsAreSet() {
+ $types = new ParameterTypes();
+
+ $types->addType(
+ 'kitten',
+ []
+ );
+
+ $type = $types->getType( 'kitten' );
+
+ $this->assertSame(
+ NullParser::class,
+ $type->getStringParserClass()
+ );
+
+ $this->assertSame(
+ NullParser::class,
+ $type->getTypedParserClass()
+ );
+
+ $this->assertSame(
+ NullValidator::class,
+ $type->getValidatorClass()
+ );
+
+ $this->assertNull(
+ $type->getValidationCallback()
+ );
+ }
+
+ public function testRegisterType_parametersAreUsed() {
+ $types = new ParameterTypes();
+
+ $types->addType(
+ 'kitten',
+ [
+ 'string-parser' => 'KittenParser',
+ 'validation-callback' => 'is_int',
+ 'validator' => 'KittenValidator',
+ ]
+ );
+
+ $type = $types->getType( 'kitten' );
+
+ $this->assertSame(
+ 'KittenParser',
+ $type->getStringParserClass()
+ );
+
+ $this->assertSame(
+ 'KittenValidator',
+ $type->getValidatorClass()
+ );
+
+ $this->assertSame(
+ 'is_int',
+ $type->getValidationCallback()
+ );
+ }
+
+}
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/ProcessingResultTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Unit/ProcessingResultTest.php
index 078f86df..e90209a4 100644
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/ProcessingResultTest.php
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Unit/ProcessingResultTest.php
@@ -1,6 +1,6 @@
<?php
-namespace ParamProcessor\Tests;
+namespace ParamProcessor\Tests\Unit;
use ParamProcessor\ProcessedParam;
use ParamProcessor\ProcessingError;
@@ -17,7 +17,7 @@ class ProcessingResultTest extends TestCase {
public function testGetParameters() {
$processedParams = [
- $this->newMockParam()
+ $this->createMock( ProcessedParam::class )
];
$result = new ProcessingResult( $processedParams );
@@ -25,14 +25,9 @@ class ProcessingResultTest extends TestCase {
$this->assertEquals( $processedParams, $result->getParameters() );
}
- private function newMockParam() {
- return $this->getMockBuilder( ProcessedParam::class )
- ->disableOriginalConstructor()->getMock();
- }
-
public function testGetErrors() {
$errors = [
- $this->newMockError()
+ $this->createMock( ProcessingError::class )
];
$result = new ProcessingResult( [], $errors );
@@ -40,11 +35,6 @@ class ProcessingResultTest extends TestCase {
$this->assertEquals( $errors, $result->getErrors() );
}
- private function newMockError() {
- return $this->getMockBuilder( ProcessingError::class )
- ->disableOriginalConstructor()->getMock();
- }
-
public function testGivenNoErrors_HasNoFatal() {
$this->assertNoFatalForErrors( [] );
}
@@ -76,4 +66,24 @@ class ProcessingResultTest extends TestCase {
$this->assertTrue( $result->hasFatal() );
}
+ public function testGetParameterArrayWithNoParameters() {
+ $this->assertSame(
+ [],
+ ( new ProcessingResult( [] ) )->getParameterArray()
+ );
+ }
+
+ public function testGetParameterArray() {
+ $this->assertSame(
+ [
+ 'first' => 42,
+ 'second' => 23,
+ ],
+ ( new ProcessingResult( [
+ new ProcessedParam( 'first', 42, false ),
+ new ProcessedParam( 'second', 23, true )
+ ] ) )->getParameterArray()
+ );
+ }
+
} \ No newline at end of file
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/SettingsTest.php b/www/wiki/vendor/param-processor/param-processor/tests/Unit/SettingsTest.php
index c2491cf5..eec970d9 100644
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/SettingsTest.php
+++ b/www/wiki/vendor/param-processor/param-processor/tests/Unit/SettingsTest.php
@@ -1,6 +1,6 @@
<?php
-namespace ParamProcessor\Tests;
+namespace ParamProcessor\Tests\Unit;
use ParamProcessor\Settings;
use PHPUnit\Framework\TestCase;
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/DimensionParamTest.php b/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/DimensionParamTest.php
deleted file mode 100644
index 52afad5d..00000000
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/Definitions/DimensionParamTest.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-
-namespace ParamProcessor\Tests\Definitions;
-
-/**
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class DimensionParamTest extends ParamDefinitionTest {
-
- /**
- * @see ParamDefinitionTest::getDefinitions
- * @return array
- */
- public function getDefinitions() {
- $params = parent::getDefinitions();
-
- $params['auto'] = [
- 'allowauto' => true,
- ];
-
- $params['allunits'] = [
- 'units' => [ 'px', 'ex', 'em', '%', '' ],
- ];
-
- $params['bounds'] = [
- 'lowerbound' => 42,
- 'upperbound' => 9000,
- 'maxpercentage' => 34,
- 'minpercentage' => 23,
- 'units' => [ 'px', 'ex', '%', '' ],
- ];
-
- return $params;
- }
-
- /**
- * @see ParamDefinitionTest::valueProvider
- *
- * @param boolean $stringlyTyped
- *
- * @return array
- */
- public function valueProvider( $stringlyTyped = true ) {
- $values = [
- 'empty' => [
- [ '100px', true, '100px' ],
- [ '100', true, '100px' ],
- [ 42, true, '42px' ],
- [ 42.5, true, '42.5px' ],
- [ 'over9000', false ],
- [ 'yes', false ],
- [ 'auto', false ],
- [ '100%', false ],
- ],
- 'values' => [
- [ 1, true, '1px' ],
-// array( 2, false ),
- [ 'yes', false ],
- [ 'no', false ],
- ],
- 'auto' => [
- [ 'auto', true, 'auto' ],
- ],
- 'allunits' => [
- [ '100%', true, '100%' ],
- [ '100em', true, '100em' ],
- [ '100ex', true, '100ex' ],
- [ '101%', false ],
- ],
- 'bounds' => [
- [ '30%', true, '30%' ],
- [ '20%', false ],
- [ '40%', false ],
- [ '100px', true, '100px' ],
- [ '100ex', true, '100ex' ],
- [ '10px', false ],
- [ '9001ex', false ],
- ],
- ];
-
- if ( $stringlyTyped ) {
- foreach ( $values as &$set ) {
- foreach ( $set as &$value ) {
- if ( is_int( $value[0] ) || is_float( $value[0] ) ) {
- $value[0] = (string)$value[0];
- }
- }
- }
-
-// $values['empty'][] = array( 42, false );
-// $values['empty'][] = array( 42.5, false );
- }
-
- return $values;
- }
-
- /**
- * @see ParamDefinitionTest::getType
- * @return string
- */
- public function getType() {
- return 'dimension';
- }
-
-}
diff --git a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/ParamDefinitionFactoryTest.php b/www/wiki/vendor/param-processor/param-processor/tests/phpunit/ParamDefinitionFactoryTest.php
deleted file mode 100644
index c48e4bf0..00000000
--- a/www/wiki/vendor/param-processor/param-processor/tests/phpunit/ParamDefinitionFactoryTest.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-namespace ParamProcessor\Tests;
-
-use ParamProcessor\ParamDefinitionFactory;
-use PHPUnit\Framework\TestCase;
-
-/**
- * @covers \ParamProcessor\ParamDefinitionFactory
- *
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-class ParamDefinitionFactoryTest extends TestCase {
-
- public function testCanConstruct() {
- new ParamDefinitionFactory();
- $this->assertTrue( true );
- }
-
- // TODO: test other methods
-
-}